Vistaprint
styleKeysstandardTile

Standard Tile

The Standard Tile represents our usual way to promote products, or for other instances where an image should be followed by some descriptive text. It is a versatile component with many variations, designed to handle most (but not all) tile needs.

Every Standard Tile includes:

  • an "image" sub-component

  • a "contents" sub-component that contains the tile's name, plus some other optional sub-components such as a description, pricing, promo code, or a badge.

Standard Tile is most often used inside of a grid element, since it is responsive and will expand its width to fill all available space.

Playground

jsx
<StandardTile>
{' '}
{/* use component="a" as appropriate */}
<StandardTileImage>
{/* Responsive or Fluid Image goes here */}
</StandardTileImage>
<StandardTileContents>
<StandardTileName>Name</StandardTileName>
<StandardTileDescription>Description</StandardTileDescription>
</StandardTileContents>
</StandardTile>
<div class="standard-tile">
<!-- use <a> instead of <div> as appropriate -->
<div class="standard-tile-image">
<!-- Responsive or Fluid Image goes here -->
</div>
<div class="standard-tile-contents">
<div class="standard-tile-name">Name</div>
<div class="standard-tile-description">Description</div>
</div>
</div>

Skins

default skin

The default tile contains many optional elements. Only the tile image and tile name are required.

Share
Share
jsx

The "gallery" skin is for displaying a design choice, where clicking on the tile selects or drills down on that choice, rather than going to a product page for the product.

Tiles with the "gallery" skin should only be used inside a Grid using the "tight" option.

Share
Share
jsx
<div class="standard-tile standard-tile-skin-gallery">etc</div>

The "gallery" skin can also take a background image for the tile, using the "Background" sub-component. The tile will then put a background color under the tile contents, so that they can be seen against that background image.

Share
Share
jsx
<div class="standard-tile standard-tile-skin-gallery">
<div class="standard-tile-background">background image goes here</div>
<div class="standard-tile-image">tile image goes here</div>
<div class="standard-tile-contents">etc</div>
</div>

Setting background="translucent" on a gallery tile will set its background to translucent grey, so that it can be overlaid on colored backgrounds.

Share
Share
jsx
<div
class="
standard-tile
standard-tile-background-translucent
standard-tile-skin-gallery
"
>
etc
</div>

"circular" skin

Use the "circular" skin only to drive to a curated category page or pre-filtered gallery.   Do not use it to drive traffic to a PDP or standard Category page!

Tiles with the "circular" skin should use the FluidImage component for the tile's image.

Share
Share
jsx
<a href="someurl" class="standard-tile standard-tile-skin-circular">
<div class="standard-tile-image">
<img src="https://picsum.photos/400/400" class="fluid-image" />
</div>
<div class="standard-tile-contents">
<div class="standard-tile-name">Name</div>
</div>
</a>

"product" skin

Standard Tiles should use the "product" skin when clicking on them takes you to a product/category page.

Share
Share
jsx
<a href="someurl" class="standard-tile standard-tile-skin-product"> etc </a>

"product" skin using full-bleed image

Tiles with the "product" skin can also specify the "full-bleed" option, making the tile's image touch the sides of the tile.

Share
Share
jsx
<a
href="someurl"
class="standard-tile standard-tile-full-bleed standard-tile-skin-product"
>
etc
</a>

We often want our Standard Tile to act as a link to another page. If that's the case, you can make the entire tile be a link.

Share
Share
jsx
jsx
<StandardTile skin="product" component="a" href="#">
<StandardTileImage>{/* image goes here */}</StandardTileImage>
<StandardTileContents>
<StandardTileName>Name</StandardTileName>
<StandardTileDescription>Description</StandardTileDescription>
</StandardTileContents>
</StandardTile>
<a href="somehref" class="standard-tile standard-tile-skin-product">
<div class="standard-tile-image">
<!--image goes here -->
</div>
<div class="standard-tile-contents">
<div class="standard-tile-name">Name</div>
<div class="standard-tile-description">Description</div>
</div>
</a>

If you cannot make the entire tile be a link, you should place the tile inside a Link with the "unstyled" skin to prevent the link from styling the tile's contents.

jsx
<Link href="someurl" skin="unstyled">
<StandardTile>etc.</StandardTile>
</Link>
<a href="somehref" class="link-skin-unstyled">
<div class="standard-tile">
<!-- etc -->
</div>
</a>

Price

Tiles can take an optional "price" sub-element to show a product price. The content inside of this "price" element should follow the standard pricing API.

