在线CSS有什么坏处?

Che*_*hiz 163 css inline-styles

当我看到网站入门代码和示例时,CSS总是在一个单独的文件中,名称类似于"main.css","default.css"或"Site.css".但是,当我编写一个页面时,我经常试图将CSS与DOM元素内联,例如在图像上设置"float:right".我觉得这是"糟糕的编码",因为在例子中很少这样做.

我知道如果样式将应用于多个对象,那么遵循"不要重复自己"(DRY)并将其分配给每个元素引用的CSS类是明智的.但是,如果我不在另一个元素上重复CSS,为什么不在编写HTML时内联CSS呢?

问题:使用内嵌CSS被认为是坏的,即使它只会用在那个元素上?如果是这样,为什么?

示例(这很糟糕吗?):

<img src="myimage.gif" style="float:right" />
Run Code Online (Sandbox Code Playgroud)

Dav*_*vid 201

当您想要使网站看起来不同时,必须更改100行代码.这可能不适用于您的示例,但如果您使用内联css等

<div style ="font-size:larger; text-align:center; font-weight:bold">
Run Code Online (Sandbox Code Playgroud)

在每个页面上表示页眉,它将更容易维护

<div class="pageheader">  
Run Code Online (Sandbox Code Playgroud)

如果在单个样式表中定义了页眉,那么如果要更改页眉在整个站点中的显示方式,可以在一个位置更改css.

但是,我会成为一个异教徒,并说在你的例子中,我认为没有问题.您的目标是单个图像的行为,可能必须在单个页面上查看,因此将实际的css放在样式表中可能会有点过分.

  • 你说我的例子不是问题,但你也承认你是一个异教徒.我喜欢这种方法. (18认同)
  • 另一种情况是,它不仅可以使用内联样式,而且是设计任何内容的唯一方法:HTML电子邮件. (8认同)
  • 如果我每次必须修改一个图像的浮动或其他一些原本将"仅仅用于一个元素"的CSS,我就有镍......好吧,我出去吃晚饭了在一个不错的餐厅. (6认同)
  • 我想知道在当今 HTML 作为汇编语言的世界中这是否仍然成立? (2认同)

vij*_*had 65

拥有不同的css文件的优点是

  1. 易于维护您的HTML页面
  2. 更改外观将非常简单,您可以在页面上支持许多主题.
  3. 您的css文件将在浏览器端缓存.因此,每次刷新页面或用户浏览您的网站时,您都不会加载一些kbs的数据,从而为互联网流量做出贡献.

  • +1是唯一一个(到目前为止)提到缓存的人. (31认同)
  • 我每个月都会问自己这个问题(对 Web 编程相当陌生),这是我第一次阅读有关缓存 css 文件的任何内容。这对我来说就在那里! (2认同)

Kzq*_*qai 25

html5快速css原型的方法

或者:<style>标签不再只是头部了!

黑客攻击CSS

假设您正在调试,并希望修改您的page-css,使某个部分看起来更好.不是以快速,肮脏和不可维护的方式创建你的样式,你可以做我现在做的事情并采取分阶段的方法.

没有内联样式属性

永远不要创建你的css内联,我的意思是: <element style='color:red'>甚至<img style='float:right'>它非常方便,但是后来在真实的css文件中没有反映实际的选择器特异性,如果你保留它,你会后悔维护负载.

<style>相反的原型

您将使用内联css的位置,而是使用页内<style> 元素.试试吧!它适用于所有浏览器,因此非常适合测试,但允许您在需要时随时将此类css优先移动到全局css文件中!(*只要知道选择器只有页面级别的特异性,而不是站点级别的特异性,所以要小心过于笼统)就像你的css文件一样干净:

<style>
.avatar-image{
    float:right
}
.faq .warning{
    color:crimson;
}
p{
    border-left:thin medium blue;
    // this general of a selector would be very bad, though.
    // so be aware of what'll happen to general selectors if they go
    // global
}
</style>
Run Code Online (Sandbox Code Playgroud)

重构其他人的内联css

有时你甚至不是问题,而且你正在处理别人的内联css,你必须重构它.这是页面的另一个很好的用途<style>,因此您可以直接剥离内联css并在重构时立即将它放在类或id或选择器的页面上.如果您对选择器的使用非常谨慎,那么您可以将最终结果移动到最后的全局css文件,只需复制和粘贴即可.

一位css立即转移到全局css文件有点困难,但是对于页内<style>元素,我们现在有了替代方案.


Dan*_*eld 20

除了其他答案...... 国际化.

根据内容的语言 - 您经常需要调整元素的样式.

一个明显的例子是从右到左的语言.

假设你使用了你的代码:

<img src="myimage.gif" style="float:right" />
Run Code Online (Sandbox Code Playgroud)

