J'ai une solution simple et flexible, un peu similaire à celle de Will (mais avec l'avantage supplémentaire d'être valide html):
Donnez à l'élément body une classe de "jsOff". Supprimez (ou remplacez) cela par JavaScript. Avoir CSS pour masquer tous les éléments avec une classe de "jsOnly" avec un élément parent avec une classe de "jsOff".
Cela signifie que si JavaScript est activé, la classe "jsOff" sera supprimée du corps. Cela signifiera que les éléments avec une classe de "jsOnly" n'auront pas de parent avec une classe de "jsOff" et ne correspondront donc pas au sélecteur CSS qui les cache, donc ils seront affichés.
Si JavaScript est désactivé, la classe "jsOff" ne sera pas supprimée du corps. Les éléments avec « jsOnly » auront un parent avec « jsOff » et ainsi se correspondent au sélecteur CSS qui les cache, ainsi ils seront cachés.
Voici le 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>
C'est du html valide. C'est simple. C'est flexible.
Ajoutez simplement la classe "jsOnly" à tout élément que vous souhaitez afficher uniquement lorsque JS est activé.
Veuillez noter que le JavaScript qui supprime la classe "jsOff" doit être exécuté le plus tôt possible dans la balise body. Il ne peut pas être exécuté plus tôt, car la balise body n'y sera pas encore. Il ne doit pas être exécuté plus tard car cela signifiera que les éléments avec la classe "jsOnly" peuvent ne pas être visibles tout de suite (car ils correspondent au sélecteur CSS qui les cache jusqu'à ce que la classe "jsOff" soit supprimée de l'élément body).
Cela pourrait également fournir un mécanisme pour le style js uniquement (par exemple .jsOn .someClass{}
) et le style non js uniquement (par exemple .jsOff .someOtherClass{}
). Vous pouvez l'utiliser pour fournir une alternative à <noscript>
:
.jsOn .noJsOnly{
display:none;
}