hidden
as true (hidden: true) inside the container_section__header
section in card container config.yml setting. This value (true) applies the class vf-u-sr-only
(for screen reader only) to the section header and hides it. See the example with the hidden header below.vf-u-background-color-ui--grey--light
(which is called 'Gray lightest' in the equivalent WP block) may be used as an alternative background of bordered (white) cards, especially when the section header is hidden and there is no text between the section header and the cards.The containier defaults to three columns (the recommended number of image-based cards per row). However if text-only cards are being used, a 4-column variant is supported cards_per_row: 4
which appends CSS class vf-card-container__col-4
.
The vf-card
component allows for a CSS custom property to be set to define the aspect-ratio
of the card image. This can be set per card, but with the vf-card-container
you should aim for consistency across the vf-card
s it is displaying. Therefore we can pass the aspect-ratio
value from this component and it will cascade through the CSS onto the cards. This is encapsulated to this container, which allows you to set different aspect-ratio
values for different containers as needed.
To set the aspect-ratio
you will need to set the card_custom_aspect_ratio
key/value pair in the .yml
or the {#{% render %}#}
api of the vf-card-container
as needed.
This component targets WCAG 2.1 AA accessibility.
The Meet our people page at the EMBL-EBI site includes examples of the card container that pass the basic contrast tests for accessibility.
To promote molecular biology across Europe
To create a centre of excellence for Europe's leading young molecular biologists
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente harum, omnis provident saepe aut eius aliquam sequi fugit incidunt reiciendis, mollitia quos? Sapiente harum, omnis provident saepe aut eius aliquam sequi fugit incidunt reiciendis, mollitia quos?
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente harum, omnis provident saepe aut eius aliquam sequi fugit incidunt reiciendis, mollitia quos?
Depending on your environment you'll want to use render
or include
. As a rule of thumb: server-side use include
, precompiled browser use render
. If you're using vf-eleventy you should use include
.
include
You'll need to pass a context object from your code or Yaml file (example), as well as the path to the Nunjucks template. Nunjucks' include
is an abstraction of render
and provides some additional portability.
{% set context fromYourYamlFile %}
- or -
{% set context = {
"component-type": "container",
"modifier": "vf-u-background-color-ui--white vf-u-fullbleed",
"cards_aspect_ratio": "16 / 9",
"cards_per_row": 3,
"container_section__header": {
"section_title": "Missions",
"href": "JavaScript:Void(0);",
"vf_section__content": [
"To promote molecular biology across Europe",
"To create a centre of excellence for Europe's leading young molecular biologists"
]
},
"vf_cards": [
{
"variant": "bordered",
"newTheme": "primary",
"card_title": "One card",
"card_href": "JavaScript:Void(0);",
"card_image": "../../assets/vf-card/assets/vf-card-example.png",
"card_text": "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente harum, omnis provident saepe aut eius aliquam sequi fugit incidunt reiciendis, mollitia quos? Sapiente harum, omnis provident saepe aut eius aliquam sequi fugit incidunt reiciendis, mollitia quos?"
},
{
"variant": "bordered",
"newTheme": "primary",
"card_title": "A card here",
"card_href": "JavaScript:Void(0);",
"card_image": "../../assets/vf-card/assets/vf-card-example.png",
"card_text": "Lorem ipsum dolor sit amet, consectetur adipisicing elit."
},
{
"variant": "bordered",
"newTheme": "primary",
"card_title": "Another card",
"card_href": "JavaScript:Void(0);",
"card_image": "../../assets/vf-card/assets/vf-card-example.png",
"card_text": "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente harum, omnis provident saepe aut eius aliquam sequi fugit incidunt reiciendis, mollitia quos?"
}
]
}
%}
{% include "../path_to/vf-card-container/vf-card-container.njk" %}
render
This approach is best for bare-bones Nunjucks environments, such as precompiled templates with the Nunjucks slim runtime where include
is not be available.
{% render '@vf-card-container', {
"component-type": "container",
"modifier": "vf-u-background-color-ui--white vf-u-fullbleed",
"cards_aspect_ratio": "16 / 9",
"cards_per_row": 3,
"container_section__header": {
"section_title": "Missions",
"href": "JavaScript:Void(0);",
"vf_section__content": [
"To promote molecular biology across Europe",
"To create a centre of excellence for Europe's leading young molecular biologists"
]
},
"vf_cards": [
{
"variant": "bordered",
"newTheme": "primary",
"card_title": "One card",
"card_href": "JavaScript:Void(0);",
"card_image": "../../assets/vf-card/assets/vf-card-example.png",
"card_text": "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente harum, omnis provident saepe aut eius aliquam sequi fugit incidunt reiciendis, mollitia quos? Sapiente harum, omnis provident saepe aut eius aliquam sequi fugit incidunt reiciendis, mollitia quos?"
},
{
"variant": "bordered",
"newTheme": "primary",
"card_title": "A card here",
"card_href": "JavaScript:Void(0);",
"card_image": "../../assets/vf-card/assets/vf-card-example.png",
"card_text": "Lorem ipsum dolor sit amet, consectetur adipisicing elit."
},
{
"variant": "bordered",
"newTheme": "primary",
"card_title": "Another card",
"card_href": "JavaScript:Void(0);",
"card_image": "../../assets/vf-card/assets/vf-card-example.png",
"card_text": "Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente harum, omnis provident saepe aut eius aliquam sequi fugit incidunt reiciendis, mollitia quos?"
}
]
} %}
<section class="vf-card-container vf-card-container__col-3 | vf-u-background-color-ui--white vf-u-fullbleed" style="--vf-card__image--aspect-ratio: 16 / 9;">
<div class="vf-card-container__inner">
<div class="vf-section-header">
<h2 class="vf-section-header__heading vf-section-header__heading--is-link"><a href="JavaScript:Void(0);">Missions</a><svg aria-hidden="true" class="vf-section-header__icon | vf-icon vf-icon-arrow--inline-end" width="1em" height="1em" xmlns="http://www.w3.org/2000/svg">
<path d="M0 12c0 6.627 5.373 12 12 12s12-5.373 12-12S18.627 0 12 0C5.376.008.008 5.376 0 12zm13.707-5.209l4.5 4.5a1 1 0 010 1.414l-4.5 4.5a1 1 0 01-1.414-1.414l2.366-2.367a.25.25 0 00-.177-.424H6a1 1 0 010-2h8.482a.25.25 0 00.177-.427l-2.366-2.368a1 1 0 011.414-1.414z" fill="" fill-rule="nonzero"></path>
</svg></h2>
<p class="vf-section-header__text">To promote molecular biology across Europe</p>
<p class="vf-section-header__text">To create a centre of excellence for Europe's leading young molecular biologists</p>
</div>
<article class="vf-card vf-card--brand vf-card--bordered">
<img src="../../assets/vf-card/assets/vf-card-example.png" alt="" class="vf-card__image" loading="lazy">
<div class="vf-card__content | vf-stack vf-stack--400">
<h3 class="vf-card__heading"><a class="vf-card__link" href="JavaScript:Void(0);">One card <svg aria-hidden="true" class="vf-card__heading__icon | vf-icon vf-icon-arrow--inline-end" width="1em" height="1em" xmlns="http://www.w3.org/2000/svg">
<path d="M0 12c0 6.627 5.373 12 12 12s12-5.373 12-12S18.627 0 12 0C5.376.008.008 5.376 0 12zm13.707-5.209l4.5 4.5a1 1 0 010 1.414l-4.5 4.5a1 1 0 01-1.414-1.414l2.366-2.367a.25.25 0 00-.177-.424H6a1 1 0 010-2h8.482a.25.25 0 00.177-.427l-2.366-2.368a1 1 0 011.414-1.414z" fill="currentColor" fill-rule="nonzero"></path>
</svg>
</a></h3>
<p class="vf-card__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente harum, omnis provident saepe aut eius aliquam sequi fugit incidunt reiciendis, mollitia quos? Sapiente harum, omnis provident saepe aut eius aliquam sequi fugit incidunt reiciendis, mollitia quos?</p>
</div>
</article>
<article class="vf-card vf-card--brand vf-card--bordered">
<img src="../../assets/vf-card/assets/vf-card-example.png" alt="" class="vf-card__image" loading="lazy">
<div class="vf-card__content | vf-stack vf-stack--400">
<h3 class="vf-card__heading"><a class="vf-card__link" href="JavaScript:Void(0);">A card here <svg aria-hidden="true" class="vf-card__heading__icon | vf-icon vf-icon-arrow--inline-end" width="1em" height="1em" xmlns="http://www.w3.org/2000/svg">
<path d="M0 12c0 6.627 5.373 12 12 12s12-5.373 12-12S18.627 0 12 0C5.376.008.008 5.376 0 12zm13.707-5.209l4.5 4.5a1 1 0 010 1.414l-4.5 4.5a1 1 0 01-1.414-1.414l2.366-2.367a.25.25 0 00-.177-.424H6a1 1 0 010-2h8.482a.25.25 0 00.177-.427l-2.366-2.368a1 1 0 011.414-1.414z" fill="currentColor" fill-rule="nonzero"></path>
</svg>
</a></h3>
<p class="vf-card__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
</div>
</article>
<article class="vf-card vf-card--brand vf-card--bordered">
<img src="../../assets/vf-card/assets/vf-card-example.png" alt="" class="vf-card__image" loading="lazy">
<div class="vf-card__content | vf-stack vf-stack--400">
<h3 class="vf-card__heading"><a class="vf-card__link" href="JavaScript:Void(0);">Another card <svg aria-hidden="true" class="vf-card__heading__icon | vf-icon vf-icon-arrow--inline-end" width="1em" height="1em" xmlns="http://www.w3.org/2000/svg">
<path d="M0 12c0 6.627 5.373 12 12 12s12-5.373 12-12S18.627 0 12 0C5.376.008.008 5.376 0 12zm13.707-5.209l4.5 4.5a1 1 0 010 1.414l-4.5 4.5a1 1 0 01-1.414-1.414l2.366-2.367a.25.25 0 00-.177-.424H6a1 1 0 010-2h8.482a.25.25 0 00.177-.427l-2.366-2.368a1 1 0 011.414-1.414z" fill="currentColor" fill-rule="nonzero"></path>
</svg>
</a></h3>
<p class="vf-card__text">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente harum, omnis provident saepe aut eius aliquam sequi fugit incidunt reiciendis, mollitia quos?</p>
</div>
</article>
</div>
</section>
To promote molecular biology across Europe
To create a centre of excellence for Europe's leading young molecular biologists
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente harum, omnis provident saepe aut eius aliquam sequi fugit incidunt reiciendis, mollitia quos? Sapiente harum, omnis provident saepe aut eius aliquam sequi fugit incidunt reiciendis, mollitia quos?
Lorem ipsum dolor sit amet, consectetur adipisicing elit.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sapiente harum, omnis provident saepe aut eius aliquam sequi fugit incidunt reiciendis, mollitia quos?
This repository is distributed with npm. After installing npm, you can install vf-card-container
with this command.
$ yarn add --dev @visual-framework/vf-card-container
The style files included are written in Sass. If you're using a VF-core project, you can import it like this:
@import "@visual-framework/vf-card-container/index.scss";
Make sure you import Sass requirements along with the modules. You can use a project boilerplate or the vf-sass-starter
vf-section-header
and vf-cards.--page-grid-gap)
.aspect-ratio
of the vf-card
child componentsdefault
context data in the .yml
file to a variant
to allow easier use of ``.--vf-card-container__grid--size--overide
CSS custom property in CSS--vf-card-container__grid--size--overide
as .yml optionvf-section-header
work as a subcomponentvf-card
File system location: components/vf-card-container
Find an issue on this page? Propose a change or discuss it.