• Molecule
  • CORE COMPONENT
  • Taxonomic name: M-CARD--PROMO
  • Extension: CARDS-EXTENDED
  • Added on: v3.0.0 (15/09/17)
  • Updated on: v5.5.0 (23/03/21)

Promo cards

Promo cards are a basic card type which can be used to highlight promotional offers.


Design and usage

  • Please restrict promotional heading and descriptive content to two lines in largest desktop view (copy may wrap on to more lines in smaller viewports). Ensure offer heading and description copy are understandable within those constraints.
  • Built to work on light and dark accent colours.

Examples

Full width no link

Interactive example

Code example

<div class="l-section [ Modifiers ]">
	<div class="l-content-container">
		<div class="m-card m-card--promo [ Modifiers ]">
			<div class="m-card-content">
				<div class="m-card-content__inner">
					<h2 class="a-heading a-heading--1 a-heading--semibold">...</h2>
					<p class="a-heading a-heading--3 a-heading--light">...</p>
				</div>
			</div>
		</div>
	</div>
</div>

Full width with link

Interactive example

Code example

<div class="l-section [ Modifiers ]">
	<div class="l-content-container">
		<div class="m-card m-card--link m-card--promo [ Modifiers ]" href="...">
			<div class="m-card-content">
				<div class="m-card-content__inner">
					<h2 class="a-heading a-heading--1 a-heading--semibold"><a class="m-card__link" href="..." aria-describedby="..."></h2>
					<p class="a-heading a-heading--3 a-heading--light">...</p>
				</div>
				<div class="m-card-content__inner m-card-content__inner--bottom">
					<p class="m-card-readmore" id="..." aria-hidden="true"><span>...</span></p>
				</div>
			</div>
		</div>
	</div>
</div>

50:50 split no link

Interactive example

Code example

<div class=" l-section [ Modifiers ]">
	<div class="l-content-container">
		<ul class="a-list-item m-card-split-promo">
			<li class="m-card m-card-split-promo__item [ Modifiers ]">
				<div class="m-card-content">
					<div class="m-card-content__inner">
						<h2 class="a-heading a-heading--2 a-heading--semibold">...</h2>
						<p class="a-heading a-heading--3 a-heading--light">...</p>
					</div>
				</div>
			</li>
			<li class="m-card m-card-split-promo__item [ Modifiers ]">
				<div class="m-card-content">
					<div class="m-card-content__inner">
						<h2 class="a-heading a-heading--2 a-heading--semibold">...</h2>
						<p class="a-heading a-heading--3 a-heading--light">...</p>
					</div>
				</div>
			</li>
		</ul>
	</div>
</div>

50:50 split with link

Interactive example

Code example

<div class=" l-section [ Modifiers ]">
	<div class="l-content-container">
		<ul class="a-list-plain m-card-split-promo">
			<li class="m-card m-card--link m-card-split-promo__item [ Modifiers ]" href="...">
				<div class="m-card-content">
					<div class="m-card-content__inner">
						<h2 class="a-heading a-heading--1 a-heading--semibold"><a class="m-card__link" href="..." aria-describedby="..."></h2>
						<p class="a-heading a-heading--3 a-heading--light">...</p>
					<div class="m-card-content__inner m-card-content__inner--bottom">
						<p class="m-card-readmore" id="..." aria-hidden="true"><span>...</span></p>
					</div>
				</div>
			</li>
			<li class="m-card m-card--link m-card-split-promo__item [ Modifiers ]" href="...">
				<div class="m-card-content">
					<div class="m-card-content__inner">
						<h2 class="a-heading a-heading--1 a-heading--semibold"><a class="m-card__link" href="..." aria-describedby="..."></h2>
						<p class="a-heading a-heading--3 a-heading--light">...</p>
					</div>
					<div class="m-card-content__inner m-card-content__inner--bottom">
						<p class="m-card-readmore" id="..." aria-hidden="true"><span>...</span></p>
					</div>
				</div>
			</li>
		</ul>
	</div>
</div>

Full width with CTA

Interactive example

Code example

