Leggendo le funzionalità di base SASS sul loro sito web, mi sono imbattuto nella funzione @extend
.
L'esempio che danno è il seguente:
.message {
border: 1px solid #ccc;
padding: 10px;
color: #333;
}
.success {
@extend .message;
border-color: green;
}
.error {
@extend .message;
border-color: red;
}
.warning {
@extend .message;
border-color: yellow;
}
Che compila in
.message, .success, .error, .warning {
border: 1px solid #cccccc;
padding: 10px;
color: #333;
}
.success {
border-color: green;
}
.error {
border-color: red;
}
.warning {
border-color: yellow;
}
Quindi con questo frammento di codice HTML
<div class="success">hello world</div>
stili il tuo elemento con le proprietà di .message
e .success
. Tuttavia ritengo che questo modo di scrivere HTML (e CSS) sia molto scarso, in termini di semantica (non si vede esplicitamente dal markup sopra che l'elemento ha anche lo stile di .message
).
Non dovrebbe lo snippet sopra essere
<div class="message success">hello world</div>
Ritengo che sia più descrittivo e più facilmente riusabile. Ad esempio, potrei assegnare la classe .success
(come scritto nel CSS precedente ma senza @extend
) ad altri elementi che non sono messaggi, e quindi usare la classe come modificatore, in modo BEM.
Quindi la mia domanda è: l'approccio di esempio SASS è più desiderabile del mio?