Статьи

Свойства, специфичные для поставщика

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

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

Формат довольно прост: ключевые слова и имена свойств, начинающиеся с — (тире) или _ (подчеркивание), зарезервированы для расширений, специфичных для поставщика. Таким образом, поставщики должны использовать следующие форматы:

  '-' + идентификатор конкретного поставщика + '-' + значимое имя

 '_' + идентификатор конкретного поставщика + '-' + значимое имя 

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

«Гарантируется, что начальная черта или подчеркивание никогда не будут использоваться в свойстве или ключевом слове каким-либо текущим или будущим уровнем CSS. Таким образом, типичные реализации CSS могут не распознавать такие свойства и могут игнорировать их в соответствии с правилами обработки ошибок синтаксического анализа. Однако, поскольку начальная черта или подчеркивание является частью грамматики, разработчики CSS2.1 всегда должны иметь возможность использовать CSS-совместимый синтаксический анализатор, независимо от того, поддерживают ли они какие-либо специфичные для поставщика расширения ».

Известно, что существует ряд расширений. Их префиксы приведены в таблице 1.

Таблица 1. Префиксы расширений поставщиков
Приставка организация
-ms- Microsoft
mso- Microsoft Office
-moz- Mozilla Foundation ( браузеры на основе Gecko)
-o- Opera Software
-atsc- Комитет по передовым телевизионным стандартам
-wap- WAP Форум
-webkit- Safari (и другие браузеры на основе WebKit)
-khtml- Браузер Konqueror

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

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

Если вы должны использовать расширения, вы должны использовать те, которые тесно связаны с эквивалентными свойствами CSS (будь то CSS1, 2 или 3), чтобы позже вы могли переключиться на стандартное свойство и удалить расширение, когда браузер реализует правильная спецификация

Имея это в виду, давайте вернемся на несколько лет назад и возьмем в качестве примера свойство opacity, которое является частью CSS3 (Candidate Рекомендация, май 2003 г.), которое на самом деле поддерживали лишь несколько браузеров (opacity была реализована в Firefox 1.0, Opera 9 и Safari. 1.2). Поэтому авторы прибегали к использованию специфичных для поставщика расширений, чтобы компенсировать отсутствие поддержки непрозрачности CSS3 в то время. Браузеры на основе Gecko (такие как Mozilla) использовали свойство –moz-opacity, а Safari 1.1 использовал -khtml-opacity. В Internet Explorer версии 5.5 и выше использовалось нестандартное свойство фильтра.

Объединяя вышеупомянутые расширения, следующий метод был (и все еще) широко используется для применения непрозрачности для ряда браузеров:

 .test{ background: red; /* IE filter extension */ filter: progid:DXImageTransform.Microsoft.Alpha(opacity=60); width:100%; /* Required for IE filter */ -moz-opacity: 0.6; /* Mozilla extension */ -khtml-opacity:0.6; /* Konqueror extension (Safari 1.1)*/ opacity: 0.6; /* the correct CSS3 syntax */ } 

В приведенном выше фрагменте кода Internet Explorer будет использовать свойство filter и игнорировать другие объявления непрозрачности. Старые браузеры Gecko, которые не понимают свойство непрозрачности CSS3, будут использовать свойство -moz-opacity, а Safari 1.1 будет учитывать свойство -khtml-opacity. Наконец, если это поддерживается, свойство непрозрачности CSS3 будет учитываться другими браузерами и версиями браузера. Конечно, браузер, который не поддерживает прозрачность элементов, будет игнорировать многое.

Свойство фильтра Internet Explorer — это собственное расширение Microsoft для CSS, которое явно не соответствует правильным правилам именования для расширений, специфичных для поставщика. С другой стороны, свойства Mozilla и Safari (-moz-opacity и –khtml-opacity) соответствуют правилам, и, хотя код не проверяется, вы можете быть уверены, что эти свойства будут относительно безопасны от конфликтов.

Несмотря на то, что такие браузеры, как Firefox, Opera и Safari, в конечном итоге реализовали свойство непрозрачности CSS3, правила стиля, подобные приведенному в примере выше, продолжали работать, обеспечивая плавный переход между старым и новым. (Обратите внимание, что версии Konqueror вплоть до 3.5.4 включительно не поддерживают прозрачность CSS3.)

Как вы можете видеть, расширения могут быть полезны и могут обеспечить меру долговечности; однако не стоит полагаться на наличие расширений. Также возможно, что свойства CSS3 могут быть изменены, прежде чем они станут стандартом. Поэтому, как утверждает W3C, «авторам следует избегать специфичных для поставщика расширений».

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

Как мы уже упоминали, мы не рекомендуем использовать эти расширения в реальном приложении. Можно использовать их для тестирования и для тестирования свойств CSS, которые еще не были реализованы. Это подготовит и обучит вас к тому времени, когда правильный синтаксис CSS станет доступным для общего пользования.

Хотя объяснение всех свойств выходит за рамки этой книги, мы рассмотрим некоторые из них, которые могут оказаться полезными, и исследуем несколько расширений, которые вы можете найти в других местах.