Name
Description
100 Starting at €10.99 €8.99 Inc. VAT
Share
Share
jsx
jsx
<StandardTileContents>
<StandardTileName>Name</StandardTileName>
<StandardTileDescription>Description</StandardTileDescription>
<StandardTilePrice>{/* pricing goes here */}</StandardTilePrice>
</StandardTileContents>
<div class="standard-tile-contents">
<div class="standard-tile-name">Name</div>
<div class="standard-tile-description">Description</div>
<div class="standard-tile-price">
<!-- pricing goes here, using standard Pricing API -->
</div>
</div>

Color Swatches

Standard Tiles can also take a set of Color Swatches. To support this, wrap the Color Swatches component with the Standard Tiles Swatches sub-component.

Share
Share
jsx

If there are a large number of swatches, you can use the "color swatch" variant of the Accordion to hide some of them.

Place this Accordion in the Standard Tile Contents sub-component, and then place the Standard Tile Swatches sub-component inside the Accordion's content zone.

Share
Share
jsx

Callouts and Overlays

Each Standard Tile has an "overlay" sub-component that goes on top of the tile. You can put a Callout inside this "overlay" sub-component to make it appear on top of the tile's contents.

Callout
Name
Description
Share
Share
jsx
jsx
<StandardTile skin="product">
<StandardTileOverlay>
<Callout>Callout</Callout>
</StandardTileOverlay>
<StandardTileImage>// image goes here</StandardTileImage>
<StandardTileContents>
<StandardTileName>Name</StandardTileName>
<StandardTileDescription>Description</StandardTileDescription>
</StandardTileContents>
</StandardTile>
<div class="standard-tile standard-tile-skin-product">
<div class="standard-tile-overlay">
<span class="callout">Callout</span>
</div>
<div class="standard-tile-image">
<!-- image goes here -->
</div>
<div class="standard-tile-contents">
<div class="standard-tile-name">Name</div>
<div class="standard-tile-description">Description</div>
</div>
</div>

You can place multiple elements inside the tile's overlay. The items will be displayed in a row across the top of the tile.

(If you want the last item in that row to sit in the top right corner of the tile, you'll need to align that item's content to the right.)

Callout
Design templates
// image goes here
Name
Description
Share
Share
jsx

Promo Codes

If you want to add a Promo Code to a tile, place it inside an optional "tile promo code" sub-component.

Name
50% off with promo code
Promo Code
Description
Share
Share
jsx
Name
50% off with promo code
Promo Code
Description
Share
Share
jsx
<div class="standard-tile-contents">
<div class="standard-tile-name">Name</div>
<div class="standard-tile-promo-code">
<div class="standard-tile-promo-code-label">50% off with promo code</div>
<span class="promo-code">Promo Code</span>
</div>
<div class="standard-tile-description">Description</div>
</div>

Additional features for the default skin

These should not be used with tiles that are using the "product" or "gallery" skins.

CTA

If you are using the default skin, you may also want to add an optional "CTA" visual to the tile to emphasize that the tile is clickable. Note: this "CTA" should not be an actual link! (HTML prohibits putting an <a> link inside another <a>.) Instead, use Visage's "CTA" skin to give the appearance of a link; React's StandardTileCTA component takes care of these semantics for you.

Note: if the only text element on the tile is the tile's name, it should still use the "name" sub-component, and should not be a "CTA".

Share
Share
jsx

Badge

If you are using the default skin and want to add a Badge above tile's name, place it inside an optional "tile badge" sub-component.

Recommended
Name
Description
Share
Share
jsx
Recommended
Name
Description
Share
Share
jsx
<div class="standard-tile-contents">
<div class="standard-tile-badge">
<span class="badge">Recommended</span>
</div>
<div class="standard-tile-name">Name</div>
<div class="standard-tile-description">Description</div>
</div>

Tiles with the default skin do not automatically align their content to the bottom of the tile, unlike the other skins. Thus, default tiles can add an optional footer, which sits below the "contents" sub-component. The footer will always be vertically aligned to the bottom of the tile.

