0

0

CSS属性的层叠性原则_理解样式是如何被逐层覆盖的

P粉602998670

P粉602998670

发布时间:2026-02-14 13:29:02

|

567人浏览过

|

来源于php中文网

原创

层叠顺序由层叠起源、优先级和源顺序共同决定,并非“后来者居上”;内联样式因层叠起源更高而看似“无敌”,同选择器内重复声明以最后出现的为准。

css属性的层叠性原则_理解样式是如何被逐层覆盖的

层叠顺序不是“后来者居上”

很多人以为后面写的 CSS 规则一定覆盖前面的,其实不是。浏览器判断哪条样式生效,靠的是「层叠顺序(cascade origin) + 优先级(specificity) + 源顺序(source order)」三者共同决定,其中 specificity(选择器权重)经常压倒后写的规则。

  • !important 会提升声明的层叠层级,但只对同源样式生效;内联样式中的 !important 仍可能被更高层(如用户样式表)覆盖
  • 浏览器默认样式(user agent stylesheet)优先级最低,作者样式(你写的 CSS)中,style 属性 > ID 选择器 > 类/属性/伪类 > 元素/伪元素
  • 两个相同 specificity 的规则,才看谁写在后面;比如 .btn[type="button"] 权重都是 0,1,0,这时后定义的胜出

内联样式为什么看起来“无敌”

因为它的层叠起源(origin)属于“inline styles”,天然高于外部样式表和 <style></style> 块。它不靠 specificity 赢,而是靠 cascade 层级更高。

  • JS 动态设置 element.style.color = "red",等价于写了 style="color: red",直接跳过选择器匹配流程
  • getComputedStyle() 能读到最终生效值,但 element.style.color 只返回内联值,哪怕被其他规则覆盖了也显示空字符串
  • 想用 JS 覆盖内联样式?得用 element.style.setProperty("color", "blue", "important"),否则普通 set 不敌已有的内联声明

同一选择器里多个声明的覆盖逻辑

同一个 CSS 规则块内部,重复声明同名属性时,**最后出现的那个生效**,且不涉及 specificity 或 origin 判断——这是最简单的覆盖场景。

Lovable
Lovable

AI辅助编程工具

下载
  • color: red; color: blue; → 最终是 blue
  • color: red !important; color: blue; → 还是 red,因为 !important 在本规则内就已锁定该声明
  • 注意:CSS 自定义属性(--main-color)也遵循此规则,但它们只是变量,不直接渲染,真正起作用的是引用它们的地方

@import 和 link 加载顺序影响层叠吗

影响,而且容易被忽略。@import 是 CSS 内部语句,它引入的样式表会被当作“当前样式表的一部分”,其规则插入位置取决于 @import 出现的位置,而不是文件物理加载完成时间。

立即学习前端免费学习笔记(深入)”;

  • 写在 <style></style> 开头的 @import url("a.css");,相当于把 a.css 的全部内容复制粘贴到此处;它比后面写的本地规则权重低(因 source order 靠前)
  • 多个 @import 之间按书写顺序层叠,但所有 @import 都低于后续同文件中的普通规则
  • 现代项目尽量避免 @import,尤其在 CSS 文件中嵌套 import,会导致阻塞渲染、无法并行加载,还让开发者误判层叠关系

真正难的不是记住规则,而是当一个颜色没变、一个 margin 没生效时,你得立刻想到打开开发者工具的 computed 标签页,看那条被划掉的样式旁边写着 “crossed out by …”,然后点进去找源头——那里往往藏着一个没注意到的 :is()、一个继承来的 color,或者一个从 shadow DOM 外透进来的变量。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

531

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

214

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1552

2023.10.24

字符串介绍
字符串介绍

字符串是一种数据类型,它可以是任何文本,包括字母、数字、符号等。字符串可以由不同的字符组成,例如空格、标点符号、数字等。在编程中,字符串通常用引号括起来,如单引号、双引号或反引号。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

640

2023.11.24

java读取文件转成字符串的方法
java读取文件转成字符串的方法

Java8引入了新的文件I/O API,使用java.nio.file.Files类读取文件内容更加方便。对于较旧版本的Java,可以使用java.io.FileReader和java.io.BufferedReader来读取文件。在这些方法中,你需要将文件路径替换为你的实际文件路径,并且可能需要处理可能的IOException异常。想了解更多java的相关内容,可以阅读本专题下面的文章。

885

2024.03.22

php中定义字符串的方式
php中定义字符串的方式

php中定义字符串的方式:单引号;双引号;heredoc语法等等。想了解更多字符串的相关内容,可以阅读本专题下面的文章。

835

2024.04.29

go语言字符串相关教程
go语言字符串相关教程

本专题整合了go语言字符串相关教程,阅读专题下面的文章了解更多详细内容。

185

2025.07.29

c++字符串相关教程
c++字符串相关教程

本专题整合了c++字符串相关教程,阅读专题下面的文章了解更多详细内容。

89

2025.08.07

pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法
pixiv网页版官网登录与阅读指南_pixiv官网直达入口与在线访问方法

本专题系统整理pixiv网页版官网入口及登录访问方式,涵盖官网登录页面直达路径、在线阅读入口及快速进入方法说明,帮助用户高效找到pixiv官方网站,实现便捷、安全的网页端浏览与账号登录体验。

23

2026.02.13

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.9万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.3万人学习

CSS教程
CSS教程

共754课时 | 31.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号