现在说你希望你的网站支持rtl语言 - 你需要:

<img src="myimage.gif" style="float:left" />
Run Code Online (Sandbox Code Playgroud)

所以现在,如果你想支持这两种语言,就无法使用内联样式为float赋值.

使用CSS,可以使用lang属性轻松处理

所以你可以这样做:

img {
  float:right;
}
html[lang="he"] img { /* Hebrew. or.. lang="ar" for Arabic etc */
  float:left;
}
Run Code Online (Sandbox Code Playgroud)

演示


iss*_*eng 16

内联CSS将始终优先于任何链接样式表CSS.如果您去写一个正确的级联样式表,并且您的属性未正确应用,这可能会给您带来巨大的麻烦.

它还会在语义上损害您的应用程序:CSS是关于将表示与标记分离.当你把两者纠缠在一起时,事情变得更加难以理解和维护.这与将数据库代码与服务器端的控制器代码分离的原理类似.

最后,假设您有20个图像标记.当你决定将它们漂浮在左边时会发生什么?

  • "总是,总是赢" - 除非!样式表中使用了重要内容 (12认同)
  • 我生活在假设人们是人道的并且不使用这种怪物的假设下.=) (6认同)
  • @JamesWestgate直到有人在内联css中使用!important来覆盖覆盖.... (3认同)

Syl*_*ain 11

使用内联CSS更难维护.

对于您想要更改的每个属性,使用内联CSS要求您查找相应的HTML代码,而不是只查看明确定义且希望结构良好的CSS文件.

  • +1 - 当我们的设计师将其作为快速修复时,我真的很抱怨,只是为了得到一些排队的东西.使用外部CSS应该意味着永远不必进行大规模的文本替换,除非当然在单个样式表上操作.我昨天向我发布了一个控制面板模板,花了2个半小时才找到使用内联样式调整图标的实例.疯了我告诉你..疯了:) (3认同)

小智 11

CSS的重点是将内容与其表示分开.因此,在您的示例中,您将内容与演示文稿混合在一起,这可能会"被视为有害".

  • 我会向你支付5美元,向ACM提交"内联CSS样式被认为有害". (6认同)

Bru*_*ich 8

这仅适用于手写代码.如果你生成代码,我认为在这里使用内联样式是可以的,特别是在元素和控件需要特殊处理的情况下.

DRY是手写代码的一个很好的概念,但在机器生成的代码中,我选择"Demeter法则":"什么属于一起,必须保持在一起".操作生成Style标签的代码比在另一个"远程"CSS文件中第二次编辑全局样式更容易.

你问题的答案:这取决于......

  • 我认为这确实是正确的答案."关注点分离"的口号只是一个标准."地方"对于易于维护也很重要.关键方面是风格是否可以在语义层面重复使用,而不仅仅是合成.如果是这种情况,那么表格是有道理的.例如,我不会因为两个元素使用它而为"float:right"创建一个类.它依赖于语义上相同的元素."颜色"样式通常与语义相关(主题的一部分),通常会在一张纸上. (5认同)

小智 8

除了其他答案之外,另一个问题是它违反了 MDN 推荐的内容安全策略,https://infosec.mozilla.org/guidelines/web_security#content-security-policy

他们使用的理由是内联javascript是有害的、XSS 等,但这并不能证明为什么内联样式也应该被禁用。也许有人可以评论为什么,但在那之前,我只会依赖权威并声称:这是避免内联样式的安全最佳实践。


小智 6

按照你喜欢的方式编码,但如果你将其传递给其他人,最好使用其他人所做的。有 CSS 的原因,还有内联的原因。我两者都用,因为这对我来说更容易。当你有很多相同的重复时,使用 CSS 是很棒的。然而,当你有一堆具有不同属性的不同元素时,这就成了一个问题。对我来说,一个例子是当我在页面上定位元素时。每个元素都有不同的 top 和 left 属性。如果我把所有这些都放在 CSS 中,那真的会让我在 html 和 css 页面之间来回混乱。因此,当您希望所有内容都具有相同的字体、颜色、悬停效果等时,CSS 非常有用。但是当所有内容都有不同的位置时,为每个元素添加 CSS 实例确实很痛苦。但这只是我的意见。当您必须深入研究代码时,CSS 在大型应用程序中确实具有很大的相关性。使用 Mozilla Web 开发人员插件,它将帮助您找到元素 ID 和类。


Ash*_*pta 5

我认为,即使您希望为一个元素使用某种样式,也必须考虑是否可能要在不同页面的同一元素上应用相同样式。

一天,有人可能会要求更改或在每个页面上的同一元素上添加更多的样式更改。如果您在外部CSS文件中定义了样式,则只需在其中进行更改,并将其反映在所有页面的同一元素中,从而省去您的麻烦。:-)