Будет ли CSS 3 по-прежнему позволять опустить конечные точки с запятой?

Похоже, что разрывный (то есть обратное-несовместимое) изменение в предваряющем черновике спецификации модуля синтаксиса CSS: конечная точка с запятой после того, как, возможно, потребуется последнее объявление в блоке.

Сравните старую формулировку (Рабочий проект W3C от 13 августа 2003 г.):

4,8. Наборы правил, блоки объявлений и селекторы
Блок-декларация (также называемый {} -блоком в следующем тексте) начинается с левой фигурной скобки ({) и заканчивается соответствующей фигурной скобкой (}). Между ними должен быть список нулевых или более разделенных разделов (;) объявлений с разделителями с запятой - .

с новым (Редактор Draft 14 June 2012):

2. Описание синтаксиса CSS
Правило начинается с селектора (определяется спецификацией Selectors), затем имеет {} -обложенный блок, содержащий последовательность объявлений. Селектор определяет, к каким элементам будут применяться объявления. Каждое объявление имеет имя свойства, за которым следует двоеточие и значение свойства, а завершено с точкой с запятой.

(основное внимание).

Таким образом, отличные короткие формы, например:

em { color: lime }

(это в настоящее время приведено в качестве действительного примера в рекомендации 3-го уровня CSS-модуля) больше не будет проверяться?

Может ли кто-нибудь более осведомлен о сборе всего проекта 3-го уровня, пожалуйста, проверьте? Для будущих таблиц стилей нам действительно нужно пересмотреть существующие CSS файлы (и вставить точки с запятой, если они отсутствуют) до того, как спецификация завершится или я что-то не понял?

Ответ 1

Похоже, что в настоящее время существует двусмысленность в спецификации.

Вы правильно указали, что 2. Раздел описания синтаксиса предписывает завершение каждого правила точкой с запятой:

Каждое объявление имеет имя свойства, за которым следует двоеточие и значение свойства, и заканчивается точкой с запятой.

И в то же время описание автомата синтаксического анализа в разделе 3.6.8. Режим значения-значения сообщает, что закрывающая скобка без точки с запятой правильно заканчивает объявление и текущее правило одновременно:

} токен

Добавить текущую декларацию к значению текущего правила. Выполните текущее правило из стека открытых правил и добавьте его к значению нового текущего правила. Перейдите в режим содержимого текущего правила.

Таким образом, согласно 3.6.8 конечная точка с запятой является необязательной.

Я не могу сказать о фактическом намерении авторов спецификации. Но, вероятно, следует сообщать и фиксировать текущую ситуацию. Скорее всего, они не намерены нарушать совместимость с CSS 2.1 и переделают свой раздел описания синтаксиса в окончательной версии.

Ответ 2

Я думаю, что это просто ошибка при написании спецификаций, и что реальное намерение состояло в том, чтобы иметь его как разделитель, как и в предыдущих версиях. Я ожидаю, что это будет скорректировано в последующих черновиках.

Служба

Ответ 3

Это пример проблемы "разделитель-терминатор". Очевидно, CSS 3 переместился из точки с запятой, являющейся разделителем, в точку с запятой, являющуюся терминатором. Это означает, что это необходимо после каждого элемента, а не только между элементами. Паскаль (разделитель) и C (терминатор) предоставляют другие примеры. Это приводит к очевидным аномалиям в Паскале, такие как точка с запятой, которая является незаконной до 'else' или 'until'. Почему CSS 3 принял CSS-2-несовместимое правило, выходит за рамки меня, и будут ли реализаций настаивать на этом, это другое дело, но цель цитаты ясна: она является терминатором и поэтому должна присутствовать во всех записях, включая последние.