Spec-Zone.ru › Modernizr

Modernizr

Что такое Modernizr?

Modernizr — небольшой фрагмент JavaScript-кода, который автоматически определяет наличие веб-технологий нового поколения в браузере пользователя. Вместо того, чтобы создавать чёрный список целых групп браузеров на основе «sniffing UA», Modernizr использует обнаружение функций, что позволяет легко адаптировать пользовательский опыт к фактическим возможностям браузера.

Зная возможности браузера, которые даёт Modernizr, вы можете использовать новые функции в браузерах, которые их поддерживают, и надёжно управлять ситуацией в браузерах, которые их не поддерживают.

Что такое обнаружение функций?

В тёмные времена разработки веб-приложений нам часто приходилось прибегать к UA sniffing, чтобы определить, сможет ли пользователь использовать Awesome-New-Feature™. На практике это выглядело примерно так:

if (browser === "the-one-they-make-you-use-at-work") {
  getTheOldLameExperience();
} else {
  showOffAwesomeNewFeature();
}

Теперь это выглядит хорошо, да? Мы используем Awesome-New-Feature™, и, конечно, она не поддерживается в старых, устаревших браузерах, верно? Возможно, это так — сегодня. Но что, если следующая версия браузера добавит поддержку Awesome-New-Feature™? Теперь вам придётся возвращаться и проверять свой код, обновляя каждый случай проверки. Это предполагает, что у вас есть время для отслеживания всех обновлений функций для каждого браузера. Хуже того, пока вы не поймёте, что это действительно работает в новейшей версии, все те пользователи на работе getTheOldLameExperience, без всякой причины.

Эти пользователи — которым для непонятной причины предоставляется некачественный веб-сайт — могут фактически зайти в настройки своего браузера и ОС и изменить название браузера (или user-agent — то, с чем сравнивается код при выполнении UA sniffing) на что угодно. В этот момент ваш код становится бессмысленным. Вы блокируете пользователей, которые могут поддерживать все ваши функции, и, возможно, пропускаете тех, кто их не поддерживает. Практически все получают плохой опыт. Должен быть лучший способ!

И он есть, и он называется Feature Detection, и выглядит примерно так:

if (Modernizr.awesomeNewFeature) {
  showOffAwesomeNewFeature();
} else {
  getTheOldLameExperience();
}

Вместо того, чтобы принимать решения на основе того, находится ли пользователь в one-they-make-you-use-at-work браузере и предполагать, что это значит, что у него есть или нет доступ к Awesome-New-Feature™, обнаружение функций фактически программно проверяет, работает ли Awesome-New-Feature™ в браузере, и возвращает результат true или false. Теперь, как только ваш самый ненавистный браузер добавит поддержку Awesome-New-Feature™, ваш код будет работать там — автоматически! Больше не нужно обновлять код — никогда. Код получается похожим, но намного более понятным по своему истинному назначению.

Загрузка Modernizr

С момента последней версии Modernizr многое изменилось. Больше нет единого базового modernizr.js файла. Вместо этого просто перейдите на страницу Загрузки, как и раньше, и выберите функции, которые хотите использовать в своём проекте. Таким образом, мы можем предоставить наименьший возможный файл, что означает более быстрый сайт для вас. После этого нажмите кнопку Build , и у вас будет собственная настройка Modernizr, готовая к использованию!

Вы можете заметить, что помимо вывода Build, где вы уже много лет можете загружать настраиваемые сборки по отдельности — появились два новых варианта.

Настройка командной строки

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

После установки npm вы можете установить инструмент командной строки Modernizr, выполнив

npm install -g modernizr

Теперь вы готовы начать создание своей настраиваемой сборки! Вы можете скачать файл конфигурации из меню сборки (в разделе «Настройка командной строки»). Это даст вам файл в формате JSON, который вы передадите модулю Modernizr для создания вашей настраиваемой сборки.

modernizr -c modernizr-config.json

Обратите внимание, что необходимо указать пути к файлам конфигурации командной строки. В приведенном выше примере мы запускаем команду modernizr из той же папки, в которую загрузили файл modernizr-config.json.

Настройка Grunt

Если вы не хотите вручную запускать сборку из командной строки каждый раз при обновлении сайта, у вас также есть возможность загрузить задачу Grunt, которая сделает это за вас. Этот файл конфигурации можно использовать с grunt-modernizr для автоматической сборки вашей настраиваемой версии. Просто добавьте его в свой файл Gruntfile, и вы готовы к работе.

Обратите внимание, что вам нужно будет обновить предоставленный файл конфигурации, указав пути к devFile и outputFile. Более подробную документацию по grunt-modernizr вы найдёте здесь.

Параметры конфигурации

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

classPrefix — по умолчанию: ""

Строка, добавляемая перед каждым классом CSS.

enableJSClass — по умолчанию: true

Включить или выключить обновление .no-js на элемент корня до .js.

enableClasses — по умолчанию: true

Включить или выключить добавление Modernizr своих классов CSS.

См. следующий раздел для получения дополнительной информации об этих параметрах.

Использование Modernizr с CSS

Классы Modernizr

По умолчанию Modernizr задаёт классы для всех тестов в корневом элементе (<html> для веб-сайтов). Это означает добавление класса для каждой поддерживаемой функции и добавление его с префиксом no- при отсутствии поддержки (например, .feature или .no-feature). Это существенно упрощает добавление функций с помощью поэтапного улучшения!

Предположим, что вы включили обнаружение Modernizr для градиентов CSS. В зависимости от браузера это приведёт к появлению класса <html class="cssgradients"> или <html class="no-cssgradients">. Теперь, зная эти два состояния, вы можете написать CSS для обоих случаев.

.no-cssgradients .header {
  background: url("images/glossybutton.png");
}

.cssgradients .header {
  background-image: linear-gradient(cornflowerblue, rebeccapurple);
}

