Noté que en muchos motores de plantillas, en HTML5 Boilerplate , en varios marcos y en sitios PHP simples, se no-jsagrega 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. -Nickclassatributo. 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.jses peor de lo.js bodyque 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-jsclase es utilizada por la biblioteca de detección de características Modernizr . Cuando se carga Modernizr, se reemplazano-jsconjs. 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 ajssi 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-jstruco, esto ahora se puede hacer concss:Esto es preferible porque:
fuente
\b) no coincide con algo comoanno-jsus, el otro lo cambia aanjsus.no-jsno es una subcadena típica de ningún nombre de clase, pero aún así es "más seguro" con\bs.Modernizr.js eliminará la
no-jsclase.Esto le permite crear reglas CSS para
.no-js somethingaplicarlas solo si Javascript está deshabilitado.fuente
La
no-jsclase 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-jsclase. Deno-jslo 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-jsclass 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