Критическое изменение: Расширение составных селекторов
LibSass в настоящее время позволяет расширять составные селекторы, такие как .message.info
, но способ его расширения не соответствует тому, как должен работать @extend
.
- Dart Sass
- ✓
- LibSass
- ✗
- Ruby Sass
- ✗
Когда один селектор расширяет другой, Sass стилизует все элементы, которые соответствуют расширителю, как если бы они также соответствуют расширяемому классу. Другими словами, если вы напишете .heads-up {@extend .info}
, это будет работать так же, как вы заменили class="heads-up"
в вашем HTML на class="heads-up info"
.
Следуя этой логике, можно ожидать, что .heads-up {@extend .message.info}
будет работать как замена class="heads-up"
на class="heads-up info message"
. Но сейчас в LibSass и Ruby Sass это работает не так - вместо добавления .heads-up
к каждому селектору, имеющему или .info
, или .message
, он добавляет его только к селекторам, имеющим вместе .info.message
.
Чтобы решить эту проблему, избегайте путаницы и сохраняйте чистоту и эффективность реализации. Возможность расширения составных селекторов не поддерживается в Dart Sass и будет удалена в будущей версии LibSass. Для совместимости пользователи должны расширять каждый простой селектор отдельно:
⚠️ Внимание!
Поскольку Sass не знает деталей HTML, который будет стилизован CSS, любой @extend
может потребовать создания дополнительных селекторов, которые не будут применяться, в частности, к вашему HTML. Это особенно верно при отказе от расширенных составных селекторов.
В большинстве случаев эти дополнительные селекторы не вызовут никаких проблем и добавят только пару дополнительных байтов в сжатый CSS. Но некоторые таблицы стилей могут больше полагаться на старое поведение. В этом случае мы рекомендуем заменить составной селектор на селектор-заполнитель.