classPrefix

Если имя одного из классов Modernizr совпадает с именем одного из ваших существующих классов, вы можете добавить classPrefix в свою конфигурацию. Рассмотрим обнаружение hidden, которое добавляет класс .hidden, который во многих кодовых базах уже используется для, ну, скрытия вещей. Если вы хотите использовать это конкретное обнаружение, вы можете использовать следующую конфигурацию:

{
  "classPrefix": "foo-",
  "feature-detects": ["dom/hidden"]
}

Это означает, что вместо <html class="hidden"> вы получите <html class="foo-hidden">.

no-js

По умолчанию Modernizr переименует <html class="no-js"> в <html class="js">. Это позволяет скрывать определённые элементы, которые должны отображаться только в средах с работающим JavaScript. Если вы хотите отключить это изменение, установите enableJSClass на false в вашей конфигурации.

enableClasses

Если вы используете префикс, например, classPrefix, такой как supports-, вам нужно включить этот префикс в вашем html элементе. Т.е. supports-no-js вместо no-js.

И, наконец, если вы не хотите, чтобы Modernizr добавлял свои классы, вы можете установить enableClasses на false. Это не влияет на обновление .no-js, поэтому если вы не хотите обновлять и это, вам нужно установить enableJSClass на false в вашей конфигурации.

Использование Modernizr с JavaScript

Объект Modernizr

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

if (Modernizr.awesomeNewFeature) {
  showOffAwesomeNewFeature();
} else {
  getTheOldLameExperience();
}

Вспомогательные методы

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

API Modernizr

Modernizr.on

Modernizr.on(feature,cb)

Modernizr.on('flash', function( result ) {
  if (result) {
   // the browser has flash
  } else {
    // the browser does not have flash
  }
});

Modernizr.addTest

Modernizr.addTest(feature,test)

Наиболее распространённый способ создания собственных проверок функций — это вызов Modernizr.addTest со строкой (предпочтительно в нижнем регистре без знаков препинания) и функцией, которую вы хотите выполнить, которая вернёт логическое значение.

Modernizr.addTest('itsTuesday', function() {
 var d = new Date();
 return d.getDay() === 2;
});

При выполнении вышеуказанного кода Modernizr.itstuesday будет установлено на true при вторнике, и на false в любой другой день недели. Обратите внимание, что имена функций обнаружения функций всегда записываются в нижнем регистре при добавлении в объект Modernizr. Это означает, что Modernizr.itsTuesday не существует, но Modernizr.itstuesday существует. Так как мы рассматриваем только возвращаемое значение любой функции обнаружения функций, вам не нужно фактически использовать функцию. Для простых проверок достаточно просто передать выражение, которое возвращает логическое значение.

Modernizr.addTest('hasJquery', 'jQuery' in window);

Так же, как и раньше, при выполнении вышеуказанного кода Modernizr.hasjquery будет true, если jQuery включен на странице. Не использование функции немного снижает нагрузку на браузер, а также делает код гораздо более читаемым. Наконец, у вас также есть возможность передать объект имён функций и их проверок. Это удобно, если вы хотите добавить несколько проверок за один раз. Ключи должны всегда быть строками, а значения могут быть либо булевыми, либо функциями, возвращающими булевые значения.

var detects = {
 'hasjquery': 'jQuery' in window,
 'itstuesday': function() {
   var d = new Date();
   return d.getDay() === 2;
 }
}
Modernizr.addTest(detects);

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

Modernizr.atRule

Modernizr.atRule(prop)

var keyframes = Modernizr.atRule('@keyframes');
if (keyframes) {
  // keyframes are supported
  // could be `@-webkit-keyframes` or `@keyframes`
} else {
  // keyframes === `false`
}

Modernizr._domPrefixes

Modernizr._domPrefixes — это то же самое, что и _prefixes, но вместо свойств с кебаб-кейс, все свойства — с заглавной буквы.

Modernizr._domPrefixes === [ "Moz", "O", "ms", "Webkit" ];

Modernizr.hasEvent

Modernizr.hasEvent(eventName,[element])

Modernizr.hasEvent позволяет определить, поддерживает ли браузер предоставленное событие. По умолчанию эта проверка выполняется на элементе div.

hasEvent('blur') // true;

Однако, вы можете передать объект в качестве второго аргумента функции hasEvent, чтобы проверить событие на элементе, отличном от div.

hasEvent('devicelight', window) // true;

Modernizr.mq

Modernizr.mq(mq)

Modernizr.mq позволяет программно проверить, соответствует ли текущее состояние окна браузера заданному медиа-запросу.

var query = Modernizr.mq('(min-width: 900px)');
if (query) {
  // the browser window is larger than 900px
}

Поддерживаются только корректные медиа-запросы, поэтому вы всегда должны включать значения со своим медиа-запросом

// good
 Modernizr.mq('(min-width: 900px)');
// bad
 Modernizr.mq('min-width');

Если вы хотите просто проверить, поддерживаются ли медиа-запросы в целом, используйте

Modernizr.mq('only all'); // true if MQ are supported, false if not

Обратите внимание, что если браузер не поддерживает медиа-запросы (например, старые версии IE), mq всегда будет возвращать false.

Modernizr.prefixed

Modernizr.prefixed(prop,[obj],[elem])

Modernizr.prefixed принимает строковое значение CSS в формате camelCase стиля DOM (в отличие от kebab-case стиля CSS) и возвращает (возможно, префиксную) версию этого свойства, которое фактически поддерживается браузером. Например, в старых версиях Firefox...

prefixed('boxSizing')

возвращает 'MozBoxSizing'. В новых версиях Firefox, а также в любом другом браузере, поддерживающем не-префиксную версию, будет возвращать boxSizing. Любой браузер, который вообще не поддерживает свойство, вернёт false. По умолчанию prefixed проверяется по отношению к элементу DOM. Если вы хотите проверить свойство на другом объекте, просто передайте его в качестве второго аргумента

