Критическое изменение: Расширение составных селекторов
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. Но некоторые таблицы стилей могут больше полагаться на старое поведение. В этом случае мы рекомендуем заменить составной селектор на селектор-заполнитель.