31.10.2023

Css для всех браузеров. Кроссбраузерная совместимость: адаптивный веб-дизайн для старых браузеров. Что такое префиксы


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

Для этой цели в CSS языке были придуманны так называемые хаки(читы), которые позволяют применять группу свойств только под один браузер или несколько, например, только Opera или только Chrome/Safari .

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

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

Таблица совместимости хаков Названия и сами хаки Internet Explorer Google Chrome Opera Safari Mozilla Firefox
+ - - - -
- + - - -
- - + - -

_::-moz-svg-foreign-content, :root .class {}

- - - + -

html/**/body .class, x:-moz-any-link, x:default {color: #F00 ;}

- - - - +
- + + + -

@supports (-webkit-appearance:none) { /* тут ваши стили в обычном виде */ }

- + + - -

Самый простой и хорошо действенный вариант, создать отдельный.css файл для всех версий IE , и подключать его на ряду с главным, но особым образом.

Условные комментарии работают только в IE под Windows , для других браузеров они являются обычными комментариями, поэтому их можно безболезненно использовать. Синтаксис такой(в файле.php или.html , куда подключаем файл стилей добавляем такие строчки):

где styles.css - файл, который будет отвечать за стили только для IE .

Единственный известный на данный момент способ написать стили только для Google Chrome , используя при этом JavaScript . При этом не нужно знать JS , достаточно взять пример отсюда и адаптировать его под свои нужды.

Суть состоит в том, что мы проверяем, каким браузером пользуется посетитель сайта и если это Google Chrome , то подключаем для него дополнительный файл стилей, в котором нужные свойства, которые могут перекрываться в основном файле стилей, выделяем !important .

раздел, добавляем такие строчки, внутри тега ):

