Css 堆栈溢出,如JavaScript警告和w3c HTML验证

Css 堆栈溢出,如JavaScript警告和w3c HTML验证,css,w3c-validation,noscript,Css,W3c Validation,Noscript,我有一个严重依赖JavaScript的网站。虽然大多数东西降级很好,但功能上确实是二级的。因此,我想提醒用户,如果他们禁用了JS,他们应该打开它。为此,我使用NOSCRIPT显示一个div,并在页面顶部显示一个警报,类似于堆栈溢出的方式 这个div覆盖了页面内容的顶部,所以我必须向下移动文档主体。由于JS不可用,所以必须使用CSS,我使用类似于:margintop:8px。完整的HTML如下所示: <noscript> <style type="text/css">bod

我有一个严重依赖JavaScript的网站。虽然大多数东西降级很好,但功能上确实是二级的。因此,我想提醒用户,如果他们禁用了JS,他们应该打开它。为此,我使用NOSCRIPT显示一个div,并在页面顶部显示一个警报,类似于堆栈溢出的方式

这个div覆盖了页面内容的顶部,所以我必须向下移动文档主体。由于JS不可用,所以必须使用CSS,我使用类似于:
margintop:8px
。完整的HTML如下所示:

<noscript>
<style type="text/css">body { margin-top:8em; }</style>
<div class="warn">WARNING<br>Turn on JavaScript for best experience</div>
</noscript>

正文{页边顶部:8em;}
警告
打开JavaScript以获得最佳体验
问题是:我应该把这个代码放在哪里

我在主体部分的头部、主体部分、主体之后进行了尝试,但无论放置在何处,W3C HTML标记验证程序都会抱怨文档类型在此处不允许元素“STYLE”,或者文档类型在此处不允许元素“BODY”


我甚至尝试将CSS和DIV分成两部分,并为它们找到一个合适的位置,但都出现了相同的错误。

您可能只需要接受它,并接受您的页面将不会验证

…或者改变它的工作方式。你能用
position:static将它放在第一位吗?这样它自然会将你的页面内容向下推

…或者,为了让你的
正文始终保持
页边空白:8em
。然后在JavaScript中的DOM就绪(或窗口加载)上,将其设置为0

CSS JavaScript
您需要在noscript元素中有一个block元素(例如div),并在head元素中移动style元素以获得正确的验证。

这不会导致页面加载时页边距可见吗?@Alexandre Jasmin是的,只需查看跨浏览器DOM就绪事件。或者使用
$(function(){})或等效代码。您没有抓住要点。仅当JavaScript不可用时才需要应用样式。因此,它必须位于NOSCRIPT标记内。
body {
   margin-top: 8em;
}

body.javascript {
   margin-top: 0;
}
window.onload = function() {
   document.getElementsByTagName('body')[0].className += ' javascript';
};