Аналог conditional comments появится в CSS
Ура, ребята из W3C одумались и в CSS появится аналог conditional comments. Первого сентября появился черновик нового модуля CSS3 — «CSS Conditional Rules Module Level 3». Самое интересное в нём — новое правило «@supports», которое позволяет проверить поддерживает ли браузер определённый функционал (жаль только нет правила «@supports-but-buggy»).
Есть поддержка «not», «or» и «and», а так же группировки скобками:
@supports (transition-property: color) or
((animation-name: foo)) and
(transform: rotate(10deg))) {
// …
}
Начинание хорошее, но выглядит очень уж громоздко, в документации есть вот такой пример:
@supports ( box-shadow: 2px 2px 2px black ) or
( -moz-box-shadow: 2px 2px 2px black ) or
( -webkit-box-shadow: 2px 2px 2px black ) or
( -o-box-shadow: 2px 2px 2px black ) {
.outline {
color: white;
box-shadow: 2px 2px 2px black;
-moz-box-shadow: 2px 2px 2px black;
-webkit-box-shadow: 2px 2px 2px black;
-o-box-shadow: 2px 2px 2px black;
}
}
Я легко могу представить когда нужна будет ещё более ветвистая и страшная конструкция. Трудности я понимаю — нужно хорошо вписать конструкцию в уже существующий синтаксис CSS. Была бы моя воля, я бы сделал что-то вроде такого:
.outline {
box-shadow: 2px 2px 2px black !fallback(no-box);
-moz-box-shadow: 2px 2px 2px black !fallback(no-box);
-webkit-box-shadow: 2px 2px 2px black !fallback(no-box);
-o-box-shadow: 2px 2px 2px black !fallback(no-box);
}
@fallback no-box, no-smth-else {
/* попадаем сюда, если все условия с таким именем внутри селектора не выполнились */
}
Менее гибко в плане условий, но более просто, коротко и не позволяет городить сложные условия (я считаю, что они сильно снижают читаемость).
А почему не наоборот?
Т. е. в @supports проверяется, что нет (not) поддержки box-shadow, и тогда уже появляются с -moz, -webkit, -o.
Комментарий для Татьяна:
Легче всю группу сразу проверить.