У меня есть простое и гибкое решение, чем-то похожее на Уилла (но с дополнительным преимуществом в качестве действительного HTML):
Дайте элементу тела класс "jsOff". Удалите (или замените) это с помощью JavaScript. Есть CSS, чтобы скрыть любые элементы с классом "jsOnly" с родительским элементом с классом "jsOff".
Это означает, что если JavaScript включен, класс "jsOff" будет удален из тела. Это будет означать, что у элементов с классом "jsOnly" не будет родительского элемента с классом "jsOff", и поэтому они не будут соответствовать селектору CSS, который их скрывает, поэтому они будут показаны.
Если JavaScript отключен, класс "jsOff" не будет удален из тела. Элементы с «jsOnly» будут иметь родителя с «jsOff», поэтому будет соответствовать селектору CSS, который их скрывает, поэтому они будут скрыты.
Вот код:
<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>
Это действительный html. Это просто. Это гибкий.
Просто добавьте класс "jsOnly" к любому элементу, который вы хотите отображать, только когда JS включен.
Обратите внимание, что JavaScript, удаляющий класс "jsOff", должен выполняться как можно раньше внутри тега body. Его нельзя выполнить раньше, так как тег body еще не будет там. Его не следует выполнять позже, поскольку это будет означать, что элементы с классом "jsOnly" могут быть невидимы сразу (поскольку они будут соответствовать селектору CSS, который их скрывает, пока класс "jsOff" не будет удален из элемента body).
Это также может обеспечить механизм для стиля только для js (например, .jsOn .someClass{}
) и стиля только для js (например, .jsOff .someOtherClass{}
). Вы можете использовать его, чтобы предоставить альтернативу <noscript>
:
.jsOn .noJsOnly{
display:none;
}