Вместо того, чтобы скрывать тело:
body { display: none; }
Можете ли вы сделать все в теле скрытым?
body * { display: none; }
Затем переопределите это для noscript или для div внутри noscript, например,
body noscript #requirements { display: block; }
Редактировать
Возвращаясь к этому после комментария Шакера и глядя на мою тестовую страницу с Firebug, стало очевидно, в чем проблема.
body * { display: none; }
относится к всему внутри тела на любой глубине , поэтому даже если я правильно настрою отображение <noscript>
правильно, содержимое внутри он все еще не отображается.
Решение состоит в том, чтобы нацелиться более конкретно, используя селектор child вместо селектора потомка .
Учитывая этот html, я ничего не вижу, когда включен javascript, но вижу содержимое блока <noscript>
, в котором перечислены требования к моему сайту, когда javascript отключен.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<style type="text/css" media="screen">
body > * {
display: none;
}
body > noscript {
display: block;
}
</style>
</head>
<body>
<p>A normal text block, within a <p></p>
<div>A standard <div> with only this text in it</div>
<noscript>
<div id="requirements">
<p>
This is my noscript div, that is, a <div>
within the <noscript> tag.
</p>
<p>
This site requires that javascript and cookies are enabled.
</p>
</div>
</noscript>
</body>
</html>
Правило body > *
скрывает всех непосредственных потомков тела и, следовательно, их потомков, в то время как правило body > noscript
раскрывает содержимое блока noscript, и, конечно, этот блок отображает только если JavaScript отключен.