• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

BEM - ten sam blok w tym samym bloku.

Object Storage Arubacloud
+2 głosów
219 wizyt
pytanie zadane 30 kwietnia 2021 w HTML i CSS przez rafal.budzis Szeryf (85,260 p.)

Hej mam problem i nie za bardzo mam pomysł jak to dobrze ugryźć. Przykład poniżej będzie uproszczonym przykładem mojego problemu. Korzystam z BEM i pierwszy raz natrafiłem na ścianę. 

<div class="box box--dark">
    <div class="box__title">main title</div>
    <div class="box__content">
        <div class="box">
            <div class="box__title">sub title 1</div>
            <div class="box__content">
                content 1
            </div>
        </div>
        <div class="box">
            <div class="box__title">sub title 2</div>
            <div class="box__content">
                content 2
            </div>
        </div>
    </div>
</div>

Przez to że używam ten sam blok BEMowy mam problem. Modyfikator dla pierwszego bloku (w tym przykładzie dark ) wpływa i modyfikuje bloki które są dziećmi. Pierwsze co przychodzi do głowy to odwrócić kolejność modyfikatorów. Np tak : 

 

<div class="box">
    <div class="box__title">main title</div>
    <div class="box__content">
        <div class="box box--white">
            <div class="box__title">sub title 1</div>
            <div class="box__content">
                content 1
            </div>
        </div>
        <div class="box box--white">
            <div class="box__title">sub title 2</div>
            <div class="box__content">
                content 2
            </div>
        </div>
    </div>
</div>

Ale niestety przykładowy box jest komponentem Reactowym którym dość często wykorzystujemy w systemie od ponad roku. Obecnie pierwszy raz pojawiła się potrzeba aby jeden box wrzucić do środka drugiego. A odwrócenie modyfikatorów było by dość skomplikowane. Zastanawiam się czy dało by się zabezpieczyć przed tym problemem na poziomie selektorów? 

Mieliście podobne problemy? Jak je rozwiązaliście? 

1 odpowiedź

+2 głosów
odpowiedź 30 kwietnia 2021 przez Comandeer Guru (601,110 p.)
wybrane 1 maja 2021 przez rafal.budzis
 
Najlepsza

A dlaczego modyfikator wpływa na zagnieżdżony .box? Przecież ten wewnętrzny powinien mieć ustawione domyślne stylowanie, które nadpisze to wynikające z modyfikatora.

.box {
    // domyślne stylowanie
}
.box--dark {
    // nadpisanie domyślnych stylów
}

 

komentarz 30 kwietnia 2021 przez rafal.budzis Szeryf (85,260 p.)

Ponieważ mój modyfikator bloku zmienia również elementy. W sumie nigdy się nad tym nie zastanawiałem. To zgodne z BEM? 

.box--dark .box__title {
    color: white;
}

W sumie gdy teraz tak o tym myślę to może warto przerobić to tak aby modyfikatory edytowały CSSowe zmienne które są używane wewnątrz elementów. To chyba by rozwiązało problem. Jednak jestem ciekaw czy znasz jakieś alternatywy?

Każdy BEMowy bloku w naszej aplikacji to jeden komponent Reactowy. Łatwiej było przekazać jedną właściwość (modyfikator bloku) niż robić coś bardziej skomplikowanego do każdego elementu osobno. 

1
komentarz 1 maja 2021 przez Comandeer Guru (601,110 p.)

Ponieważ mój modyfikator bloku zmienia również elementy. W sumie nigdy się nad tym nie zastanawiałem. To zgodne z BEM? 

Tak, jest to zgodne. Bardziej bym się zastanowił nad zagnieżdżaniem bloku w samym sobie – to jest bardziej nietypowe, ale też bym to uznał za poprawne.

W sumie gdy teraz tak o tym myślę to może warto przerobić to tak aby modyfikatory edytowały CSSowe zmienne które są używane wewnątrz elementów. To chyba by rozwiązało problem. Jednak jestem ciekaw czy znasz jakieś alternatywy?

Myślę, że jest to najbardziej eleganckie rozwiązanie. I prawdę mówiąc, nie przychodzi mi do głowy nic innego, niż to. W teorii można też wymusić, by tylko elementy będące bezpośrednimi dziećmi danego bloku były stylowane (.box--dark > .box__title), ale to już brzmi mniej elegancko i pewnie powodowałoby problemy ze specyficznością. 

komentarz 1 maja 2021 przez rafal.budzis Szeryf (85,260 p.)

Dzięki za odpowiedź :) .box--dark > .box__title się u nas nie sprawdzi bo mamy więcej elementów dzieci niż jeden z przykładu. Strasznie by się selektory rozrosły. 

Podobne pytania

0 głosów
2 odpowiedzi 219 wizyt
pytanie zadane 11 grudnia 2019 w HTML i CSS przez michh123 Bywalec (2,790 p.)
0 głosów
2 odpowiedzi 470 wizyt
pytanie zadane 28 lutego 2018 w HTML i CSS przez modular Użytkownik (520 p.)
0 głosów
1 odpowiedź 129 wizyt
pytanie zadane 10 sierpnia 2019 w HTML i CSS przez hun1er76 Stary wyjadacz (11,960 p.)

92,572 zapytań

141,423 odpowiedzi

319,645 komentarzy

61,959 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...