Name
This tile's link is in a Standard Tile Footer.
Name
This tile is much, much, much, much, much, much, much, much, much, much, much, much, much, much, much, much, much, much taller.
Share
Share
jsx
jsx
<StandardTile>
<StandardTileImage>{/* image goes here */}</StandardTileImage>
<StandardTileContents>
<StandardTileName>Name</StandardTileName>
<StandardTileDescription>Description</StandardTileDescription>
</StandardTileContents>
<StandardTileFooter>Footer</StandardTileFooter>
</StandardTile>
<div class="standard-tile">
<div class="standard-tile-image">
<!-- image goes here -->
</div>
<div class="standard-tile-contents">
<div class="standard-tile-name">Name</div>
<div class="standard-tile-description">
This tile's link is in a Standard Tile Footer.
</div>
</div>
<div class="standard-tile-footer">
<div class="link link-skin-cta">Get Started</div>
</div>
</div>

Horizontal tiles

You can set a tile with the default skin to have a horizontal layout, with the image at left and the text contents at right.

Name
Description
Share
Share
jsx
jsx
<StandardTile layout="horizontal">...</StandardTile>
<div class="standard-tile standard-tile-horizontal"></div>

Components

StandardTileContents

StandardTileContents has no props of its own

All props are forwarded to the element specified in thecomponentprop(default: <div/>)

StandardTileCTA

StandardTileCTA has no props of its own

All props are forwarded to the element specified in thecomponentprop(default: <div/>)

StandardTileDescription

StandardTileDescription has no props of its own

All props are forwarded to the element specified in thecomponentprop(default: <div/>)

StandardTileImage

StandardTileImage has no props of its own

All props are forwarded to the element specified in thecomponentprop(default: <div/>)

StandardTileName

StandardTileName has no props of its own

All props are forwarded to the element specified in thecomponentprop(default: <div/>)

StandardTileOverlay

StandardTileOverlay has no props of its own

All props are forwarded to the element specified in thecomponentprop(default: <div/>)

StandardTilePrice

StandardTilePrice has no props of its own

All props are forwarded to the element specified in thecomponentprop(default: <div/>)

StandardTilePromoCode

StandardTilePromoCode has no props of its own

All props are forwarded to the element specified in thecomponentprop(default: <div/>)

StandardTilePromoCodeLabel

StandardTilePromoCodeLabel has no props of its own

All props are forwarded to the element specified in thecomponentprop(default: <div/>)

StandardTileBadge

StandardTileBadge has no props of its own

All props are forwarded to the element specified in thecomponentprop(default: <div/>)

StandardTileFooter

StandardTileFooter has no props of its own

All props are forwarded to the element specified in thecomponentprop(default: <div/>)

Guidelines

Designer Guidelines

  • Standard Tiles must have an image and a tile name. Other sub-elements (such as description, promo code, etc) are optional.

  • Standard Tiles do not enforce an aspect ratio on the image. The full image will always be displayed, in its natural aspect ratio.

  • Horizontal tiles should use minimal text. The text area (to the right of the image) should not be taller than the image.

  • Special notes on color swatch usage:

    • Tiles with color swatches should be at least 3 columns wide on the layout grid.

    • Tiles with color swatches should use a limited set of other optional tile elements. The most common use is in conjunction with ratings and pricing.

Developer Guidelines

  • Use a Fluid Image for tiles with the "product" or "gallery" skins, as these tiles already have a specified height for the image. Tiles with the default skin can use either a Fluid Image or a Responsive Image.

  • The "CTA" on the tile is for the action (that's the "A" in "CTA"), such as "See designs" or "Start more". This is an optional sub-element that should only be used for an action. If the only text on the tile is the tile's name, that name should go into the "name" sub-element.

  • If the entire tile is a link (or is wrapped by a link), then the "CTA" should be a <button> tag. This prevents nested <a> tags, which are prohibited by HTML.

Accessibility Guidelines

  • If a sequence of tiles is semantically a list, as is usually the case (e.g. a list of products), then the layout grid elements around the tiles should use ul and li tags, so that the tiles are grouped semantically into a list. Use <ul class="row"> and <li class="col-N"> for the grid elements around the tiles.

  • Tile images have specific requirement for alt attributes:

    • The tile's image should use an empty alt attribute if there is nearby HTML text that presents the same content as the description of the image — which is usually the case for Standard Tiles, since the tile name immediately follows the image, and typically describes the image. (Using an empty alt attribute prevents screen readers from saying the same thing twice in a row: "Business Cards... Business Cards.")

    • SEO may require that a tile image's alt attribute not be empty (per the above), so that the image shows up better in image searches. In this case, if the image and the tile name are both inside the same hyperlink, you can put role="presentation" aria-hidden="true" onto the image. This will hide the image entirely from assistive technologies, but not from screens or search engines.