CSS хак - CSS hack

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

Виды взломов

Неверный или несовместимый CSS

Из-за причуд в интерпретации CSS различными браузерами большинство хаков CSS связано с написанием недопустимых правил CSS, которые интерпретируются только определенными браузерами, или с учетом ошибок в определенных браузерах. Примером этого является добавление к правилам префикса подчеркивания (как в _ширина), чтобы настроить таргетинг на Internet Explorer 6 - другие браузеры будут игнорировать эту строку, позволяя использовать ее для написания кода, специфичного для одного браузера.

Условные комментарии

До версии 10 Internet Explorer поддерживает специальный синтаксис комментариев, который позволяет читать блоки HTML только определенными версиями браузера. Эти комментарии в основном используются для предоставления конкретных обходных путей CSS и JavaScript для старых версий браузера. Никакие другие браузеры не интерпретировали эти комментарии и не предлагали аналогичные функции.

Ниже приведены примеры различного синтаксиса этих комментариев.

<голова>  <заглавие>Тест</заглавие>  <связь href="all_browsers.css" rel="таблица стилей" тип="текст / CSS">  <!--[if IE]> <link href="ie_only.css" rel="stylesheet" type="text/css"> <![endif]-->  <!--[if lt IE 7]> <link href="ie_6_and_below.css" rel="stylesheet" type="text/css"> <![endif]-->  <!--[if !lt IE 7]> <![IGNORE[--><![IGNORE[]]> <связь href="Recent.css" rel="таблица стилей" тип="текст / CSS"> <!--<![endif]-->  <!--[if !IE]--> <связь href="not_ie.css" rel="таблица стилей" тип="текст / CSS"> <!--<![endif]--></голова>

Критики

Скрытие кода с помощью хаков часто приводит к некорректному отображению страниц при обновлении браузеров. Эти взломы могут привести к неожиданному поведению в новых браузерах, которое может интерпретировать их иначе, чем их предшественники. С тех пор, как Internet Explorer 6 и 7 вышли из употребления, сократились и хаки CSS. Современные методы нацеливания на функции менее уязвимы и подвержены ошибкам.

Альтернативы

Префиксы браузера

У каждого из самых популярных движков рендеринга браузера есть собственный префикс поставщика для экспериментальных свойств. Однако из-за увеличения числа этих свойств в реальном коде разработчики браузеров начали отходить от этого в пользу флага функции.[1]

Список префиксов

Ниже приводится список префиксов из различных механизмов компоновки:

Префикс поставщикаВ использованииLayout EngineСделаноИспользован
-а-даФорматировщикАнтенный ДомФорматтер антенного дома
-яблоко-даWebKitApple Inc.Apple Safari 2.0, Виджеты Opera, Браузеры на основе WebKit (как устаревший префикс)
-atsc-Стандарты Комитета передовых телевизионных систем
-epub-даWebKitРабочая группа EPUBХром / Гугл Хром, Браузеры на основе WebKit
-fx-даSun Microsystems (теперь приобретено Корпорация Oracle )JavaFX Приложения
-hp-Hewlett Packard (сейчас же HP Inc. и Hewlett Packard Enterprise )
-khtml-Да / даKHTML / WebKitKDEKDE Konqueror / Apple Safari 1.1 - Safari 2.0, браузеры на основе WebKit (как устаревший префикс)
-моз-даГекконФонд MozillaБраузеры на основе Gecko [?], Mozilla Firefox
-РС-даТрезубец / MSHTMLКорпорация МайкрософтMicrosoft Internet Explorer
мсо-ОфисКорпорация МайкрософтMicrosoft Office[?]
-о-даПрестоПрограммное обеспечение OperaБраузер Opera для настольных ПК до версии 12.16, опера мини, и Opera Mobile до версии 12.1, Nintendo DS & Nintendo DSi Браузер, Интернет-канал Nintendo Wii
князьдаПринцДаЛогикаYesLogic Prince
-rim-WebKitBlackBerry LimitedБраузер RIM Blackberry
-ро-даМАРТАРеальные объектыРеальные объекты PDFreactor
-tc-Высокие компонентыВысокие компоненты
-wap-даПрестоФорум WAPБраузер Opera для настольных ПК и Opera Mobile, WAP-форум
-webkit-даWebKit / BlinkApple Inc. (WebKit) / Google Inc. (Blink)Apple Safari и Safari для iOS (WebKit), Chromium / Google Chrome для ПК и мобильных устройств (Blink), Opera для ПК и мобильных устройств начиная с версии 14 (Blink), браузер Android (Blink), Nokia Браузер MeeGo 8.5, Nokia Symbian Браузер 7.0 и новее (WebKit), Blackberry Browser 6.0 и новее (WebKit).
-xv-НетПрестоПрограммное обеспечение OperaБраузер Opera Desktop для Windows 2000 / XP

Пример

/ * Кроссбраузерный css3 linear-gradient * /.линейный градиент {  / * Браузер Gecko (Firefox) * /  фоновая картинка: -моз-линейный градиент(верх, # D7D 0%, #068 100%);  / * Опера * /  фоновая картинка: -о-линейный градиент(верх, # D7D 0%, #068 100%);  / * старый синтаксис Webkit * /  фоновая картинка: -webkit-градиент(линейный, оставили верх, оставили Нижний,    цвет-остановка(0, # D7D), цвет-остановка(1, #068));  / * Webkit (Safari, Chrome, iOS, Android) * /  фоновая картинка: -webkit-линейный градиент(верх, # D7D 0%, #068 100%);  / * W3C * /  фоновая картинка: линейный градиент(к Нижний, # D7D 0%, #068 100%);}

Ограничение.

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

Удаление функции.

Обнаружение функции JavaScript

Существует несколько библиотек JavaScript, которые определяют, какие функции доступны в конкретном браузере, чтобы правила CSS могли быть написаны для них. Такие библиотеки, как Modernizr, добавляют классы в html элемент, позволяющий использовать правила CSS, такие как .cssградиенты .заголовок.

В CSS3 была введена новая функция, известная как запросы функций, позволяющая обнаруживать определенные функции в CSS (без необходимости использования библиотеки JavaScript для обнаружение функции ). Эту новую директиву можно использовать для проверки поддержки или отсутствия поддержки определенной функции, а проверки можно комбинировать с и, или же, и нет. Очевидно, @поддерживает правила будут работать только в браузерах, поддерживающих @поддерживает.

заголовок {    отображать: блокировать;}@поддерживает (отображать: Flexbox) {    заголовок {        отображать: Flexbox;    }}

Полифиллы скрипта

Хотя обнаружение функций JavaScript и @поддерживает правила могут помочь настроить таргетинг на браузеры, которым требуется резервная функция, они не будут устранять ошибки в определенных браузерах или включать эти расширенные функции. Полифиллы, сценарии, обеспечивающие единообразие поведения во всех браузерах, можно использовать для добавления поддержки новых правил CSS (например, медиа-запросы в IE 8), а также исправлять ошибки в определенных браузерах. Поскольку полифиллы добавляют или исправляют функциональные возможности в браузерах, в которых их нет, они служат другой цели, чем запросы функций, но могут использоваться в сочетании с ними.

Рекомендации

  1. ^ «Префикс поставщика». Сеть разработчиков Mozilla. Получено 12 октября 2016.

внешняя ссылка

  • Странность браузера - Хаки и тесты Live CSS Джеффа Клейтона для фильтрации основных браузеров, включая единственные известные CSS-хаки для Safari 7 и 8
  • browserhacks.com - Множественные методы фильтрации браузера и тесты (Хьюго Жираудель, Джошуа Хибберт, Тим Пьетруски, Фабрис Вайнберг, Джефф Клейтон)
  • Префиксные фильтры Safari / Webkit (webkit) фильтры исправления]
  • Префиксные фильтры Mozilla (moz)
  • Префиксные фильтры Opera (wap) - На этой странице есть все селекторы CSS Opera.
  • CSS фильтры - Достаточно полная таблица CSS-хаков, которые показывают и скрывают правила для определенных браузеров.
  • Фильтры и кроссовер - CSS фильтры. Ошибки синтаксического анализа отмечены красным.
  • - Селектор браузера CSS - Позволяет объединить специфичный для браузера CSS в единую таблицу стилей (с использованием JavaScript).
  • - #IEroot - Ориентация на IE с помощью единой таблицы стилей, содержащей весь CSS (без использования JavaScript, но с использованием условных комментариев для присвоения специфичного для браузера тега произвольному корню содержимого [div])