var rAF = prefixed('requestAnimationFrame', window);
raf(function() {
 renderFunction();
})

Обратите внимание, что это вернёт собственно функцию - не имя функции. Если вам нужно фактическое имя свойства, передайте false в качестве третьего аргумента

var rAFProp = prefixed('requestAnimationFrame', window, false);
rafProp === 'WebkitRequestAnimationFrame' // in older webkit

Один из распространённых случаев использования prefixed - это определение события окончания перехода, к которому нужно привязаться. Вы можете сделать что-то вроде...

var transEndEventNames = {
    'WebkitTransition' : 'webkitTransitionEnd', * Saf 6, Android Browser
    'MozTransition'    : 'transitionend',       * only for FF < 15
    'transition'       : 'transitionend'        * IE10, Opera, Chrome, FF 15+, Saf 7+
};
var transEndEventName = transEndEventNames[ Modernizr.prefixed('transition') ];

Если вам нужен аналогичный поиск, но в формате kebab-case, вы можете использовать prefixedCSS.

Modernizr.prefixedCSS

Modernizr.prefixedCSS(prop)

Modernizr.prefixedCSS подобно Modernizr.prefixed, но возвращает результат в формате с дефисами

Modernizr.prefixedCSS('transition') // '-moz-transition' in old Firefox

Поскольку он полезен только для свойств стиля CSS, он может быть протестирован только по отношению к HTMLElement. Свойства могут быть переданы как в формате camelCase стиля DOM, так и в формате kebab-case стиля CSS.

Modernizr.prefixedCSSValue

Modernizr.prefixedCSSValue(prop,value)

Modernizr.prefixedCSSValue — это способ проверки префиксных свойств CSS (например, display: -webkit-flex)

Modernizr.prefixedCSSValue('background', 'linear-gradient(left, red, red)')

Modernizr._prefixes

Modernizr._prefixes — это внутренний список префиксов, которые мы используем для проверки в таких функциях, как prefixed и prefixedCSS. Это просто массив префиксов поставщиков в формате kebab-case, которые вы можете использовать в своём коде. Некоторые распространённые примеры включают:

var rule = Modernizr._prefixes.join('transform: rotate(20deg); ');
rule === 'transform: rotate(20deg); webkit-transform: rotate(20deg); moz-transform: rotate(20deg); o-transform: rotate(20deg); ms-transform: rotate(20deg);'

Генерация всех возможных префиксных версий свойства CSS

rule = 'display:' +  Modernizr._prefixes.join('flex; display:') + 'flex';
rule === 'display:flex; display:-webkit-flex; display:-moz-flex; display:-o-flex; display:-ms-flex; display:flex'

Modernizr.testAllProps

Modernizr.testAllProps(prop,[value],[skipValueTest])

testAllProps определяет, поддерживается ли заданное свойство CSS в какой-либо префиксной форме браузером.

testAllProps('boxSizing')  // true

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

testAllProps('display', 'block') // true
testAllProps('display', 'penguin') // false

В качестве третьего параметра можно передать булевое значение, чтобы пропустить проверку значения, когда детекция native (@supports) недоступна.

testAllProps('shapeOutside', 'content-box', true);

Modernizr.testProp

Modernizr.testProp(prop,[value],[useValue])

Подобно testAllProps, только он не проверяет какие-либо префиксные версии строки. Обратите внимание, что имя свойства должно быть предоставлено в формате camelCase (например, boxSizing, а не box-sizing).

Modernizr.testProp('pointerEvents')  // true

Вы также можете предоставить значение в качестве необязательного второго аргумента, чтобы проверить, поддерживается ли определённое значение.

Modernizr.testProp('pointerEvents', 'none') // true
Modernizr.testProp('pointerEvents', 'penguin') // false

Modernizr.testStyles

Modernizr.testStyles(rule,callback,[nodes],[testnames])

Modernizr.testStyles принимает правило CSS и вставляет его на текущую страницу вместе с (возможно, несколькими) элементами DOM. Это позволяет проверять функции, которые нельзя обнаружить, просто проверив IDL.

Modernizr.testStyles('#modernizr { width: 9px; color: papayawhip; }', function(elem, rule) {
  // elem is the first DOM node in the page (by default #modernizr)
  // rule is the first argument you supplied - the CSS rule in string form
  addTest('widthworks', elem.style.width === '9px')
});

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

Modernizr.testStyles('#modernizr {width: 1px}; #modernizr2 {width: 2px}', function(elem) {
  document.getElementById('modernizr').style.width === '1px'; // true
  document.getElementById('modernizr2').style.width === '2px'; // true
  elem.firstChild === document.getElementById('modernizr2'); // true
}, 1);