<div class="m-card m-card--promo t-accent-dark t-accent-dark--7">
	<div class="m-card-content">
		<div class="m-card-content__inner">
			<h2 class="a-heading a-heading--1 a-heading--semibold">Promotional heading</h2>
			<p class="a-heading a-heading--3 a-heading--light">Promotional descriptive content.</p>
			<ul class="m-button-group">
				<li class="m-button-group__item">
					<a href="#" class="a-button a-button--secondary">
						button 1
					</a>
				</li>

				<li class="m-button-group__item">
					<a href="#" class="a-button a-button--primary">
						button 2
					</a>
				</li>
			</ul>
		</div>
	</div>
</div>

50:50 split with CTA

Interactive example

Code example

<ul class="a-list-plain m-card-split-promo">
	<li class="m-card m-card-split-promo__item t-accent-dark t-accent-dark--7">
		<div class="m-card-content">
			<div class="m-card-content__inner">
				<h2 class="a-heading a-heading--2 a-heading--semibold">Promotional heading</h2>
				<p class="a-heading a-heading--3 a-heading--light">Promotional descriptive content.</p>
				<ul class="m-button-group">
					<li class="m-button-group__item">
						<a href="#" class="a-button a-button--secondary">
							button 1
						</a>
					</li>

					<li class="m-button-group__item">
						<a href="#" class="a-button a-button--primary">
							button 2
						</a>
					</li>
				</ul>
			</div>
		</div>
	</li>

	<li class="m-card m-card-split-promo__item t-accent-dark t-accent-dark--8">
		<div class="m-card-content">
			<div class="m-card-content__inner">
				<h2 class="a-heading a-heading--2 a-heading--semibold">Promotional heading</h2>
				<p class="a-heading a-heading--3 a-heading--light">Promotional descriptive content.</p>
				<ul class="m-button-group">
					<li class="m-button-group__item">
						<a href="#" class="a-button a-button--secondary">
							button 1
						</a>
					</li>

					<li class="m-button-group__item">
						<a href="#" class="a-button a-button--primary">
							button 2
						</a>
					</li>
				</ul>
			</div>
		</div>
	</li>
</ul>

Development and test

Notes for developers

Ensure that there is sufficient text within the anchor tag for it to be understandable where the link is going when read on its own.

Extension component

This component forms part of the 'cards-extended' extension and so requires an additional stylesheet to be loaded in order to be used; include the following code in the header of your page to attach the relevant additional stylesheet:

											
												<link media="all" href="./assets/[ theme type ]/[ release version ]/[ organisation ]/[ theme name ]/css/cards-extended.css" rel="stylesheet" />
											
										

Notes for testers

  • Ensure that links can be accessed via the mouse as well as via tabbing using the keyboard.
  • Ensure that when hovering over a link the style changes noticeably.
  • Ensure that when a link has focus the style changes noticeably.
  • Ensure that text within links is descriptive of what or where the link is going. Additional descriptive text can be hidden visually from the user to aid in make the link understandable especially if there area number of links such as "Find out more" on the page which go to different locations.
  • Use a screen reader to confirm that the links are understandable.

Classes overview

The following table gives you a quick overview of the CSS classes that can be applied.

Class Outcome Required Applied to Comments
.m-card Base style for card Yes .l-columns-column  
.m-card--promo Modifier for promo card Yes .m-card  
m-card-split-promo Container for 50% split promo cards Yes div  
m-card-split-promo__item 50% promo card styling Yes m-card-split-promo > .m-card  

Keyboard operations

TAB

Tabbing to an anchor should make the social link clearly visually different so that the focus point on the page is obvious to the user

SPACE or ENTER

With focus on an anchor, pressing SPACE or ENTER will open the relevant social page.

Component releases

  • Added on: v3.0.0 (15/09/17)
  • Updated on: v5.5.0 (23/03/21)

Latest update:

  • updated: Alternative markup has been created to allow cards to be better linked semantically and to prevent failure of WCAG 1.3.1. These changes are currently optional, but although the old code will continue to work for Framework v5, it has been deprecated and will be removed from v6.

Full version history

A full history of changes and enhancements detailing all minor and major updates to the component.

View full version history

Want something new in Framework, or to chat about an issue you're having with it?

Contact the team