var isChrome = !!window.chrome && !!window.chrome.webstore; if (isChrome) { var $ = document; var cssId = "myCss"; var head = $.getElementsByTagName("head"); var link = $.createElement("link"); link.id = cssId; link.rel = "stylesheet"; link.type = "text/css"; link.href = "/css/template.css"; //путь к файлу стилей только для Chrome link.media = "all"; head.appendChild(link); }

Единственный известный на данный момент способ написать стили только для Opera , используя при этом JavaScript . При этом не нужно знать JS , достаточно взять пример отсюда и адаптировать его под свои нужды.

Суть состоит в том, что мы проверяем, каким браузером пользуется посетитель сайта и если это Opera , то подключаем для него дополнительный файл стилей, в котором нужные свойства, которые могут перекрываться в основном файле стилей, выделяем !important .

Синтаксис такой(в файле.php или.html , куда подключаем файл стилей,т.е. в раздел, добавляем такие строчки, внутри тега ):

var isOpera = !!window.opera || /opera|opr/i.test(navigator.userAgent); if (isOpera) { var $ = document; var cssId = "myCss"; var head = $.getElementsByTagName("head"); var link = $.createElement("link"); link.id = cssId; link.rel = "stylesheet"; link.type = "text/css"; link.href = "/css/template.css"; //путь к файлу стилей только для Opera link.media = "all"; head.appendChild(link); }

Единственное что вам тут нужно поменять это в 10 строчке путь до вашего файла стилей.

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

Порой бывают моменты, когда в различных браузерах мы видим разную картинку при отображении нашего сайта. К примеру, делаем меню. В FF все ровно и красиво, в IE пункты меню смещаются на пару пикселей вниз. Правим стили. В IE становится нормально, уползает во всех остальных браузерах.

Чаще всего подобное можно наблюдать при тестировании сайта в IE. Поэтому именно его больше всего «любят» верстальщики и веб-программисты: просматривая свой сайт через этот браузер, можно наблюдать разные варианты в различных версиях. Причем, сейчас мало кто делает у себя поддержку для IE ниже 7 версии, да и от семерки постепенно отказываются благодаря уменьшению числа пользователей этого чуда.

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

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

Давайте рассмотрим хаки для различных браузеров:

CSS хак для Internet Explorer 8 @media \0screen { div {color: #333;} }

Вместо div {color: #333;} нужно вставлять свой собственный стиль, который призван решить проблему и устранить возникший косяк.

CSS хак для Internet Explorer 9 и 10 :root div { color: #333\9; }

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

CSS хак для Internet Explorer 10 @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { div {color: #333;} } CSS хаки для Opera @media all and (-webkit-min-device-pixel-ratio:10000), not all and (-webkit-min-device-pixel-ratio:0) {div {color: #333;}} *|html div {color: #333;} CSS хаки для Mozilla FireFox @-moz-document url-prefix() {div {color: #333;}} *>div {color: #333;} CSS хак для Safari html*div {color: #333;} html:root div {color: #333;} CSS хак для Google Chrome body:nth-of-type(1) div {color: #333;}

Это лишь некоторые варианты из всех возможных. В дальнейшем список будет обновляться и пополняться, ведь браузеры постоянно обновляются и старые приемы со временем перестают работать. Приходится изобретать что-то новое.

А вообще, я советую избегать применения CSS хаков, если такое возможно. Ведь зачастую проблемы верстки возникают из-за неуместного применения стилей, а не из-за «корявого» браузера. К тому же хаки могут вызвать проблемы при валидации кода. В одной из следующих статей я расскажу, как можно обойтись без CSS хаков и в то же время сверстать полностью кроссбраузерный сайт!

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

Что такое префиксы?

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

Например, при рассмотрении стилей какого-нибудь сайта веб-разработчик может столкнуться со свойствами, содержащими впереди некоторые непонятные слова: -webkit- , -moz- , -ms- и др.

* { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }

Что же это такое? На самом деле всё просто, эти непонятные слова являются префиксами следующих браузеров:

  • -webkit- : браузеры Chrome, Safari, Opera;
  • -moz- : браузер Mozilla Firefox;
  • -ms- : браузер Internet Explorer.

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

Причины появления префиксов?

Причин для появления префиксов было достаточно много:

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

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

Как использовать префиксы?

Рассмотрим в качестве примере следующий код:

* { -webkit-box-sizing: border-box; -moz-box-sizing: border-box; box-sizing: border-box; }

Данный код применяет свойства CSS, которые изменяют алгоритм расчёта ширины и высоты для всех элементов веб-страницы. Первое CSS свойство -webkit-box-sizing со значением border-box предназначено для браузеров, использующих движок webkit (Safari) или blink (Chrome, Opera, Яндекс.Браузер). Второе CSS свойство -moz-box-sizing со значением border-box предназначено для браузеров, использующих движок Gecko (Mozilla Firefox). Последнее CSS свойство предназначено для браузеров, в которых это свойство уже протестировано и внедрено в соответствии со стандартом.

При использовании префиксов для свойств CSS, необходимо помнить, что их следует располагать до свойства CSS без префикса. Почему это так важно? Это важно потому, что если когда-то в браузере будет реализовано оригинальное свойство (без префикса), то будет использоваться именно оно (т.к. оно располагается последним), а не его экспериментальная версия.

Например: применение свойства CSS ко всем элементам веб-страницы в браузере Google Chrome версии 40.

На рисунке выше видно, что оригинальное свойство box-sizing уже внедрено в этот браузер, и из-за того, что оно располагается последним, браузер использует именного его, а не вышеприведенное свойство -webkit-box-sizing .

Как проверить поддержку определенного свойства в браузере?

Сайт, на котором можно проверить реализовано ли данное свойство или нет в конкретном браузере можно по ссылке приведённой ниже. Кроме этого на сайте показывается количество пользователей в процентах, которые пользуется этой версией браузера.

Сайт "Can I Use..."

Например: проверим, как реализовано свойство transform в браузерах.

На сайте "CanIUse" браузеры отмечаются различными цветами, в зависимости от того в каком состоянии находится поддержка определённых свойств или тегов:

  • Красный прямоугольник - браузер, в котором данное свойство не реализовано;
  • Зелёный прямоугольник с дефисом, расположенным в правом верхнем углу – браузер, в котором данное свойство используется через префикс;
  • Светло-зелёный прямоугольник – браузер, в котором данное свойство реализовано частично;
  • Зелёный прямоугольник – браузер, в котором данное свойство реализовано в соответствии со стандартом.

Published: 07.06.2011

Опишу еще раз всем известные и 100500 раз описанные раньше хаки для разных браузеров.

Приведу определение хака с сайта Влада Мержевича htmlbook.ru : «Хаком называется набор приемов, направленных на то, чтобы для одного браузера задать стиль определенного элемента, который бы отличался от стиля для других браузеров.»

Прежде всего меня интересовали актуальные работающие решения, поэтому все примеры я проверял в самых последних, кроме IE, версиях браузеров (Opera 11, Firefox 4, Chrome 13, Safari 5, IE 8).

Internet Explorer

Самый «непохожий» на другие браузер. Причём, каждая версия «непохожа» по-своему. Впрочем, примем действительность, как она есть. А действтиельность такова, что хаков для разных версий IE при вёрстке необходимо достаточное количество, чтобы поместить их в отдельный файл и загружать только для этого семейства браузеров. Для этого в секции HTML-документа напишем комментарий, который умеет распознавать Internet Explorer.



В качестве условия можно использовать следующие ключевые слова:

  • IE - любая версия браузера Internet Explorer;
  • IE 7 - Internet Explorer 7;
  • IE 8 - Internet Explorer 8;
  • IE 9 - Internet Explorer 9;
  • lt - номер версии браузера меньше указанной;
  • gt - номер версии больше указанной;
  • lte - номер версии меньше или равен указанной;
  • gte - номер версии браузера больше или равен указанной.

Пожалуй, отдельно отмечу ещё хак для IE 7: звёздочка перед именем селектора. Например:

#example {
color : green ;
* color : red ;
}

Chrome и Safari

Хак для браузеров на основе движка webkit — Chrome и Safari:

@media screen and (-webkit-min-device-pixel-ratio:0) {
#example {
color : red ;
}

}

Firefox

@-moz-document url-prefix() {
#example {
color : red ;
}

}

Opera

Для Оперы универсальных хаков нет! Да, конечно, в сети можно найти хаки для Оперы, но, увы, эта инфорация немного устарела. Был когда-то хак, да весь вышел:

@media all and (min-width:0px) {


}

Хм, если для всех браузеров хаки есть, а для Оперы — нет, напрашивается логический вывод: сначала надо верстать под Оперу, а затем шлифовать вёрстку для других браузеров. Как вы на это смотрите?

UPD 09.08.11: Последние сводки с фронтов: на Хабре нашёлся хак для Оперы. Вот такой:

@media all and (-webkit-min-device-pixel-ratio:10000),
not all and ( -webkit-min-device-pixel-ratio : 0 ) {
#example { color : red ; }
}

Однако же, крайне не рекомендую его использовать. Приведу в качестве аргумента комментарий Вадима Макеева (aka Pepelsbey): "Эти хаки основаны на неполной или ошибочной поддержке Media Queries и могут сломаться с любым минорным обновлением браузера, которое исправит или дополнит поддержку. Не стреляйте себе в ногу, не используйте потенциально опасные хаки" . Что, собственно, и произошло с первым хаком для Оперы, упомянутом в этой статье.

Исходя из этого, по-прежнему считаем, что самый лучший хак для браузера Opera - грамотная, валидная вёрстка.


© 2024
zane-host.ru - Программы. Компьютеры. Сетевое оборудование. Оргтехника