По умолчанию все дополнительные элементы имеют идентификатор modernizr[n], где n — это их индекс (например, первый дополнительный, второй в целом — #modernizr2, второй дополнительный — #modernizr3, и т. д.). Если вы хотите использовать более осмысленные идентификаторы для своей функции, вы можете указать их в четвёртом аргументе в виде массива строк

Modernizr.testStyles('#foo {width: 10px}; #bar {height: 20px}', function(elem) {
  elem.firstChild === document.getElementById('foo'); // true
  elem.lastChild === document.getElementById('bar'); // true
}, 2, ['foo', 'bar']);

Обнаруженные Modernizr функциями

Обнаружение CSS класс/JS свойство
События окружающего света ambientlight

Обнаруживает поддержку API, предоставляющего информацию об уровне окружающего света, определяемого датчиком света устройства, в единицах люкс.

Кэш приложения applicationcache

Обнаруживает поддержку кэша приложения для хранения данных, что позволяет веб-приложениям работать в автономном режиме.

API подверглось серьезной критике, и ведутся обсуждения по этому вопросу.

Элемент HTML5 Audio audio

Обнаруживает элемент аудио.

API батареи batteryapi

Обнаруживает поддержку API батареи для доступа к информации об уровне заряда батареи системы.

Конструктор Blob blobconstructor

Обнаруживает поддержку конструктора Blob для создания похожих на файлы объектов неизменяемых, необработанных данных.

Canvas canvas

Обнаруживает поддержку элемента <canvas> для 2D отрисовки.

Текст Canvas canvastext

Обнаруживает поддержку API текста для элементов <canvas>.

Редактирование содержимого contenteditable

Обнаруживает поддержку атрибута contenteditable элементов, позволяющего пользователю напрямую редактировать текстовое содержимое DOM.

Контекстные меню contextmenu

Обнаруживает поддержку пользовательских контекстных меню.

Куки cookies

Обнаруживает, включена ли поддержка куки.

Cross-Origin Resource Sharing cors

Обнаруживает поддержку Cross-Origin Resource Sharing: метод выполнения XMLHttpRequests между доменами.

Веб-криптография cryptography

Обнаруживает поддержку криптографических функций, доступных в window.crypto.subtle

API пользовательских элементов customelements

Обнаруживает поддержку API пользовательских элементов для создания пользовательских html элементов через js

Обработчик пользовательского протокола customprotocolhandler

Обнаруживает поддержку API window.registerProtocolHandler() для регистрации сайтов в качестве возможных обработчиков определенных протоколов.

CustomEvent customevent

Обнаруживает поддержку CustomEvent.

Dart dart

Обнаруживает родную поддержку языка программирования Dart.

DataView dataview

Обнаруживает поддержку интерфейса DataView для чтения данных из ArrayBuffer в рамках спецификации Typed Array.

Эмодзи emoji

Обнаруживает поддержку наборов символов эмодзи.

Обработчик событий eventlistener

Обнаруживает родную поддержку addEventListener

Ориентация EXIF exiforientation

Обнаруживает поддержку ориентации EXIF в изображениях JPEG.

iOS обращает внимание на флаг ориентации EXIF в JPEG и соответственно вращает изображение. Большинство настольных браузеров просто игнорируют эти данные.

Flash flash

Обнаруживает поддержку Flash, а также плагины для блокировки Flash

События Force Touch forcetouch

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

События Force Touch доступны в OS X 10.11 и более поздних версиях на устройствах с сенсорными панелями Force Touch.

API полноэкранного режима fullscreen

Обнаруживает поддержку возможности занять весь экран пользователя текущим веб-сайтом.

API GamePad gamepads

Обнаруживает поддержку API Gamepad для доступа к геймпадам и контроллерам.

API геолокации geolocation

Обнаруживает поддержку API геолокации, позволяющего пользователям предоставлять свои местоположения веб-приложениям.

Событие hashchange hashchange

Обнаруживает поддержку события hashchange, которое срабатывает при изменении текущего фрагмента расположения.

Скрытая полоса прокрутки hiddenscroll

Обнаруживает наложение полос прокрутки (когда полосы прокрутки переполненных блоков видны). Это чаще всего встречается на мобильных устройствах и в OS X.

API истории history

Обнаруживает поддержку API истории для управления историей сеансов браузера.

HTML импорты htmlimports

Обнаруживает поддержку HTML импорта, функции, используемой для загрузки веб-компонентов.

Совместимость IE8 ie8compat

Обнаруживает, является ли текущий браузер IE8 в режиме совместимости (т.е. ведет себя как IE7).

IndexedDB indexeddb

Обнаруживает поддержку API хранилища IndexedDB на стороне клиента (окончательная спецификация).

IndexedDB Blob indexeddbblob

Обнаруживает, может ли браузер сохранять объекты File/Blob в IndexedDB

Атрибуты input input

Обнаруживает поддержку атрибутов HTML5 элемента <input> и раскрывает булевы подсвойства с результатами:

Modernizr.input.autocomplete
Modernizr.input.autofocus
Modernizr.input.list
Modernizr.input.max
Modernizr.input.min
Modernizr.input.multiple
Modernizr.input.pattern
Modernizr.input.placeholder
Modernizr.input.required
Modernizr.input.step
input[search] событие search search

В браузерах webkit реализовано пользовательское событие search, когда используется элемент input[search].

Типы ввода формы inputtypes

Обнаруживает поддержку типов ввода HTML5 форм и раскрывает булевы подсвойства с результатами:

Modernizr.inputtypes.color
Modernizr.inputtypes.date
Modernizr.inputtypes.datetime
Modernizr.inputtypes['datetime-local']
Modernizr.inputtypes.email
Modernizr.inputtypes.month
Modernizr.inputtypes.number
Modernizr.inputtypes.range
Modernizr.inputtypes.search
Modernizr.inputtypes.tel
Modernizr.inputtypes.time
Modernizr.inputtypes.url
Modernizr.inputtypes.week
API интернационализации intl

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

JSON json

Обнаруживает родную поддержку функций обработки JSON.

Лигатуры шрифтов ligatures

Обнаруживает поддержку открытых типов лигатур.

Обратный порядок списков olreversed

Обнаруживает поддержку атрибута reversed для элемента <ol>.

MathML mathml

Обнаруживает поддержку MathML для математических уравнений на веб-страницах.

Канал сообщений MessageChannel

Обнаруживает поддержку каналов сообщений, способа коммуникации между разными контекстами просмотра, такими как фреймы iframes, worker'ы и т.д..

Уведомления notification

Обнаруживает поддержку API уведомлений.

API видимости страницы pagevisibility

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

API времени навигации performance

Обнаруживает поддержку API времени навигации для измерения производительности браузера и соединения.

API указателей DOM pointerevents

Обнаруживает поддержку API указателей DOM, который предоставляет унифицированный интерфейс событий для устройств ввода указателей, реализованных в IE10+, Edge и Blink.

API блокировки указателя pointerlock

Обнаруживает поддержку API блокировки указателя, позволяющего зафиксировать курсор мыши в окне браузера.

postMessage postmessage

Обнаруживает поддержку протокола window.postMessage для междокументного обмена сообщениями.

API близости proximity

Обнаруживает поддержку API, позволяющего пользователям получать информацию о близости от датчика близости устройства.

QuerySelector queryselector

Обнаруживает поддержку querySelector.

API управления квотой хранения quotamanagement

Обнаруживает возможность запросить определенное количество места для доступа к файловой системе

requestAnimationFrame requestanimationframe

Обнаруживает поддержку API window.requestAnimationFrame, для переноса перерисовки анимации в браузер для оптимизированной производительности.

API ServiceWorker serviceworker

ServiceWorker (ранее Navigation Controllers) — это способ постоянного кеширования ресурсов для создания приложений, которые лучше работают в автономном режиме.

SVG svg

Обнаруживает поддержку SVG в элементах <embed> или <object>.

Строки шаблонов templatestrings

Строки шаблонов — это строковые литералы, допускающие встроенные выражения.

События касания touchevents

Указывает, поддерживает ли браузер API W3C Touch Events.

Это не обязательно отражает наличие сенсорного устройства:

  • Старые сенсорные устройства только эмулируют события мыши
  • Современные устройства IE с сенсорным управлением реализуют API Pointer Events: используйте Modernizr.pointerevents, чтобы проверить поддержку этого
  • В некоторых браузерных и операционных системах могут быть включены API касания, даже при отсутствии сенсорного экрана
  • Будущие браузеры могут реализовать другие модели событий для взаимодействия с касанием

См. эту статью: Вы не можете определить сенсорный экран.

Рекомендуется одновременно привязывать события мыши и касания/указателя — см. этот учебник HTML5 Rocks.

Этот тест также вернёт true для поддержки Firefox 4 Multitouch.

Типовые массивы типовые массивы

Определяет поддержку манипуляций с данными двоичного формата с помощью типовых массивов в JavaScript.

Не проверяет поддержку DataView; используйте Modernizr.dataview для этого.

Диапазон Юникода диапазон Юникода
Символы Юникода символы Юникода

Определяет, поддерживаются ли символы Юникода в текущем документе.

API данных пользователя IE API данных пользователя IE

Определяет поддержку API userData для сохранения данных в IE, API, аналогичное localStorage, но поддерживается с IE5.

API вибрации API вибрации

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

HTML5 Видео HTML5 Видео

Определяет поддержку элемента видео, а также проверяет, какие типы контента он поддерживает.

Подсвойства предоставляются для описания поддержки ogg, h264 и webm форматов, например:

Modernizr.video         // true
Modernizr.video.ogg     // 'probably'
VML VML

Определяет поддержку VML.

Web Intents Web Intents

Определяет нативную поддержку API Web Intents для обнаружения сервисов и межприложного взаимодействия.

Chrome добавил поддержку в v19, но удалил ее снова в v24 из-за «ряда областей для разработки как в API, так и в конкретном пользовательском опыте в Chrome». В настоящее время другие браузеры ее не поддерживают, но доступен JavaScript-шимм.

API веб-анимации API веб-анимации

Определяет поддержку API веб-анимации, позволяющего создавать CSS-анимации с помощью JavaScript.

WebGL WebGL
Поддержка WebSockets Поддержка WebSockets
XDomainRequest XDomainRequest

Определяет поддержку XDomainRequest в IE9 и IE8

Атрибут a[download] Атрибут a[download]

При использовании на <a>, этот атрибут указывает, что браузеру следует загрузить ресурс по ссылке, а не переходить по ней.

Атрибут цикла аудио Атрибут цикла аудио

Определяет, может ли элемент аудио автоматически перезапускаться после завершения воспроизведения.

Предварительная загрузка аудио Предварительная загрузка аудио

Определяет, может ли аудио загружаться в фоновом режиме перед началом воспроизведения в элементе <audio>

API веб-аудио API веб-аудио

Определяет более старый нестандартный API веб-аудио (в отличие от стандартного API AudioContext).

Низкий уровень заряда батареи Низкий уровень заряда батареи

Разрешает разработчикам удалять ресурсоемкие CSS/JS при низком уровне заряда батареи.

Поддержка смешивания слоев canvas Поддержка смешивания слоев canvas

Определяет, доступны ли режимы смешивания в стиле Photoshop в canvas.

Поддержка canvas.toDataURL для типов данных Поддержка canvas.toDataURL для типов jpeg, png, webp
Поддержка canvas winding Поддержка canvas winding

Определяет, поддерживаются ли правила winding, которые управляют направлением обхода пути (по часовой стрелке или против часовой стрелки).

getRandomValues getRandomValues

Определяет поддержку метода window.crypto.getRandomValues для генерации криптографически безопасных случайных чисел.

cssall cssall

Определяет поддержку свойства CSS all, которое является сокращением для сброса всех свойств CSS (кроме direction и unicode-bidi) до их исходных значений.

CSS Анимации CSS Анимации

Определяет, могут ли элементы анимироваться с помощью CSS.

Внешний вид Внешний вид

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

Фильтр заднего фона Фильтр заднего фона

Определяет поддержку CSS-фильтров фона, позволяющих создавать эффекты размытия фона, подобные тем, которые были введены в iOS 7. Поддержка была добавлена в iOS Safari/WebKit в iOS 9.

CSS режим смешивания фона CSS режим смешивания фона

Определяет способность браузера комбинировать фоны с помощью режимов наложения, подобных тем, которые есть в Photoshop или Illustrator.

CSS обрезка текста фона CSS обрезка текста фона

Определяет возможность управления тем, распространяется ли фон элемента за пределы его границы в CSS.

Сокращение позиции фона Сокращение позиции фона

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

Например background-position: right 10px bottom 10px

Позиция фона XY Позиция фона XY

Определяет возможность управления позицией фона элемента с помощью CSS.

Повтор фона Повтор фона (space, round)

Определяет возможность использования round и space в качестве свойств для background-repeat.

Размер фона Размер фона
Размер фона (cover) Размер фона (cover)
Изображение границы Изображение границы
Радиус границы Радиус границы
Тень рамки Тень рамки
Размеры блока Размеры блока
CSS Calc CSS Calc

Метод, позволяющий использовать вычисленные значения для единиц длины. Например:

//lem {
  width: calc(100% - 3em);
}
CSS псевдокласс :checked :checked
CSS единицы измерения ch CSS единицы измерения ch
CSS Столбцы CSS Столбцы
CSS Сетка (старая и новая) CSS Сетка, Legacy CSS Сетка
Диапазон кривых Безье CSS Диапазон кривых Безье CSS
CSS отображение run-in CSS отображение run-in
CSS отображение таблицы CSS отображение таблицы

