猿问

在<body>中使用<style>标签和其他HTML

在<body>中使用<style>标签和其他HTML

<html>
  <body>
    <style type="text/css">
      p.first {color:blue}
      p.second {color:green}
    </style>

    <p class="first">Hello World</p>
    <p class="second">Hello World</p>

    <style type="text/css">
      p.first {color:green}
      p.second {color:blue}
    </style>

    <p class="first">Hello World</p>
    <p class="second">Hello World</p>
  </body></html>

浏览器应该如何呈现不连续的css?是否应该使用页面上的所有css样式生成一些数据结构并使用它进行渲染?

或者它按照它看到的顺序使用样式信息进行渲染?


FFIVE
浏览 1461回答 3
3回答

GCT1015

正如其他人已经提到的,HTML 4要求将<style>标记放在该<head>部分中(即使大多数浏览器允许其中的<style>标记body)。但是,HTML 5包含scoped属性(请参阅下面的更新),该属性允许您创建范围在<style>标记的父元素中的样式表。这也使您可以<style>在<body>元素中放置标记:<!DOCTYPE&nbsp;html><html><head></head><body><div&nbsp;id="scoped-content"> &nbsp;&nbsp;&nbsp;&nbsp;<style&nbsp;type="text/css"&nbsp;scoped> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;h1&nbsp;{&nbsp;color:&nbsp;red;&nbsp;}&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;</style> &nbsp;&nbsp;&nbsp;&nbsp;<h1>Hello</h1></div> &nbsp;&nbsp;&nbsp;&nbsp;<h1> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;World &nbsp;&nbsp;&nbsp;&nbsp;</h1></body></html>如果在支持HTML-5的浏览器中呈现上述代码scoped,您将看到样式表的有限范围。&nbsp;只有一个重要的警告......在我写这个答案时(2013年5月),几乎没有主流浏览器目前支持该scoped属性。(虽然显然Chromium的开发人员版本支持它。)但是,scoped该问题属于一个有趣的含义。这意味着未来的浏览器通过标准强制要求允许<style>元素<body>(只要<style>元素具有范围)。所以,鉴于:几乎每个现有浏览器当前都忽略该scoped属性几乎每个现有的浏览器目前都允许使用<style>标签<body>未来的实现将需要允许(范围)<style>标签<body>......再有就是字面上没有害处在将*&nbsp;<style>身体内的标签,只要你面向未来他们有scoped属性。唯一的问题是当前的浏览器实际上不会限制样式表的范围&nbsp;- 它们会将它应用于整个文档。但重点是,出于所有实际目的,您可以<style>在<body>提供的内容中包含标签:通过包含scoped属性,为HTML提供面向未来的证明了解到目前为止,其中的样式表<body>实际上并不是作用域的(因为还没有主流浏览器支持)*当然除了惹恼HTML验证器......&nbsp;最后,对于常见的(但主观)声称嵌入HTML中的CSS的不良做法,应该指出的是,整点的的scoped属性,以适应典型的现代开发框架,使开发人员可以导入HTML的块为模块或联合内容。嵌入式CSS&nbsp;仅适用于特定的HTML块非常方便,以便开发具有特定样式的封装模块化组件。根据Mozilla文档,截至2019年2月更新,该scoped属性已弃用。Chrome在版本36(2014)和Firefox版本62(2018)中停止支持它。在这两种情况下,用户必须在浏览器的设置中明确启用该功能。没有其他主流浏览器支持它。

慕码人2483693

坏消息的“风格体”爱好者:W3C最近失去了HTML战争对WHATWG,其versionless HTML“生活标准”&nbsp;现在已经成为了一个官方的,这,唉,也不会允许&nbsp;STYLE的BODY。短暂的快乐时光结束了。;)W3C验证器现在也适用于WHATWG规范。(谢谢@FrankConijn单挑!)(注意:这是“截至今天”的情况,但由于没有版本控制,链接在任何时候都可能无效而无需通知或控制。除非您愿意链接到GitHub上的各个源提交,否则您基本上不能更长时间地对新的官方HTML标准AFAIK&nbsp;进行稳定的引用。如果有正确的方法可以正确执行此操作,请纠正我。)被曝光的好消息:耶,STYLE终于在有效的BODY,作为HTML5.2的!&nbsp;(也scoped已经消失了。)从W3C规范(津津乐道的最后一行!):4.2.6。样式元素...可以使用此元素的上下文:预期元数据内容的位置。在一个noscript元素中,它是head元素的子元素。在体内,预计流量含量。META SIDE-NOTE:事实上,尽管“浏览器战争”受到了损害,我们仍然不得不继续开发针对两个荒谬竞争的&nbsp;“官方”HTML“标准”(引用1 standard + 1 standard < 1 standard)意味着“回归到战壕常识”的方法网络开发从未真正停止应用。现在最终可能会改变,但引用传统观点:网络作者/开发者,因此,反过来,浏览器应该最终决定什么应该(并且不应该)在规范中,当没有充分的理由反对已经在现实。和大多数浏览器长期以来一直支持STYLE的BODY(以这种或那种方式;见例如scoped,ATTR),尽管其固有的性能(可能还有其他)的处罚(其中,我们应该决定支付与否,规格)。所以,首先,我会继续押注他们,而不是放弃希望。;)如果WHATWG对他们声称的现实/作者有同样的尊重,他们可能最终会在这里做W3C所做的事情。
随时随地看视频慕课网APP
我要回答