Почему свойства CSS имеют разные названия для Chrome, FF, Opera? - PullRequest
5 голосов
/ 28 февраля 2011

Мне нужна тень ниже div, называемая "тень":

#shadow { box-shadow: 1px 1px 1px #000 };

Готово?

Совсем нет.Работает только в одном браузере.Угадай, какой.

Для FF / Chrome нужно добавить не слишком интуитивно понятный:

-moz-box-shadow: 1px 1px 1px #000;
-webkit-box-shadow: 1px 1px 1px #000;

И теперь все в порядке.Эта схема применяется к МНОГИМ свойствам CSS.Почему?

К счастью, нет -webkit-border, moz-font или -ie-backgroundcolor.

PS.Да, ни слова об IE.Называть ЭТО браузером - все равно что сравнивать инвалидную коляску с автомобилями Модены.

PS 2. Почему под моим постом рядом с тегом Google Chrome стоит логотип?Или почему нет логотипов для Opera & FF?

Ответы [ 5 ]

3 голосов
/ 28 февраля 2011

Это происходит потому, что браузеры не хотят конфликтовать друг с другом. Кроме того, на данный момент не существует «спецификации» для box-shadow, поэтому некоторые браузеры имеют свою собственную реализацию.

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

Источник: http://reference.sitepoint.com/css/vendorspecific

2 голосов
/ 28 февраля 2011

Это способ для браузеров выпускать функции до того, как спецификация CSS будет полностью одобрена.

Например, посмотрите на градиенты CSS3.-moz- против -webkit- совершенно разные.

background-image: -webkit-gradient(
    linear,
    left bottom,
    left top,
    color-stop(0.15, rgb(145,4,88)),
    color-stop(0.58, rgb(174,30,115)),
    color-stop(0.79, rgb(209,57,150))
);
background-image: -moz-linear-gradient(
    center bottom,
    rgb(145,4,88) 15%,
    rgb(174,30,115) 58%,
    rgb(209,57,150) 79%
);

Это может представлять интерес: http://www.alistapart.com/articles/prefix-or-posthack/

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

ПРИМЕЧАНИЕ. Рекомендуется включать версию без префиксов, чтобы продолжить работу сайтов, когда свойствополностью принят.

0 голосов
/ 28 февраля 2011

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

Это преднамеренное поведение ; спецификация CSS указывает, что именно так они и должны действовать в этом случае. Причины этого правила следующие:

  • Чтобы гарантировать, что когда разные браузеры реализуют эту функцию по-разному (из-за изменений или несоответствий в спецификации), все эти различия могут быть включены в одну таблицу стилей.
    Например: ранние версии -moz-border-radius работали совсем не так, как -webkit-border-radius; между ними были значительные синтаксические различия, поэтому, если бы они оба были просто border-radius, вы бы не смогли поддержать их обоих.
  • Для упрощения перехода после завершения спецификации.
    Если вы используете функцию с префиксом поставщика, всегда ставьте версию без префикса последней, после других. Таким образом, браузер, который был недавно обновлен для его правильной поддержки, будет подбирать правильную версию, а не заменять ее устаревшей префиксной версией.
  • Чтобы веб-разработчики знали , когда они используют функцию, которая не обязательно готова к использованию в прайм-тайм.
    Это важно: вам должно быть ясно, что использование функции с префиксами вендора означает, что вы используете функцию, которая, по мнению создателей браузеров и разработчиков спецификаций, еще не готова. Вы должны знать это. Не позволяйте этому прекратить использование чего-либо, если это полезно, но помните, что в следующей версии все может измениться.
0 голосов
/ 28 февраля 2011

Свойствам, которые реализованы на основе незавершенных спецификаций, присваивается префикс поставщика. То же самое, если данный поставщик считает, что их реализация еще не завершена, даже если спецификация такова.

0 голосов
/ 28 февраля 2011

Возможности браузеров превосходят стандарты, которым они должны следовать. Они дают вам доступ к возможностям в промежутке времени до публикации стандарта, затем они следуют опубликованному стандарту и обеспечивают обратную совместимость с забавными форматами "webkit ...".

...