
Deel 10: Componenten
Web Design
Wat zijn componenten?
Componenten
Wat is een component?
Componenten zijn zelf-gedefinieerde delen van een webpagina, die volledig op zich staan.
Wat is een component?

Wat is een component?

Wat is een component?

Wat is een component?

Wat is een component?
Een component kan herbruikt worden visueel naast andere componenten, op andere pagina's en er bestaan ook variaties van.
Van zodra iets herbruikbaar wordt, kan je het een "component" gaan noemen. Hoe klein een component ook is.
Wat is een component?
Een component kan herbruikt worden visueel naast andere componenten, op andere pagina's en er bestaan ook variaties van.
Van zodra iets herbruikbaar wordt, kan je het een "component" gaan noemen. Hoe klein een component ook is.
Wat is een component?


Componenten benoemen
Componenten
Componenten benoemen
Componenten kunnen we gaan benoemen in HTML met logische classes.
<article class="card">
<h3>Card title</h3>
<h4>Secondary title</h4>
<p>Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a href="...">Action 1</a><a href="...">Action 2</a>
</article>
.card {
border: 1px solid #333;
padding: 1rem;
background: #FFF;
}
.card h3 {
font-size: 2rem;
}
.card a {
color: blue;
text-transform: uppercase;
}

Componenten benoemen
Met dezelfde CSS kunnen we dan componenten gaan hergebruiken.
<article class="card">
<h3>Card title</h3>
<h4>Secondary title</h4>
<p>Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3>Card title</h3>
<h4>Secondary title</h4>
<p>Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a href="...">Action 1</a><a href="...">Action 2</a>
</article>


Componenten benoemen
Een variatie wordt dan geïdentificeerd door een extra class.
<article class="card card--green">
<h3>Card title</h3>
<h4>Secondary title</h4>
<p>Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3>Card title</h3>
<h4>Secondary title</h4>
<p>Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3>Card title</h3>
<h4>Secondary title</h4>
<p>Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3>Card title</h3>
<h4>Secondary title</h4>
<p>Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a href="...">Action 1</a><a href="...">Action 2</a>
</article>





Componenten benoemen
<article class="card card--green">
<h3>Card title</h3>
<h4>Secondary title</h4>
<p>Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3>Card title</h3>
<h4>Secondary title</h4>
<p>Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3>Card title</h3>
<h4>Secondary title</h4>
<p>Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3>Card title</h3>
<h4>Secondary title</h4>
<p>Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a href="...">Action 1</a><a href="...">Action 2</a>
</article>





.card {
border: 1px solid #333;
padding: 1rem;
background: #FFF;
}
.card h3 {
font-size: 2rem;
}
.card a {
color: blue;
text-transform: uppercase;
}
.card--green {
background: green;
color: #FFF;
}
.card--green a {
color: green;
}
.card--green {
background: green;
color: #FFF;
}
.card--green a {
color: green;
}
Class naming convention
Componenten
Class naming convention
Een naamgevings conventie wanneer we onze classes schrijven.
- Maakt je selectors meer verstaanbaar door gewoon de naam te lezen.
- Maakt duidelijk op welke plaats je classes kunt hergebruiken in HTML
- Het maakt de relaties duidelijk tussen classes.
Class naming convention
Wij gaan kiezen voor de Block - Element - Modifier methodologie, kortweg de BEM methodologie.
In BEM gaan we classes gaan schrijven met 2 liggende streepjes __
en/of 2 vliegende streepjes --
.block {...}
.block__element {...}
.block--modifier {...}
Class naming convention
Met "__" gaan we een onderdeel van een component benoemen.
Met "--" gaan we een variatie van een component benoemen
.person {...}
.person__hand {...}
.person--female {...}
.person--female__hand {...}
.person__hand--left {...}
Class naming convention
Toegepast op onze "card"-componenten:
Class naming convention
<article class="card">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>
Toegepast op onze "card"-componenten:
Class naming convention
.card {
border: 1px solid #333;
padding: 1rem;
background: #FFF;
}
.card h3 {
font-size: 2rem;
}
.card a {
color: blue;
text-transform: uppercase;
}
.card {
border: 1px solid #333;
padding: 1rem;
background: #FFF;
}
.card__title {
font-size: 2rem;
}
.card__button {
color: blue;
text-transform: uppercase;
}
0 - 1 - 1
0 - 1 - 1
0 - 1 - 0
0 - 1 - 0
0 - 1 - 0
0 - 1 - 0
Componenten benoemen
Een class variatie toevoegen is slechts 1 class toevoegen: "card--green"
<article class="card card--green">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>





Componenten benoemen
Let op: Laat de class "card" staan in de HTML, zo hoef je enkel de CSS te schrijven voor die de variatie vereist.
<article class="card card--green">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>




.card {
border: 1px solid #333;
padding: 1rem;
background: #FFF;
}
.card h3 {
font-size: 2rem;
}
.card a {
color: blue;
text-transform: uppercase;
}
.card--green {
background: green;
color: #FFF;
}
.card--green a {
color: green;
}
.card--green {
background: green;
color: #FFF;
}
.card--green a {
color: green;
}
Componenten benoemen
Of voeg meerdere variatie classes toe!
<article class="card card--green">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card card--center">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>




