Menu

内联 CSS:style 属性与引入 CSS 的 3 种方式

内联 CSS 用 style 属性把声明直接写在元素上。本文讲解它的语法、什么时候适合使用内联样式、它为什么能胜过样式表,以及它与内部 CSS 和外部 CSS 的对比。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

什么是内联 CSS

内联 CSS 是用 style 属性直接写在 HTML 元素上的 CSS。它的值是一串声明(property: value;),只作用于这个元素。

没有选择器,也没有花括号:属性所在的元素就是目标。声明之间用分号分隔。最后一个分号可以省略,但保留它,以后添加下一条声明时更不容易出错。

语法

<element style="property: value; property: value;">
部分示例说明
属性style="..."全局属性:所有 HTML 元素都可以使用
声明color: #2563eb;语法与样式表规则内部相同
多条声明padding: 8px; border: 1px solid #e5e7eb;用 ; 分隔
内部的引号style="font-family: 'Courier New', monospace;"在双引号属性里面使用单引号

不是声明的内容都不允许写。:hover、::before、@media 和选择器都不能出现在 style 属性里。

在 HTML 中引入 CSS 的 3 种方式

CSS 可以通过三种方式进入页面。本页讲第一种;外部和内部 CSS 有单独的一页。

方式CSS 写在哪里作用范围典型用途
内联某个元素的 style 属性该元素一次性的值,由 JavaScript 设置的值
内部页面中的 <style> 元素该页面单页演示、邮件模板、关键 CSS
外部用 <link> 链接的 .css 文件所有链接它的页面给整个网站设置样式

用三种方式给同一段落设置样式(外部文件以注释的形式展示,因为预览中没有第二个文件可以加载):

第三个段落保留了 .note 规则中的内边距和圆角,只替换了背景,因为内联样式只设置了这一个属性。

内联样式为什么会胜出

当样式表规则和内联样式设置同一个属性时,内联样式胜出。选择器有多具体都没关系:即使是 ID 选择器也会输。

唯一的例外是 !important。样式表中标记了 !important 的声明胜过普通的内联声明,而内联的 !important 又胜过这两者。这正是内联样式让网站难以维护的原因:要从样式表中修改它们,就得用 !important,于是开始层层升级。完整的顺序见 !important 一页。

什么时候适合用内联 CSS

当值是数据而不是设计时,内联样式很合适:它因元素而异,由模板或 JavaScript 写入。

外观(颜色、高度、圆角)写在样式表里,只有每个进度条都不同的宽度是内联的。JavaScript 通过 element.style 写入的也是同一个属性:

点击之后,段落的 HTML 会变成 style="color: rgb(245, 158, 11); font-weight: bold;"。带连字符的属性名在 JavaScript 中要写成驼峰形式(font-weight 写作 fontWeight)。

CSS 变量往往是最干净的折中方案:只在内联中设置变量,style="--progress: 35%",再让样式表去使用它。参见 CSS 变量。

内联 CSS 的不足

  • 没有状态和伪元素。 在 style 属性中不能写 :hover、:focus 或 ::before。
  • 没有媒体查询。 内联的宽度无法在手机上改变。
  • 重复。 十个按钮使用同样的内联样式,就意味着有十个地方要改。
  • 难以覆盖。 只有样式表中的 !important 能胜过它。
  • 内容安全策略(CSP)。 如果严格的 CSP 在 style-src 中没有 'unsafe-inline',就会阻止 HTML 中写的 style 属性。

常见错误

  • 在 style 里写选择器或花括号。 style="p { color: red }" 会被忽略。里面只能写声明。
  • 用 = 代替 :。 应该是 color: red,而不是 color=red。
  • 嵌套双引号。 style="font-family: "Arial"" 会让属性提前结束。里面请用单引号。
  • 忘了写单位。 style="width: 200" 会被忽略;要写成 200px。只有长度为 0 时可以省略单位。
  • 整个网站都用内联样式。 把重复的样式移到样式表中的一个类里,内联样式只留给因元素而异的值。

常见问题

内联 CSS 是什么?

内联 CSS 是写在元素 style 属性里的 CSS,比如 <p style="color: red;">。这些声明只作用于这一个元素,不需要选择器。

在 HTML 中引入 CSS 有哪 3 种方式?

内联:在元素上使用 style 属性;内部:在页面中使用 <style> 元素;外部:在 <head> 中用 <link rel="stylesheet" href="styles.css"> 链接一个单独的 .css 文件。整个网站通常都使用外部文件。

内联 CSS 会覆盖外部 CSS 吗?

大多数情况下会。style 属性中的声明胜过样式表中的任何选择器,无论其优先级多高。样式表唯一能胜出的办法是用 !important,而内联的 !important 又能胜过它。

使用内联 CSS 是不好的做法吗?

用来给整个网站设置样式的话,是的:它到处重复,不能使用 :hover 或媒体查询,而且很难覆盖。对于由 JavaScript 或模板设置的一次性值,比如进度条的宽度或用户选择的颜色,用它就没问题。

内联 CSS 里能用 hover 吗?

不能。style 属性只接受声明,所以 :hover 这样的伪类、::before 这样的伪元素以及 @media 规则都不能写在里面。请把它们放进 <style> 元素或样式表里。

Coddy 编程语言插图

和 Coddy 一起学编程

开始