Ich habe eine einfache und flexible Lösung, die Wills ähnelt (aber mit dem zusätzlichen Vorteil, dass sie ein gültiges HTML ist):
Geben Sie dem body-Element die Klasse "jsOff". Entfernen (oder ersetzen) Sie dies durch JavaScript. Lassen Sie CSS alle Elemente mit der Klasse "jsOnly" mit einem übergeordneten Element mit der Klasse "jsOff" ausblenden.
Dies bedeutet, dass bei aktiviertem JavaScript die Klasse "jsOff" aus dem Hauptteil entfernt wird. Dies bedeutet, dass Elemente mit einer Klasse von "jsOnly" kein übergeordnetes Element mit einer Klasse von "jsOff" haben und daher nicht mit dem CSS-Selektor übereinstimmen, der sie verbirgt. Daher werden sie angezeigt.
Wenn JavaScript deaktiviert ist, wird die Klasse "jsOff" nicht aus dem Textkörper entfernt. Elemente mit „jsOnly“ wird ein Elternteil mit „jsOff“ haben und so werden das CSS - Selektor übereinstimmen , dass versteckt sie, so werden sie ausgeblendet werden.
Hier ist der Code:
<html>
<head>
<!-- put this in a separate stylesheet -->
<style type="text/css">
.jsOff .jsOnly{
display:none;
}
</style>
</head>
<body class="jsOff">
<script type="text/javascript">
document.body.className = document.body.className.replace('jsOff','jsOn');
</script>
<noscript><p>Please enable JavaScript and then refresh the page.</p></noscript>
<p class="jsOnly">I am only shown if JS is enabled</p>
</body>
</html>
Es ist gültig HTML. Es ist einfach. Es ist flexibel.
Fügen Sie einfach die Klasse "jsOnly" zu jedem Element hinzu, das nur angezeigt werden soll, wenn JS aktiviert ist.
Bitte beachten Sie, dass das JavaScript, mit dem die Klasse "jsOff" entfernt wird, so früh wie möglich innerhalb des Body-Tags ausgeführt werden sollte. Es kann nicht früher ausgeführt werden, da das Body-Tag noch nicht vorhanden ist. Es sollte später nicht ausgeführt werden, da dies bedeutet, dass Elemente mit der Klasse "jsOnly" möglicherweise nicht sofort sichtbar sind (da sie mit dem CSS-Selektor übereinstimmen, der sie verbirgt, bis die Klasse "jsOff" aus dem body-Element entfernt wird).
Dies könnte auch einen Mechanismus für das Nur .jsOn .someClass{}
-Js-Styling (z .jsOff .someOtherClass{}
. B. ) und das Nur-Js-Nur-Styling (z . B. ) bereitstellen . Sie können es verwenden, um eine Alternative zu <noscript>
:
.jsOn .noJsOnly{
display:none;
}