Заказ в синтаксисе CSS3 по стандарту CSS3 на основе поставщика

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

Например, см. здесь

-moz-border-radius: 10px;
border-radius: 10px;

Это применимо к браузеру border-radius, а затем возвращается к стандартным методам, позже будет надеяться, что он будет проигнорирован, но все же.

Аналогично, переключая их порядок

border-radius: 10px;
-moz-border-radius: 10px;

Теперь сначала выполняется стандартный синтаксис, а затем возвращается к расширению на основе браузера.

Это какая-то разница, вызванная заказом? Может быть с точки зрения производительности или иначе.

Ответ 1

Теперь сначала выполняется стандартный синтаксис, а затем возвращается к расширению на основе браузера.

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

Причина, по которой вы должны объявить свойство unsrefixed last, заключается в том, что как свойства каскадируются в правиле: браузер всегда будет использовать последний применимый. Префиксные и неподписанные версии свойства рассматриваются как одно и то же свойство в отношении каскада, поэтому вы хотите, чтобы браузер сделал все возможное, чтобы придерживаться стандартов при применении этого свойства. 1

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


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

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

Ответ 2

При написании свойств CSS3, современная мудрость заключается в том, чтобы перечислить "реальное" свойство последним и префиксы поставщика сначала.

Еще одна вещь, о которой стоит подумать, когда вы включаете свойство non-prefixed, - это разместить его после версий с префиксом поставщика. Когда браузер реализует стандартную версию свойства, как указано в соответствующей спецификации CSS3, вы, скорее всего, хотите, чтобы она использовала эту реализацию вместо экспериментальной версии для браузера (которая, скорее всего, будет поддерживать обратную совместимость), Включение последнего должно гарантировать, что оно переопределит реализацию с префиксом поставщика.

См. Заказ свойств CSS3

См. также: Помните свойства CSS 3 с предварительным префиксом (и помещаем их последним)

Ответ 3

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

Если браузер отключает поддержку префикса, он просто игнорирует правило и выполняет стандартную версию.

ps: то же, что и A.K. но проще, поэтому вам не нужно читать все страницы.