Noté que en muchos motores de plantillas, en HTML5 Boilerplate , en varios marcos y en sitios PHP simples, se no-js
agrega la clase a la <HTML>
etiqueta.
¿Por qué se hace esto? ¿Hay algún tipo de comportamiento predeterminado del navegador que reaccione a esta clase? ¿Por qué incluirlo siempre? ¿Eso no hace que la clase en sí misma sea obsoleta, si no hay un caso "no-js" y html se puede abordar directamente?
Aquí hay un ejemplo del 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]-->
Como puede ver, el <html>
elemento siempre tendrá esta clase. ¿Alguien puede explicar por qué esto se hace tan a menudo?
.myclass { /* CSS code for all versions of your page goes here */ }
,.js .myclass { /* This CSS code will only show up if JS is enabled */ }
y.no-js .myclass { /* This CSS code will only show up if JS is disabled. */ }
. Espero que esto ayude. -Nickclass
atributo. Aunque HTML 4 técnicamente no lo hace, ningún navegador se atraganta; incluso los que no lo admiten lo ignoran, y no he visto uno de esos navegadores en años..js { padding: ...}
está bien, ya que tú sabes como quien lo implementó ese cuerpo = .js. Más directamente a su punto, parece que está afirmando quebody.js
es peor de lo.js body
que no estoy siguiendo ...<html>
y nunca se ha informado de ningún problema al respecto. Ponerlo de alguna manera se<html>
ha convertido en una práctica establecida y la gente sabe de inmediato qué es y qué hace. Al final, desviarse de esa práctica solo genera más preguntas.La
no-js
clase es utilizada por la biblioteca de detección de características Modernizr . Cuando se carga Modernizr, se reemplazano-js
conjs
. Si JavaScript está deshabilitado, la clase permanece. Esto le permite escribir CSS que se dirige fácilmente a cualquier condición.De la Fuente Anotada de Modernizadores (ya no se mantiene) :
Aquí hay una publicación de blog de Paul Irish que describe este enfoque: http://www.paulirish.com/2009/avoiding-the-fouc-v3/
Me gusta hacer lo mismo, pero sin Modernizr. Puse lo siguiente
<script>
en<head>
para cambiar la clase ajs
si JavaScript está habilitado. Prefiero usar.replace("no-js","js")
sobre la versión regex porque es un poco menos críptico y se adapta a mis necesidades.Antes de esta técnica, generalmente aplicaba estilos dependientes de js directamente con JavaScript. Por ejemplo:
Con el
no-js
truco, esto ahora se puede hacer concss
:Esto es preferible porque:
fuente
\b
) no coincide con algo comoanno-jsus
, el otro lo cambia aanjsus
.no-js
no es una subcadena típica de ningún nombre de clase, pero aún así es "más seguro" con\b
s.Modernizr.js eliminará la
no-js
clase.Esto le permite crear reglas CSS para
.no-js something
aplicarlas solo si Javascript está deshabilitado.fuente
La
no-js
clase se elimina mediante un script javascript, por lo que puede modificar / mostrar / ocultar cosas usando css si js está deshabilitado.fuente
.no-js #js-warning {display: block;}
Esto no solo es aplicable en Modernizer. Veo algunos sitios implementados como a continuación para verificar si tiene soporte JavaScript o no.
Si hay compatibilidad con JavaScript, eliminará la
no-js
clase. Deno-js
lo contrario , permanecerá en la etiqueta del cuerpo. Luego controlan los estilos en el CSS cuando no hay soporte para JavaScript.fuente
Mire el código fuente en Modernizer, esta sección:
Básicamente, busca classPrefix +
no-js
class y lo reemplaza con classPrefix +js
.Y el uso de eso, tiene un estilo diferente si JavaScript no se ejecuta en el navegador.
fuente
La clase no-js se usa para diseñar una página web, dependiendo de si el usuario tiene JS deshabilitado o habilitado en el navegador.
Según los documentos de Modernizr :
fuente