Cześć.
Mam pytanie dot. metodologi BEM. Głównie chodzi o różnicę w stosowaniu bloków, elementów i mixów.
Na sam początek czy dobrze rozumiem, że blok jest uniwersalny, po to aby można go było powielać, i całkowicie niezależny - czyli jeśli "wyrwę" go z jednej strony to mogę go również "wsadzić" do innej i będzie działać oraz wyglądać tak samo, i nie powinien wpływać na otoczenie, zawierać zewnętrznej geometrii typu: marginesy, paddingi, itp...?
Czy dobrze również rozumiem, że element jest zależny od bloku (musi być zagnieżdżony w pewnym bloku) i może zawierać style zewnętrznej geometrii?
Jeżeli faktycznie tak jest to mam praktyczne pytanie. Weźmy jako przykład prosty nagłówek:
<header class="header">
<h1 class="header__title">Tytuł</h1>
<p class="header__subtitle">Podtytuł</p>
<p class="header__text">Jakiś tam tekst</p>
</header>
Chciałbym teraz w CSS ustawić headerowi padding tak, aby elementy wewnątrz niego były trochę "wcięte". Naturalnie dodałbym dla klasy header padding, ale BEM na to nie pozwala, bo ten węzeł jest blokiem.
Mogę więc (choć w tym przypadku wydaje mi się to złym rozwiązaniem) zrobić tak:
<header class="header">
<div class="header__container">
<h1 class="header__title">Tytuł</h1>
<p class="header__subtitle">Podtytuł</p>
<p class="header__text">Jakiś tam tekst</p>
</div>
</header>
Czyli dodałem element div o klasie header__container, do którego już mogę dodać styl z paddingiem. Ale podążając za dokumentacją, są mixy. Więc wydaje mi się, że mogę zrobić tak:
<header class="header header__container">
<h1 class="header__title">Tytuł</h1>
<p class="header__subtitle">Podtytuł</p>
<p class="header__text">Jakiś tam tekst</p>
</header>
I teraz węzeł header jest mixem, tzn. blokiem i elementem (wiem, że nazwa header__container nie jest poprawna, ale nie miałem pomysłu jak inaczej nazwać). I teraz CHYBA mogę w klasie header zastosować style ogólne, a w klasie header__container zawrzeć padding. ALE możliwe, że mogę też zrobić tak:
<header class="header">
<h1 class="header__container header__container--title">Tytuł</h1>
<p class="header__container header__container--subtitle">Podtytuł</p>
<p class="header__container header__container--text">Jakiś tam tekst</p>
</header>
I w klasie header__container dla każdego elementu ostylować padding, a pozostałe style dla poszczególnych elementów umieścić w klasach modyfikatorów, ale to już w ogóle wydaje mi się całkowicie niepoprawne.
Czy moglibyście, proszę, odpowiedzieć na powyższe pytania i wyjaśnić, które podejście jest właściwe, o ile któreś z nich jest, a jeśli nie, to podać wskazówki? Jeden padding a ja nad tym myślę już chyba z godzinę... :)
Z góry dziękuję za pomoc!