Skip to main content

🖼️ Adding the poster block

info

The files in this step are pre-imported in the chapter's snapshot!

Adding a poster block

For our next task, let's tackle a block that contains long image and some text. We'll refer to this block as the 'poster.' Let's dive in!

Poster

The markup

First, let's add the starting markup code to our poster.twig.

/views/partials/poster.twig
<section class="c-poster">
<div class="c-poster_inner">
<h2 class="u-screen-reader-text">{{ poster.title }}</h2> {# For accessibility since our design didn't have a proper title #}
</div>
</section>

Then add some markup for the upper text, the image and the small block at the end of the block (foot).

/views/partials/poster.twig
<section class="c-poster">
<div class="c-poster_inner">
<h2 class="u-screen-reader-text">{{ poster.title }}</h2>

<div class="c-wysiwyg || c-poster_description">{{ poster.description }}</div>

<div class="c-poster_columns-text">
{# columns-text snippet will go here #}
</div>

<div class="c-poster_foot">
<span>{{ poster.foot }}</span>
</div>
</div>

{% include "@snippets/image.twig" with {
classes: 'c-poster_image',
modifiers: '-cover',
src: poster.img.src,
width: poster.img.width,
height: poster.img.height,
} only %}
</section>

The styles

First, let's add some basic layout styles. These styles will define how the grid works and how elements are initially positioned.

/assets/styles/components/_poster.scss
.c-poster {
@include -margin-large-bottom;
overflow: hidden;
position: relative;
z-index: 0;
}

.c-poster_inner {
position: relative;
z-index: 1;
padding: var(--container-margin);
display: grid;
grid-template-columns: repeat(var(--grid-columns), 1fr);
grid-template-rows: repeat(3, 1fr);
gap: var(--grid-gutter);
min-height: 200vh;

@media (max-width: $to-medium) {
--grid-columns: 1;
min-height: 120vh;
}
}

Then let's add a few styles for the following elements :

  • c-poster_description
  • c-poster_columns-text
  • c-poster_foot
  • c-poster_image
note

We will apply basic positioning styles to the c-poster_columns-text within the c-poster, and this class will also function as the parent for a snippet that already exists with its own files. 👀

/assets/styles/components/_poster.scss
.c-poster_description {
grid-row: 1;

@media (min-width: $from-medium) {
grid-column: 4/7;
}
}

.c-poster_columns-text {
display: inline-flex;
align-items: center;
grid-row: 2;

@media (min-width: $from-medium) {
grid-column: 1/-1;
}
}

.c-poster_foot {
display: inline-flex;
align-items: flex-end;
grid-row: 3;

@media (min-width: $from-medium) {
grid-column: 4/7;
}
}

.c-poster_image {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
}

Adding the columns-text snippet

Let's incorporate the pre-created columns-text snippet, which can be reused in other sections of the page.

/views/partials/poster.twig
<section class="c-poster">
<div class="c-poster_inner">
<h2 class="u-screen-reader-text">{{ poster.title }}</h2>

<div class="c-wysiwyg || c-poster_description">{{ poster.description }}</div>

<div class="c-poster_columns-text">
{% include "@snippets/columns-text.twig" with {
columns: poster.columns
} only %}
</div>

<div class="c-poster_foot">
<span>{{ poster.foot }}</span>
</div>
</div>

{% include "@snippets/image.twig" with {
classes: 'c-poster_image',
modifiers: '-cover',
src: poster.img.src,
width: poster.img.width,
height: poster.img.height,
} only %}
</section>