Zauważam, że w wielu silnikach szablonów, w HTML5 Boilerplate , w różnych frameworkach i na zwykłych stronach php, no-js
klasa jest dodawana do <HTML>
tagu.
Dlaczego to się dzieje? Czy istnieje jakieś domyślne zachowanie przeglądarki, które reaguje na tę klasę? Dlaczego zawsze to dołączasz? Czy to nie czyni samej klasy przestarzałą, jeśli nie ma przypadku „no-js”, a HTML może być adresowany bezpośrednio?
Oto przykład z indeksu HTML5 Boilerplate.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]-->
Jak widać, <html>
element zawsze będzie miał tę klasę. Czy ktoś może wyjaśnić, dlaczego tak często się to dzieje?
.myclass { /* CSS code for all versions of your page goes here */ }
,.js .myclass { /* This CSS code will only show up if JS is enabled */ }
i.no-js .myclass { /* This CSS code will only show up if JS is disabled. */ }
. Mam nadzieję że to pomoże. -Nickclass
atrybut. Chociaż technicznie HTML 4 tego nie robi, przeglądarka nie dusi się; nawet te, które go nie obsługują, po prostu go ignorują i od lat nie widziałem żadnej z tych przeglądarek..js { padding: ...}
jest w porządku, ponieważ jako ten, który zaimplementował to ciało, to .js. Mówiąc wprost, wydaje się, że twierdzisz, żebody.js
jest gorszy niż ten,.js body
którego nie<html>
i nigdy nie zgłoszono żadnego problemu z tym. Jakoś nałożenie go<html>
stało się ustaloną praktyką i ludzie natychmiast wiedzą, co to jest i co robi. W końcu odejście od tej praktyki po prostu rodzi więcej pytań.no-js
Klasa jest używana przez modernizr biblioteki wykrywania cecha. Kiedy modernizr ładunki, zastępujeno-js
sięjs
. Jeśli JavaScript jest wyłączony, klasa pozostaje. Pozwala to napisać CSS, który łatwo celuje w dowolny warunek.Z zanotowanego źródła moderatora (nie jest już utrzymywane) :
Oto post na blogu autorstwa Paula Irisha opisujący to podejście: http://www.paulirish.com/2009/avoiding-the-fouc-v3/
Lubię robić to samo, ale bez Modernizatora. Włożyłem następuje
<script>
w<head>
celu zmiany klasęjs
czy JavaScript jest włączony. Wolę korzystać.replace("no-js","js")
z wersji regex, ponieważ jest nieco mniej tajemnicza i odpowiada moim potrzebom.Przed tą techniką zazwyczaj po prostu stosowałem style zależne od js bezpośrednio za pomocą JavaScript. Na przykład:
Dzięki
no-js
sztuczce można to teraz zrobić za pomocącss
:Jest to preferowane, ponieważ:
źródło
\b
) nie pasuje do czegoś podobnegoanno-jsus
, druga zmienia to naanjsus
.no-js
nie jest typowym podciągiem żadnej nazwy klasy, ale nadal pod tym względem jest „bezpieczniejszy” z\b
s.Modernizr.js usunie
no-js
klasę.Pozwala to na tworzenie reguł CSS w
.no-js something
celu ich stosowania tylko wtedy, gdy JavaScript jest wyłączony.źródło
no-js
Klasa zostanie usunięty przez skrypt JavaScript, dzięki czemu można modyfikować / Wyświetl / ukryj rzeczy za pomocą css czy js jest wyłączone.źródło
.no-js #js-warning {display: block;}
Dotyczy to nie tylko programu Modernizer. Widzę implementację witryny, taką jak poniżej, aby sprawdzić, czy obsługuje javascript.
Jeśli istnieje obsługa javascript, usunie
no-js
klasę. W przeciwnym razieno-js
pozostanie w znaczniku body. Następnie kontrolują style w css, gdy nie obsługuje javascript.źródło
Spójrz na kod źródłowy w Modernizer, ta sekcja:
W zasadzie szuka
no-js
klasy classPrefix + i zamienia ją na classPrefix +js
.A użycie tego polega na odmiennym stylizowaniu, jeśli JavaScript nie działa w przeglądarce.
źródło
Klasa no-js służy do stylizowania strony internetowej, w zależności od tego, czy użytkownik ma wyłączoną obsługę JS w przeglądarce lub ją włącza.
Zgodnie z dokumentami Modernizr :
źródło