Digitální agentura Cognito.cz uvádí na trh pokročilý rezervační systém WediLiv, vyvinutý speciálně pro pořadatele svateb a dalších společenských a...

Vyhněte se takzvanému „špageta“ kódu. Prozradím vám, jak díky BEM a SASS udržet kód přehledný a čitelný i v případě, že používáte u modifikátoru mnohočetné zanořování.
Práci na frontendu mi často usnadňuje metoda BEM (Block Element Modifier) a preprocesor SASS. BEM má jednu nespornou výhodou v tom, že když se do projektu zapojí jakýkoliv další vývojář, ví, v jakém stylu má být kód zapsán. Eliminujeme tak nepořádek v kódu. Díky preprocesoru si snadno určíte custom helpery, které vám usnadní každodenní práci a zvýší efektivitu.
Určitě se vám již stalo, že při zanořování u modifikátoru ve stylech došlo k menší komplikaci. Uvedu na příkladu:
<div class="custom">
<div class="custom__child">
<p>Toto je jen ukázka</p>
</div>
</div>
Tento kód nám definuje modifikátor a jeho child. Ve stylech bychom to pak zapsali nějak takto:
.custom {
display: flex;
margin: 1rem 0;
&__child {
@include font-size(22);
color: $black;
p {
margin: 0;
}
}
}
Tímto stylem si definujeme základní nastavení pro modifikátor a také pro jeho child. Co když ale budeme chtít přidat k modifikátoru nějaké specifikum, například barvu pozadí a rozdílnou barvu textu pro child? To bychom běžně udělali následovně:
<div class="custom">
<div class="custom__child">
<p>Toto je jen ukázka</p>
</div>
</div>
<div class="custom custom--black">
<div class="custom__child">
<p>Ukázka s černým pozadím</p>
</div>
</div>
.custom {
display: flex;
margin: 1rem 0;
&__child {
@include font-size(22);
color: $black;
p {
margin: 0;
}
}
/* Black background */
&--black {
background: $black;
.custom__child {
color: $white;
}
}
}
Na příkladu vidíte, že využívám zanoření a ampersand (&). Ale v modifikátoru, kde upravuju barvu pozadí, už nemůžeme využít zanoření u child elementu, protože bychom dostali třídu ve stylu .custom--black__child. Což nechceme, protože se tato třída nikde jinde nevyskytuje a výsledné CSS by mělo o chlup větší velikost, než je třeba. Jak tedy tento problém vyřešit? Definujeme si custom variable v modifikátoru a ten pak šikovně využijeme:
.custom {
$def: &;
display: flex;
margin: 1rem 0;
&__child {
@include font-size(22);
color: $black;
p {
margin: 0;
}
}
/* Black background */
&--black {
background: $black;
#{$def}__child {
color: $white;
}
}
}
Použili jsme variable $def (můžete využít libovolný název) a k němu přiřadili již zmiňovaný ampersand (&). Výsledkem je, že po kompilaci bude styl vypadat jako .custom__child u specifického modifikátoru .custom--black. Tento variable jsme schopni využít u prvků zanořených libovolně hluboko a vždy nám bude odkazovat na náš výchozí modifikátor, u kterého jsme si variable určili. Díky tomu můžeme kontrolovat kód, i když jsme zanořeni v modifikátoru nebo child elementu, a vždy dosáhneme požadovaného výsledku s ušetřením několika znaků navíc.
Digitální agentura Cognito.cz uvádí na trh pokročilý rezervační systém WediLiv, vyvinutý speciálně pro pořadatele svateb a dalších společenských a...
Zatímco o významu poměru čísel 90:60:90 pro vývoj lidstva pochybuje málokdo, skutečnost, že život, vesmír a vůbec řídí konstanty jako 9.81, 6.674 ...
Marketing je divoká jízda plná změn, které přicházejí a odcházejí rychleji než nadšení pro nové sociální trendy. Co fungovalo včera, dnes už nemus...