display: table и table-cell тест. (оба тестируются под одним именем table-cell )

CSS обрезка текста эллипсом CSS обрезка текста эллипсом
CSS.escape() CSS.escape()

Тестирует поддержку CSS.escape().

CSS единицы измерения ex CSS единицы измерения ex
CSS Фильтры CSS Фильтры
Flexbox Flexbox

Определяет поддержку модели гибкой компоновки, а.к.а. Flexbox, которая позволяет легко управлять порядком и размерами элементов в контейнере.

Flexbox (legacy) Flexbox (legacy)
Flexbox (tweener) Flexbox (tweener)
Перенос строк в Flexbox Перенос строк в Flexbox

Определяет поддержку свойства CSS flex-wrap, части Flexbox, которое отсутствует во всех реализациях Flexbox (в частности, в Firefox).

Это свойство присутствует как в синтаксисе 'tweener' (реализованном в IE10), так и в 'современном' синтаксисе (реализованном другими браузерами). Этот детектор вернёт true для любой из этих реализаций, пока поддерживается свойство flex-wrap. Чтобы гарантировать поддержку современного синтаксиса, используйте его вместе с Modernizr.flexbox:

if (Modernizr.flexbox && Modernizr.flexwrap) {
  // Modern Flexbox with `flex-wrap` supported
}
else {
  // Either old Flexbox syntax, or `flex-wrap` not supported
}
CSS псевдоселектор :focus-within :focus-within
@font-face @font-face
CSS сгенерированное содержимое CSS сгенерированное содержимое
CSS Градиенты CSS Градиенты
CSS Тонкие линии CSS Тонкие линии

