有very old thread人们声明你不应该在正文中包含CSS,但是允许使用MDN states。因此,在页面中间包含CSS是不错的做法?
例如,让我们采用这样的结构:
<html>
<head>
<link href="global.css" rel="stylesheet">
</head>
<body>
<h1>Some title</h1>
<p>Some content</p>
<img src="some-image.jpg" />
<link href="specific-component.css" rel="stylesheet">
<div>
Specific component that requires the style
</div>
<p>Other content</p>
</body>
</html>
包含特定组件样式的中间页面与将其包含在主要部分相比有哪些缺点?
如何使用它呈现页面?它会是:
<link>
元素。或者它会是:
答案 0 :(得分:4)
有两个主要缺点:
理论上,这也是轻微的性能损失,但它可以忽略不计:当满足新的样式表资源时,渲染暂停。应该在&#34;渲染阻止&#34; 和脚本执行或DOM构建阻塞之间做出明显的区别。浏览器将继续执行其他任何操作,并将阻止任何请求repaint()的脚本,直到资源结算,此时,重建CSSOM,针对新CSSOM检查所有现有DOM元素,并继续所有暂停脚本。
如果您的<style>
引用了仅在该特定视图/组件/页面中遇到的异常,则在受规则影响的元素之前将其添加到那里是有意义的。但如果你从中做出一个习惯,迟早你会希望你把所有的风格放在一个地方;你的项目将变得更难维护
根据一般原则,你不应该这样做。
这也很大程度上取决于您的项目规模。在小项目上它是无关紧要的。在涉及大型团队的大型项目中,它是完全被禁止的,因为没有人会记住你的异常。因此,它有时会失去你的位置或至少是你的地位。ツ
最后,但并非最不重要,特别是如果您不被视为专家,那么可以通过评估您的工作的人来解释您的兴趣(例如,人们对您的了解程度低于您把它看作是你没有正常工作的标志。)
话虽如此,浏览器并不关心。如果验证,则应用并呈现
另一个小技术问题(在<style>
标记的情况下,而非<link>
s)是内联CSS 从不缓存。它每次都会与标记一起加载,而加载样式表中的常规CSS不再占用带宽。但是,如果我们谈论几行代码,那就无关紧要了。
答案 1 :(得分:2)
Safari和Edge将在['Red Hat Enterprise Linux Extended Update Support 7.2', 'Red Hat Enterprise Linux 7']
之前呈现内容,然后在链接的CSS提取后继续呈现。
Firefox将在<link>
之前和之后呈现内容,然后在链接的CSS提取后更新页面。您可以使用<link>
使其更像Safari / Edge(脚本标记之间的空格是必需的。
Chrome会在发现<link … ><script> </script>
时阻止呈现,这意味着它也可能会阻止链接元素之前的内容。计划是与Safari&amp; amp;边缘https://bugs.chromium.org/p/chromium/issues/detail?id=481122。
如果您发现自己的CSS提取得太晚,可以使用<link>
更快地加载它。
答案 2 :(得分:1)
如果你在global.css中提供img{width:100px;}
而在特定组件css中提供img{width:150px;}
,在这种情况下,工作特定于component.css,因为他在global.css之后渲染并覆盖全局。的CSS。
如果你在global.css中提供img{width:100px !important;}
而在特定组件css中提供img{width:150px;}
,在这种情况下工作global.css,因为我们在global.css中设置了img width重要而它没有由specific-component.css覆盖。
如果你在两者中都很重要,那么就可以使用特定的component.css。 并且css引擎总是先编译特定的component.css。(查看inspect元素)
答案 3 :(得分:0)