Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Аналог 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 {
    /* попадаем сюда, если все условия с таким именем внутри селектора не выполнились */
}

Менее гибко в плане условий, но более просто, коротко и не позволяет городить сложные условия (я считаю, что они сильно снижают читаемость).

2 комментария
Татьяна 2011

А почему не наоборот?
Т. е. в @supports проверяется, что нет (not) поддержки box-shadow, и тогда уже появляются с -moz, -webkit, -o.

Евгений Степанищев (bolknote.ru) 2011

Комментарий для Татьяна:

Легче всю группу сразу проверить.