Определяет поддержку тонких линий hidpi/retina, которые являются CSS-границами шириной меньше 1px, но физически составляют 1px на экранах hidpi.

CSS цвета HSLA CSS цвета HSLA
CSS переносы CSS переносы (csshyphens, softhyphens, softhyphensfind)
CSS псевдокласс :invalid :invalid

Определяет поддержку CSS псевдокласса ':invalid'.

CSS псевдоселектор :last-child :last-child
CSS Маски CSS Маски
CSS Средства запросов CSS Средства запросов
CSS Multiple Backgrounds multiplebgs
CSS :nth-child псевдоселектор nthchild

Определяет поддержку CSS псевдоселектора ':nth-child()'.

CSS Object Fit objectfit
CSS Opacity opacity
CSS Overflow Scrolling overflowscrolling
CSS Pointer Events csspointerevents
CSS position: sticky csspositionsticky
CSS Анимации сгенерированного содержимого csspseudoanimations
CSS Переходы сгенерированного содержимого csspseudotransitions
CSS Отражения cssreflections
CSS Регионы regions
CSS Единицы шрифтов rem cssremunit
CSS Изменение размера пользовательского интерфейса cssresize

Проверка поддержки свойства CSS 3 UI "resize".

CSS rgba rgba
CSS Стилевые полосы прокрутки cssscrollbar
Точки привязки прокрутки scrollsnappoints

Определяет поддержку точек привязки CSS.

CSS Фигуры shapes
CSS селектор общего потомка siblinggeneral
CSS Шрифты с субпиксельной отрисовкой subpixelfont
CSS Supports supports
CSS псевдокласс :target target

Определяет поддержку CSS псевдокласса ':target'.

CSS text-align-last textalignlast
CSS textshadow textshadow
CSS Преобразования csstransforms
CSS 3D преобразования csstransforms3d
CSS Преобразования уровня 2 csstransformslevel2
CSS Стиль преобразования preserve-3d preserve3d

Определяет поддержку transform-style: preserve-3d, для получения надлежащей 3D перспективы элементов.

CSS Переходы csstransitions
CSS user-select userselect
CSS псевдокласс :valid cssvalid

Определяет поддержку CSS псевдокласса ':valid'.

Переменные шрифты OpenType variablefonts
CSS единица vh cssvhunit
CSS единица vmax cssvmaxunit
CSS единица vmin cssvminunit
CSS единица vw cssvwunit
will-change willchange

Определяет поддержку свойства will-change CSS, которое формально сигнализирует браузеру об анимации элемента.

CSS wrap-flow wrapflow
classList classlist
createElement с атрибутами createelementattrs,createelement-attrs
API dataset dataset
Документ-фрагмент documentfragment

Добавление нескольких элементов в DOM в рамках одного вставки.

Атрибут [hidden] hidden

Поддерживает ли браузер атрибут HTML5 [hidden]?

microdata microdata
DOM4 MutationObserver mutationobserver

Определяет доступность поддержки DOM4 MutationObserver.

Пассивные обработчики событий passiveeventlisteners

Определяет поддержку опции passive в addEventListener.

Элемент bdi bdi