Componenten benoemen
Of voeg meerdere variatie classes toe!
<article class="card card--green">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card card--center">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>
<article class="card">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>
.card {
border: 1px solid #333;
padding: 1rem;
background: #FFF;
}
.card__title {
font-size: 2rem;
}
.card__button {
color: blue;
text-transform: uppercase;
}
.card--green {
background: green;
color: #FFF;
}
.card--green .card__button {
color: green;
}
.card--center {
text-align: center;
}
Welke variatie kan ik nog maken door de 2 variatie-classes te combineren?



<article class="card card--green card--center">
<h3 class="card__title">Card title</h3>
<h4 class="card__subtitle">Secondary title</h4>
<p class="card__text">Greyhound divisively hello coldly wonderfully marginally far upon excluding.</p>
<a class="card__button" href="...">Action 1</a><a href="...">Action 2</a>
</article>
Componenten benoemen
Een groene card die ook gecentreerd is!

Hoeveel variaties van de "card" zijn mogelijk als we deze CSS extra toevoegen?
.card--funky {
border-radius: 80px 0px 80px 0;
border: 6px solid black;
}
.card {
border: 1px solid #333;
padding: 1rem;
background: #FFF;
}
.card__title {
font-size: 2rem;
}
.card__button {
color: blue;
text-transform: uppercase;
}
.card--green {
background: green;
color: #FFF;
}
.card--green .card__button {
color: green;
}
.card--center {
text-align: center;
}
.card--funky {
border-radius: 80px 0px 80px 0;
border: 6px solid black;
}








Class naming convention
Een naamgevings conventie wanneer we onze classes schrijven.
- Maakt je selectors meer verstaanbaar door gewoon de naam te lezen.
- Maakt duidelijk op welke plaats je classes kunt hergebruiken in HTML
- Het maakt de relaties duidelijk tussen classes.
Class naming convention
Kies een classname voor het volgende onderdeel:

.mario
?
Kies een classname voor het volgende onderdeel:

?
.mario__shoe
?
Kies een classname voor het volgende onderdeel:

.mario__glove
?
Kies een classname voor het volgende onderdeel:

?
.mario__head
Kies een classname voor het volgende onderdeel:

.mario__face
?
Kies een classname voor het volgende onderdeel:

?
.mario__eye
Kies een classname voor het volgende onderdeel:

.mario__eye
?
.mario__eye
?
Kies een classname voor het volgende onderdeel:

.mario__eye
.mario__eye--left
.mario__eye
.mario__eye--right
Kies een classname voor het volgende onderdeel:

.mario
?
Kies een classname voor het volgende onderdeel:

.mario
.mario--baby
Class naming convention
Maak logische classnames:
👎 .mario--male__head__eyes--left--blue
👍 .eye--left .eye--blue
Elke class doet iets specifiek!
Opdracht @home
Class-based jungle
Media queries
Componenten
Media queries
Media queries worden gebruikt om vanuit CSS een onderscheid te kunnen maken om conditioneel stijl toe te passen in bepaalde scenarios.
Conceptueel: Als [media-query] dan [CSS].
Media queries
Als scherm breder is dan 20rem, mag de text in het midden uitgelijnd worden.
.card {
text-align: left;
}
@media(min-width: 20rem) {
.card {
text-align: center;
}
}
Media queries
Als scherm breder is dan 20rem, mag de ".card" 20% breedte hebben.
.card {
text-align: left;
color: blue;
padding: 1rem;
width: 100%;
}
@media(min-width: 20rem) {
.card {
width: 20%;
}
}
Media queries
Als scherm tussen 20rem en 50rem is, mag de ".card" 20% breedte hebben.
.card {
...
width: 100%;
}
@media(min-width: 20rem) {
.card {
width: 20%;
}
}
@media(min-width: 50rem) {
.card {
width: 100%;
}
}
Media queries
Media queries dragen niet bij tot de specificiteit!
.card {
...
width: 100%;
}
@media(min-width: 20rem) {
.card {
width: 20%;
}
}
@media(min-width: 50rem) {
.card {
width: 100%;
}
}
0 - 0 - 0
0 - 0 - 0
Media queries
Media queries dragen niet bij tot de specificiteit!
.card {
...
width: 100%;
}
@media(min-width: 20rem) {
.card {
width: 20%;
}
}
@media(min-width: 50rem) {
.card {
width: 100%;
}
}
Mobiel is het belangrijkste,
we gaan dus van mobiel naar desktop
Media queries
Zorg er wel voor dat je de media queries in de juiste volgorde plaatst.
@media(min-width: 50rem) {
.card {
width: 100%;
}
}
.card {
...
width: 100%;
}
@media(min-width: 20rem) {
.card {
width: 20%;
}
}
👎
Media queries
Plaats de media queries bij het component dat je aan het stijlen bent.
.card {
...
width: 100%;
}
@media(min-width: 20rem) {
.card {
width: 20%;
}
}
.my-title {
color: green;
}
@media(min-width: 20rem) {
.my-title {
color: blue;
}
}
Media queries
👎 Gebruik geen max-width als media query, want dat breekt het principe van mobile-first.
.card {
...
width: 100%;
}
@media(max-width: 20rem) {
.card {
width: 20%;
}
}
Opdracht @home
Mario IV - Queries
Web Design Deel 10: Componenten
By Evelien Rutsaert
Web Design Deel 10: Componenten
class-based theming, class-naming convention, Media queries.
- 296