Я заметил, что во многих шаблонизаторах, в HTML5 Boilerplate , в различных фреймворках и на простых php-сайтах есть no-js
класс, добавленный к <HTML>
тегу.
Почему это сделано? Есть ли какое-то поведение браузера по умолчанию, которое реагирует на этот класс? Зачем включать это всегда? Разве это не делает сам класс устаревшим, если нет случая no-no-js и html может быть адресован напрямую?
Вот пример из HTML5 Boilerplate index.html:
<!--[if lt IE 7 ]> <html lang="en" class="no-js ie6"> <![endif]-->
<!--[if IE 7 ]> <html lang="en" class="no-js ie7"> <![endif]-->
<!--[if IE 8 ]> <html lang="en" class="no-js ie8"> <![endif]-->
<!--[if IE 9 ]> <html lang="en" class="no-js ie9"> <![endif]-->
<!--[if (gt IE 9)|!(IE)]><!--> <html lang="en" class="no-js"> <!--<![endif]-->
Как видите, <html>
элемент всегда будет иметь этот класс. Может кто-нибудь объяснить, почему это делается так часто?
.myclass { /* CSS code for all versions of your page goes here */ }
,.js .myclass { /* This CSS code will only show up if JS is enabled */ }
и.no-js .myclass { /* This CSS code will only show up if JS is disabled. */ }
. Надеюсь это поможет. Никclass
атрибут. Хотя HTML 4 технически этого не делает, браузер не захлебывается им; даже те, которые не поддерживают его, просто игнорируют его, и я не видел ни одного из этих браузеров годами..js { padding: ...}
это прекрасно, поскольку вы знаете, как тот, кто это реализовал, body = .js. Точнее, кажется, вы заявляете, чтоbody.js
это хуже, чем то, за чем.js body
я не следую ...<html>
содержит его, и никаких проблем против этого не было. Каким-то образом надеть это<html>
стало установившейся практикой, и люди сразу же знают, что это такое и что оно делает. В конце концов, отклонение от этой практики просто вызывает больше вопросов.no-js
Класс используется Modernizr библиотеки обнаружения функции. Когда Modernizr загружается, он заменяетсяno-js
наjs
. Если JavaScript отключен, класс остается. Это позволяет вам писать CSS, который легко нацеливается на любое условие.Из аннотированного источника Modernizrs (больше не поддерживается) :
Вот запись в блоге Пола Айриша, описывающая этот подход: http://www.paulirish.com/2009/avoiding-the-fouc-v3/
Мне нравится делать то же самое, но без Модернизра. Я поставил следующее
<script>
в<head>
изменить класс ,js
если JavaScript включен. Я предпочитаю использовать.replace("no-js","js")
версию regex, потому что она немного менее загадочна и соответствует моим потребностям.До этой техники я обычно просто применял бы js-зависимые стили напрямую с JavaScript. Например:
Теперь с помощью этого
no-js
трюка можно сделать следующееcss
:Это предпочтительнее, потому что:
источник
\b
) не совпадает с чем-то вродеanno-jsus
, другой изменяет это наanjsus
.no-js
не является типичной подстрокой для какого-либо имени класса, но все же в этом отношении «безопаснее» с\b
s.Modernizr.js удалит
no-js
класс.Это позволяет вам создавать правила CSS для
.no-js something
их применения, только если Javascript отключен.источник
no-js
Класс получает удаляются с помощью яваскрипта сценария, так что вы можете изменить / отображение / скрытие вещь с помощью CSS , если JS отключен.источник
.no-js #js-warning {display: block;}
Это применимо не только в Модернизаторе. Я вижу, что какой-то сайт реализован, как показано ниже, чтобы проверить, поддерживает ли он javascript или нет.
Если есть поддержка javascript, он удалит
no-js
класс. В противном случаеno-js
останется в теле тега. Затем они управляют стилями в CSS, когда нет поддержки JavaScript.источник
Посмотрите на исходный код в Modernizer, этот раздел:
Так что в основном он ищет classPrefix +
no-js
class и заменяет его на classPrefix +js
.И использование этого, стилизация по-другому, если JavaScript не работает в браузере.
источник
Класс no-js используется для стилизации веб-страницы, в зависимости от того, отключен ли JS у пользователя или включен в браузере.
Согласно документации Modernizr :
источник