Определяет поддержку элемента bdi, позволяющего изолировать текст от окружающих бидирециональных контекстов.

Элемент datalist datalistelem
Элемент details details
Элемент output outputelem
Элемент picture picture
Элемент progress/meter progressbar,meter
Элементы ruby, rp, rt ruby
Тэги шаблонов template
Элемент time time
Элемент track и Timed Text Track texttrackapi,track
Элементы неизвестного типа unknownelements

Поддерживает ли браузер HTML с нестандартными/новыми элементами?

ES5 Array es5array

Проверка реализации ECMAScript 5 Array.

ES5 Date es5date

Проверка реализации ECMAScript 5 Date.

ES5 Function es5function

Проверка реализации ECMAScript 5 Function.

ES5 Object es5object

Проверка реализации ECMAScript 5 Object.

ES5 es5

Проверка реализации всех спецификаций ECMAScript 5.

ES5 Строгий режим strictmode

Проверка реализации строгого режима ECMAScript 5 Object.

ES5 String es5string

Проверка реализации ECMAScript 5 String.

ES5 Синтаксис es5syntax

Проверка поддержки синтаксиса ECMAScript 5.

ES5 Неизменяемый undefined es5undefined

Проверка предотвращения присваивания глобальной переменной undefined в ECMAScript 5.

ES6 Array es6array

Проверка реализации ECMAScript 6 Array.

ES6 Стрелочные функции arrow

Проверка реализации ECMAScript 6 стрелочных функций.

ES6 Коллекции es6collections

Проверка реализации ECMAScript 6 Map, Set, WeakMap и WeakSet.

ES5 String.prototype.contains contains

Проверка реализации ECMAScript 6 contains.

ES6 Генераторы generators

Проверка реализации ECMAScript 6 генераторов.

ES6 Math es6math

Проверка реализации ECMAScript 6 Math.

ES6 Number es6number

Проверка реализации ECMAScript 6 Number.

ES6 Object es6object

Проверка реализации ECMAScript 6 Object.

ES6 Promises promises

Проверка реализации ECMAScript 6 Promises.

ES6 String es6string

Проверка реализации ECMAScript 6 String.

События ориентации и движения устройства devicemotion,deviceorientation

Часть аспекта доступа к устройству HTML5, та же категория, что и геолокация.

devicemotion проверяет поддержку события Device Motion, возвращает логическое значение true/false.

deviceorientation проверяет поддержку события Device Orientation, возвращает логическое значение true/false.

Событие onInput oninput

oninput проверяет способность браузера обнаруживать событие oninput.

API файлов filereader

filereader проверяет соответствие спецификации File API.

Проверка объектов, специфичных для спецификации File API W3C, без избыточности (не нужно тестировать Blob, так как предполагается, что он является прототипом объекта File).

API файловой системы filesystem
Атрибут input[capture] capture

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

Атрибут input[file] fileinput

Определяет доступность input type="file" на платформе.

Например, iOS < 6 и некоторые версии Android не поддерживают это.

Атрибут input[directory] directory

При использовании на <input type="file">, атрибут directory инструктирует пользовательский агент отобразить диалог выбора директории вместо обычного диалога выбора файла.

Атрибут input[form] formattribute

Определяет доступность input form="form_id" на платформе. Например, IE 10 (и ниже) не поддерживают это.

Локализация input[type="number"] localizednumber

Определяет, может ли input type="number" принимать и отображать локализованные числа, например, с разделителем запятой.

атрибут placeholder placeholder

Тесты для атрибута placeholder в элементах input и textarea

form#requestAutocomplete() requestautocomplete

При использовании с input[autocomplete] для аннотации формы, form.requestAutocomplete() отображает диалоговое окно в Chrome, что ускоряет процесс оформления заказов (в настоящее время специфично для платежей).

Валидация формы formvalidation

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

  • Modernizr.inputtypes.number && Modernizr.formvalidation (браузер поддерживает rangeOverflow, typeMismatch и т.д. для type=number)
  • Modernizr.input.required && Modernizr.formvalidation (браузер поддерживает valueMissing)
атрибут iframe[sandbox] sandbox

Тестирование атрибута sandbox в элементах iframe.

атрибут iframe[seamless] seamless

Тестирование атрибута seamless в элементах iframe.

атрибут iframe[srcdoc] srcdoc

Тестирование атрибута srcdoc в элементах iframe.

Анимированный PNG apng

Тестирование поддержки анимированных PNG.

crossOrigin изображения imgcrossorigin

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

JPEG 2000 jpeg2000

Тестирование поддержки JPEG 2000.

JPEG XR (расширенный диапазон) jpegxr

Тестирование поддержки JPEG XR.

атрибут sizes sizes

Тестирование атрибута sizes для изображений.

атрибут srcset srcset

Тестирование атрибута srcset для изображений.

Прозрачность WebP webpalpha

Тестирование поддержки прозрачного WebP.

Анимация WebP webpanimation

Тестирование поддержки анимированного WebP.

Безошибочный WebP webplossless,webp-lossless

Тестирование поддержки безошибочного WebP без альфа-канала.

WebP webp

Тестирование поддержки сжатого WebP без альфа-канала.

Тестирование всех форм поддержки WebP (безошибочное, сжатое, с альфа-каналом и анимированное).

Modernizr.webp // Базовая поддержка (сжатое) Modernizr.webp.lossless // Безошибочное Modernizr.webp.alpha // С альфа-каналом (как сжатое, так и безошибочное) Modernizr.webp.animation // Анимированное WebP

атрибут input formaction inputformaction

Обнаружение поддержки атрибута formaction для элементов form input.

атрибут input formenctype inputformenctype

Обнаружение поддержки атрибута formenctype для элементов form input, который переопределяет атрибут enctype формы.

атрибут input formmethod inputformmethod

Обнаружение поддержки атрибута formmethod для элементов form input.

