Percebo que em muitos mecanismos de modelo, no HTML5 Boilerplate , em várias estruturas e em sites php simples, há a no-js
classe adicionada à <HTML>
tag.
Por que isso é feito? Existe algum tipo de comportamento padrão do navegador que reage a essa classe? Por que incluí-lo sempre? Isso não torna obsoleta a própria classe, se não houver nenhum caso "não-js" e o html puder ser endereçado diretamente?
Aqui está um exemplo do 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 você pode ver, o <html>
elemento sempre terá essa classe. Alguém pode explicar por que isso é feito com tanta frequência?
fonte
.myclass { /* CSS code for all versions of your page goes here */ }
,.js .myclass { /* This CSS code will only show up if JS is enabled */ }
e.no-js .myclass { /* This CSS code will only show up if JS is disabled. */ }
. Espero que isto ajude. -Nickclass
atributo. Embora o HTML 4 tecnicamente não funcione, nenhum navegador entra nele; mesmo aqueles que não o suportam simplesmente o ignoram, e eu não vejo um desses navegadores há anos..js { padding: ...}
está bem, já que você sabe como quem o implementou naquele corpo = .js. Mais diretamente ao seu ponto, parece que você está afirmando quebody.js
é pior do que.js body
o que eu não estou seguindo ...<html>
e nenhum problema foi relatado contra isso. De alguma forma, colocá-lo em<html>
prática tornou-se uma prática estabelecida e as pessoas imediatamente sabem o que é e o que faz. No final, desviar-se dessa prática apenas levanta mais questões.A
no-js
classe é usada pela biblioteca de detecção de recursos Modernizr . Quando o Modernizr é carregado, ele é substituídono-js
porjs
. Se o JavaScript estiver desativado, a classe permanecerá. Isso permite que você escreva CSS que tenha como alvo facilmente qualquer uma das condições.Da fonte anotada da Modernizrs (não mais mantida) :
Aqui está um post de Paul Irish descrevendo essa abordagem: http://www.paulirish.com/2009/avoiding-the-fouc-v3/
Eu gosto de fazer a mesma coisa, mas sem o Modernizr. Coloquei o seguinte
<script>
no<head>
para alterar a classe parajs
se o JavaScript estiver ativado. Eu prefiro usar.replace("no-js","js")
a versão regex porque é um pouco menos enigmática e atende às minhas necessidades.Antes dessa técnica, geralmente eu aplicava estilos dependentes de js diretamente com JavaScript. Por exemplo:
Com o
no-js
truque, isso agora pode ser feito comcss
:Isso é preferível porque:
fonte
\b
) não corresponde a algo comoanno-jsus
, a outra muda paraanjsus
.no-js
não é uma substring típica de qualquer nome de classe, mas ainda assim é "mais seguro" com\b
s.Modernizr.js irá remover a
no-js
classe.Isso permite que você crie regras CSS para
.no-js something
aplicá-las somente se o Javascript estiver desativado.fonte
A
no-js
classe é removida por um script javascript, para que você possa modificar / exibir / ocultar itens usando css se js estiver desativado.fonte
.no-js #js-warning {display: block;}
Isso não é aplicável apenas no Modernizer. Vejo algum site ser implementado como abaixo para verificar se ele possui suporte a javascript ou não.
Se houver suporte a javascript, ele removerá a
no-js
classe. Caso contráriono-js
, permanecerá na etiqueta do corpo. Eles controlam os estilos no CSS quando não há suporte a javascript.fonte
Veja o código fonte no Modernizer, nesta seção:
Então, basicamente, procure a
no-js
classe classPrefix + e substitua-a por classPrefix +js
.E o uso disso é diferente se o JavaScript não estiver sendo executado no navegador.
fonte
A classe no-js é usada para estilizar uma página da Web, dependendo de o usuário ter o JS desativado ou ativado no navegador.
De acordo com os documentos Modernizr :
fonte