Будет ли CSS 3 по-прежнему позволять опустить конечные точки с запятой?
Кажется, что в спецификации уровня 3 модуля синтаксиса CSS происходит нарушение (т. е. обратно несовместимое) предстоящий проект: конечная точка с запятой после последнего объявления в блоке теперь, возможно, требуется.
сравните старую формулировку (W3C рабочий проект 13 августа 2003):
4.8. Наборы правил, блоки объявлений и селекторы
Блок объявления (также называемый {} - блоком в следующем тексте) начинается с левой фигурной фигурная скобка ({) и заканчивается соответствующей правой фигурной скобкой (}). Между ними должен быть список из нуля или более точкамиотделить (;) деклараций.
С Новым (редакторский проект 14 июня 2012):
2. Описание синтаксиса CSS
Правило начинается с селектора (определенного спецификацией селекторов), затем имеет {}-обернутый блок, содержащий последовательность объявлений. Селектор указывает, элементы деклараций будут применяться. Каждое объявление имеет имя свойства, за которым следует двоеточие и значение свойства и закончил с запятой.
(выделено мной).
Так что изящные короткие формы, например:
em { color: lime }
(в настоящее время это указано как допустимый пример в рекомендации уровня 3 модуля цвета CSS) больше не будет проверять?
может ли кто-то более осведомленный о всей коллекции черновиков уровня 3 пожалуйста, проверьте? Для будущих таблиц стилей нам действительно нужно пересмотреть существующие CSS-файлы (и вставить точки с запятой, если они отсутствуют) до завершения спецификации или я что-то неправильно понял?
3 ответов
похоже, что в настоящее время неопределенность в спец.
вы правильно указали, что 2. Раздел описания синтаксиса предписывает заканчивать каждое правило точкой с запятой:
каждое объявление имеет имя свойства, за которым следует двоеточие и значение свойства, и заканчивается точкой с запятой.
и в то же время описание разбора автомата в разделе 3.6.8. Режим объявления значения читает что закрывающая скобка без точки с запятой правильно завершает объявление и текущее правило одновременно:
} маркер
добавьте текущее объявление к значению текущего правила. Извлеките текущее правило из стека открытых правил и добавьте его к значению нового текущего правила. Переключитесь в режим содержимого текущего правила.
Так, по данным 3.6.8 точка с запятой необязательный.
Я не могу сказать о фактическом намерении авторов спецификации. Но нынешнюю ситуацию, вероятно, следует доложить и исправить. Скорее всего, у них нет намерения нарушать совместимость с CSS 2.1 и будет перефразировать их Описание Синтаксис раздел в окончательной версии.
Я думаю, что это просто ошибка при написании спецификаций, и что реальным намерением было иметь его в качестве разделителя, как и в предыдущих версиях. Я ожидаю, что это будет скорректировано в последующих проектах.
на служба проверки W3C говорит, что пример без конечной точки с запятой является допустимым уровнем CSS 3.
однако я, как всегда, закончу каждое объявление точкой с запятой. Это хорошая практика, чтобы вы не забыли разделитель при добавлении дополнительных объявлений.
Это пример проблемы "разделитель-Терминатор". Очевидно, CSS 3 переместился из точки с запятой, являющейся разделителем, в точку с запятой, являющуюся Терминатором. Это означает, что он требуется после каждого элемента, а не только между элементами. Паскаль (разделитель) и C (Терминатор) предоставляют другие примеры. Это приводит к очевидным аномалиям в Паскале, таким как точка с запятой, являющаяся незаконной перед "else" или "until". Почему CSS 3 принял CSS-2-несовместимое правило вне меня, и являются ли реализации будет настаивать на этом-другое дело, но смысл цитаты ясен: это Терминатор и поэтому должен присутствовать на всех записях, включая последнюю.