атрибут input formtarget inputformtarget

Обнаружение поддержки атрибута formtarget для элементов form input, который переопределяет атрибут target формы.

Media запросы для наведения курсора hovermq

Обнаружение поддержки media запросов, основанных на наведении курсора.

Media запросы для указателя pointermq

Обнаружение поддержки media запросов, основанных на указателе.

API маяков beacon

Определяет поддержку API, который позволяет асинхронно передавать небольшие данные HTTP от клиента к серверу.

Подключение с низкой пропускной способностью lowbandwidth

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

Существует две итерации интерфейса navigator.connection

Первая присутствует в Android 2.2+ и только в браузере (не в WebView)

  • http://docs.phonegap.com/en/1.2.0/phonegap_connection_connection.md.html#connection.type
  • http://davidbcalhoun.com/2010/using-navigator-connection-android

Вторая специфицирована по адресу http://dev.w3.org/2009/dap/netinfo/ и, возможно, появится в WebKit

  • https://bugs.webkit.org/show_bug.cgi?id=73528

Неизвестные устройства считаются высокоскоростными

Для более тщательного тестирования сети рассмотрите использование boomerang.js: https://github.com/bluesmoon/boomerang/

Серверные отправленные события eventsource

Тестирование поддержки серверных отправленных событий (eventsource).

API Fetch fetch

Обнаружение поддержки API Fetch, современного заменителя XMLHttpRequest.

XHR responseType='arraybuffer' xhrresponsetypearraybuffer

Тестирование XMLHttpRequest xhr.responseType='arraybuffer'.

XHR responseType='blob' xhrresponsetypeblob

Тестирование XMLHttpRequest xhr.responseType='blob'.

XHR responseType='document' xhrresponsetypedocument

Тестирование XMLHttpRequest xhr.responseType='document'.

XHR responseType='json' xhrresponsetypejson

Тестирование XMLHttpRequest xhr.responseType='json'.

XHR responseType='text' xhrresponsetypetext

Тестирование XMLHttpRequest xhr.responseType='text'.

XHR responseType xhrresponsetype

Тестирование XMLHttpRequest xhr.responseType.

XML HTTP Request Level 2 XHR2 xhr2

Тестирование XHR2.

script[async] scriptasync

Обнаружение поддержки атрибута async у элемента <script>

script[defer] scriptdefer

Обнаружение поддержки атрибута defer у элемента <script>

API распознавания речи speechrecognition
API синтеза речи speechsynthesis
Локальное хранилище localstorage
Сеансовое хранилище sessionstorage
База данных Web SQL websqldatabase
style[scoped] stylescoped

Поддержка атрибута scoped элемента <style>

SVG как источник для тега <img> svgasimg
SVG клип-маски svgclippaths

Обнаружение поддержки клип-масок в SVG (только для SVG, не для HTML-содержимого).

См. это обсуждение по поводу применения SVG клип-масок к HTML-содержимому.

SVG фильтры svgfilters
SVG foreignObject svgforeignobject

Обнаружение поддержки тега foreignObject в SVG.

Встроенный SVG inlinesvg

Обнаружение поддержки встроенного SVG в HTML (не в XHTML).

SVG анимация SMIL smil
textarea maxlength textareamaxlength

Обнаружение поддержки атрибута maxlength для элемента textarea.

Blob URL bloburls

Обнаружение поддержки создания Blob URL.

Data URI datauri

Обнаружение поддержки Data URI. Предоставляет подсвойство для отчётности о поддержке Data URI размером более 32 КБ:

Modernizr.datauri           // true
Modernizr.datauri.over32kb  // false in IE8
Парсер URL urlparser

Проверка реализации браузером конструктора URL для парсинга URL.

API URLSearchParams urlsearchparams

Обнаружение поддержки API, предоставляющего утилитарные методы для работы с строкой запроса URL.

Автовоспроизведение видео videoautoplay

Проверка поддержки атрибута autoplay для элемента video.

crossOrigin видео videocrossorigin

Обнаружение поддержки атрибута crossOrigin для тега видео.

Атрибут циклического воспроизведения видео videoloop
Атрибут предварительной загрузки видео videopreload
Расширения WebGL webglextensions

Обнаружение поддержки расширений OpenGL в WebGL. Это true, если поддерживается API расширений WebGL, тогда выводит поддерживаемые расширения как подсвойства, например:

if (Modernizr.webglextensions) {
  // WebGL extensions API supported
}
if ('OES_vertex_array_object' in Modernizr.webglextensions) {
  // Vertex Array Objects extension supported
}
RTC канал данных datachannel

Обнаружение RTCDataChannel API, который позволяет передавать данные напрямую между участниками.

getUserMedia getusermedia

Обнаружение поддержки нового API getUserMedia на основе Promise.

RTC соединение поровну peerconnection
Бинарные WebSockets websocketsbinary
Кодирование/декодирование Base64 atobbtoa

Обнаружение поддержки API WindowBase64 (window.atob && window.btoa).

Оконный фрейм framed

Проверяет, является ли страница iframe.

matchMedia matchmedia

Определяет поддержку matchMedia.

Рабочие потоки из Blob URI blobworkers

Определяет поддержку создания Web Workers из Blob URI.

Рабочие потоки из Data URI dataworkers

Определяет поддержку создания Web Workers из Data URI.

Общие рабочие потоки sharedworkers

Определяет поддержку API SharedWorker из спецификации Web Workers.

Объекты Transferables transferables

Определяет, могут ли веб-рабочие потоки использовать объекты transferables.

Веб-рабочие потоки webworkers

Определяет поддержку базового API Worker из спецификации Web Workers. Веб-рабочие потоки предоставляют простой способ для веб-контента запускать скрипты в фоновых потоках.

© 2009–2020 The Modernizr team
Licensed under the MIT License.
https://modernizr.com/docs/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API