BEM
BEM: Block Element Modifier

BEM

Block Element Modifier
Een naamconventie

naar de slides

CLI output
BEM:
Block - Element - Modifier

Leerdoelen

  • BEM begrijpen
  • Specificiteit bij CSS begrijpen
  • BEM zelfstandig inzetten

Probleemstelling
specificiteit bij CSS

Specificiteit kun je zelfs 'berekenen'

rekenwijze specificiteit

rekenwijze specificiteit
0,1,1,3 wordt dus 113
(dit is redelijk hoog)

rekenwijze specificiteit
0,0,2,3 wordt dus 23
(niet echt hoog)

rekenwijze specificiteit
1,0,0,0 wordt dus 1000
(erg hoog)

Oplossing: voorkom onverwachte effecten specificiteit


geef de elementen een eigen class

en selecteer die elementen met die class-selector.

Dat kan met een naamconventie zoals BEM!


Zeker van belang bij grote projecten met meerdere developers in de frontend.

Kijk bijvoorbeeld bij bootstrap.css: 9690 regels!!!

BEM

Block

Een op zichzelf staand deel van de pagina.
Stukjes mark-up, die vanuit zichzelf een zinvolle betekenis hebben.

Element

Een element in dat block.
Het heeft binnen dat block een eigen semantische betekenis voor het block.

Modifier

variatie in de vormgeving van al deze elementen

Block Element Modifier

Voorbeelden

Block

Een op zichzelf staand deel van de pagina.
header, nav, container, input met label

Element

Een element in dat block.

menu-item, list-item, checkbox-caption, title in de header

Modifier

variatie in de vormgeving van al deze elementen

disabled, highlighted, checked, big, success
Block Element Modifier

BEM naamconventie

block__element--modifier

Voorbeelden

.menu
.menu__menu-item
.menu__menu-item--active
.buttons--horizontal

Leuke voorbeelden online
bekijk de broncode van: https://github.com/benbrehaut/bem-examples
Amsterdam

Amsterdam

Vanuit de Jordaan een foto richting Westertoren genomen.
Een mooie lichtval al is het nat!

Kaart als BEM voorbeeld

  • De hele kaart: .kaartje. Dit is het blok.
  • De afbeelding img in de kaart: .kaartje__afbeelding
    Dit is een element in het blok.
  • de kop h3 in de kaart: .kaartje__kopje
    Dit is een element in het blok.
  • de paragraaf p in de kaart: .kaartje__beschrijving
    Dit is een element in het blok.
  • de knoppen button in de kaart: .kaartje__knop
    Dit is een element in het blok.
  • de knop in de kaart met de call-to-action krijgt bovendien de class .kaartje--cta
    Dit is een modifier op de andere knop.

Voorbeeld van markup en CSS, die beter kan

De CSS is hier niet zo handig georganiseerd: minder functioneel opgebouwd en onhandige herhaling

Regel voor ontwikkelen:
DRY: Don't repeat yourself
De site wordt dan moeilijker in het onderhoud

Markup en CSS verbeterd

Verbeterd

  • geen herhaling;
  • opdeling van verantwoordelijkheden;
  • BEM

Voordelen BEM

  • werken met BEM voorkomt problemen uit specificiteit
  • aan de class-selector kun je beter zien waar het over gaat
  • werken met BEM voorkomt dat CSS regels in het ene blok elders effecten hebben:
    goed onderhoudbaar en eenvoudig taken te verdelen
  • BEM nodigt uit tot modulair development in samenwerking

Nog een BEM voorbeeld

2 opties

Met Sass kun je prima BEM-men

BEM en Sass

door gebruik te maken van de &.
Deze verwijst daar altijd naar de parent selector als er sprake is van nesting.

Opdracht

  • Kies 1 pagina van een uitwerking van vorig jaar
    Eventueel via het kopiƫren van de broncode van een pagina en de bijpassende CSS.
    Vanzelfsprekend is de Bootstrap-opdracht niet geschikt. Projecten en portfolio kunnen echter wel.
  • Plaats deze code in een nieuwe repo op GitHub
  • Pas de mark-up aan naar BEM-naamconventie en maak de CSS kloppend om hetzelfde resultaat te krijgen.
  • Update GitHub liefst met meerdere commits
  • Plaats resultaat online, URL in de README.md
  • Lever de GitHub link in Magister

Bonus opdracht

++ voer de BEM-aanpassing van de CSS uit in Sass
++ extra bonus als je het uitvoert in .sass-bestanden

BEM en Sass

Afsluiting bij code in dia 11.

Er is daar sprake van BEM, maar er zitten meer sterke punten in de code:

Credits

Deze presentatie is gemaakt met gebruik van:

  1. WebSlides
  2. Video tutorial Web Slides Brad Traversy
  3. documentatie WebSlides