CSS 基础:层叠、优先级与继承

news/2025/2/2 20:56:09 标签: css, 前端

CSS 基础:层叠、优先级与继承

    • 一、层叠(Cascade)
      • 示例:层叠的顺序
    • 二、优先级(Specificity)
      • 优先级规则
      • 示例:优先级的比较
    • 三、继承(Inheritance)
      • 哪些属性会被继承?
      • 示例:继承的效果
    • 四、控制继承
      • 示例:控制继承
    • 五、优先级的计算
      • 示例:优先级的计算
    • 六、内联样式与 `!important`
      • 示例:`!important` 的使用
    • 七、总结

在学习 CSS 的过程中,层叠、优先级和继承是三个非常重要的概念。它们决定了 CSS 样式如何被应用到 HTML 元素上,以及如何处理样式冲突。本文将通过通俗易懂的语言和实际示例,帮助你理解这些概念。


一、层叠(Cascade)

层叠是 CSS 的核心概念之一。简单来说,层叠指的是 CSS 样式规则的顺序会影响最终的样式效果。当多个规则应用于同一个元素时,最后定义的规则会覆盖前面的规则。

示例:层叠的顺序

<h1>这是我的标题。</h1>
css">h1 {
  color: red;
}
h1 {
  color: blue;
}

在这个示例中,<h1> 元素的文本颜色会显示为蓝色,因为后面的规则覆盖了前面的规则。


二、优先级(Specificity)

当多个规则应用于同一个元素时,优先级决定了哪个规则会被应用。优先级由选择器的“具体程度”决定,具体程度越高,优先级就越高。

优先级规则

  1. ID 选择器 > 类选择器 > 元素选择器
  2. 组合选择器(如 div p)的优先级高于单个选择器(如 p
  3. 内联样式(style 属性)的优先级最高

示例:优先级的比较

<h1 class="main-heading">这是我的标题。</h1>
css">.main-heading {
  color: red;
}

h1 {
  color: blue;
}

在这个示例中,.main-heading 是类选择器,优先级高于元素选择器 h1,所以文本颜色会显示为红色。


三、继承(Inheritance)

继承是指某些 CSS 属性会从父元素传递到子元素。继承可以减少重复代码,但需要注意并不是所有属性都会被继承。

哪些属性会被继承?

  • 会被继承的属性colorfont-familyfont-size
  • 不会被继承的属性widthheightmarginpadding

示例:继承的效果

<ul>
  <li>项目 1</li>
  <li>
    项目 2
    <ul>
      <li>2.1</li>
      <li>2.2</li>
    </ul>
  </li>
</ul>
css">ul {
  color: blue;
  font-size: 20px;
}

在这个示例中,所有 <li> 元素的文本颜色和字体大小都会继承自父元素 <ul>


四、控制继承

CSS 提供了一些特殊值来控制继承行为:

  • inherit:显式地继承父元素的属性值
  • initial:将属性值设置为初始值
  • unset:如果属性可以继承,则使用父元素的值;否则使用初始值
  • revert:将属性值重置为浏览器默认值

示例:控制继承

<ul>
  <li>默认颜色</li>
  <li class="inherit">继承颜色</li>
  <li class="initial">初始颜色</li>
  <li class="unset">取消设置</li>
</ul>
css">ul {
  color: green;
}

.inherit {
  color: inherit;
}

.initial {
  color: initial;
}

.unset {
  color: unset;
}

在这个示例中:

  • .inherit 会继承父元素的绿色
  • .initial 会使用初始颜色(黑色)
  • .unset 会继承父元素的绿色

五、优先级的计算

优先级由三个部分组成,按重要性排序如下:

  1. ID 选择器:每个 ID 选择器得 1 分
  2. 类选择器:每个类选择器、属性选择器或伪类得 1 分
  3. 元素选择器:每个元素选择器或伪元素得 1 分

示例:优先级的计算

<div class="container" id="outer">
  <div class="container" id="inner">
    <ul>
      <li class="nav"><a href="#"></a></li>
      <li class="nav"><a href="#"></a></li>
    </ul>
  </div>
</div>
css">/* 优先级:1-0-1 */
#outer a {
  background-color: red;
}

/* 优先级:2-0-1 */
#outer #inner a {
  background-color: blue;
}

在这个示例中,#outer #inner a 的优先级高于 #outer a,因为前者有两个 ID 选择器。


六、内联样式与 !important

  • 内联样式:直接在 HTML 元素上定义的样式,优先级最高。
  • !important:可以强制覆盖所有样式,但应谨慎使用。

示例:!important 的使用

<p class="better">这是个段落。</p>
<p class="better" id="winning">一个选择器掌管一切!</p>
css">#winning {
  background-color: red;
  border: 1px solid black;
}

.better {
  background-color: gray;
  border: none !important;
}

在这个示例中,.betterborder: none !important 会覆盖 #winningborder: 1px solid black


七、总结

  • 层叠:样式规则的顺序会影响最终效果。
  • 优先级:选择器的“具体程度”决定了优先级。
  • 继承:某些属性会从父元素传递到子元素。

理解这些概念可以帮助你更好地控制 CSS 样式,避免样式冲突和意外效果。


http://www.niftyadmin.cn/n/5840293.html

相关文章

C++哈希(链地址法)(二)详解

文章目录 1.开放地址法1.1key不能取模的问题1.1.1将字符串转为整型1.1.2将日期类转为整型 2.哈希函数2.1乘法散列法&#xff08;了解&#xff09;2.2全域散列法&#xff08;了解&#xff09; 3.处理哈希冲突3.1线性探测&#xff08;挨着找&#xff09;3.2二次探测&#xff08;跳…

HTB:Administrator[WriteUP]

目录 连接至HTB服务器并启动靶机 信息收集 使用rustscan对靶机TCP端口进行开放扫描 将靶机TCP开放端口号提取并保存 使用nmap对靶机TCP开放端口进行脚本、服务扫描 使用nmap对靶机TCP开放端口进行漏洞、系统扫描 使用nmap对靶机常用UDP端口进行开放扫描 使用nmap对靶机…

11.网络编程的基础知识

11.网络编程的基础知识 **1. OSI模型与TCP/IP模型****2. IP地址分类****3. Socket编程****4. TCP三次握手与四次挥手****5. 常用网络测试工具****6. 练习与作业****7. 总结** 1. OSI模型与TCP/IP模型 OSI模型&#xff08;开放系统互联模型&#xff09;&#xff1a; 7层结构&am…

第十章:大内存的申请和释放

目录 第一节&#xff1a;函数修改 1-1.ConcurrentAlloc.h 1-2.Common.h 1-3.PageCache.cpp 第二节&#xff1a;测试 第三节&#xff1a;结语 大内存的思路是将其以一页为对齐数&#xff0c;申请一个为切分的span&#xff0c;这种span在pc就有&#xff0c;所以直接到pc中申请…

一文讲解Java中的ArrayList和LinkedList

ArrayList和LinkedList有什么区别&#xff1f; ArrayList 是基于数组实现的&#xff0c;LinkedList 是基于链表实现的。 二者用途有什么不同&#xff1f; 多数情况下&#xff0c;ArrayList更利于查找&#xff0c;LinkedList更利于增删 由于 ArrayList 是基于数组实现的&#…

【Linux】opencv在arm64上提示找不到libjasper-dev

解决opencv在arm64上提示找不到libjasper-dev的问题。 本文首发于❄慕雪的寒舍 问题说明 最近我在尝试编译opencv&#xff0c;安装依赖项libjasper1和libjasper-dev的时候就遇到了这个问题。在amd64平台上&#xff0c;我们可以通过下面的命令安装&#xff08;ubuntu18.04&…

FreeRTOS学习笔记2:FreeRTOS的基础知识

1.FreeRTOS介绍 FreeRTOS是一个免费的嵌入式实时操作系统&#xff0c;同时它在市面上也是一款主流的操作系统&#xff0c;是工作上必不可少的技能。它具有以下六种特点&#xff1a; 1.免费开源&#xff1a;在商业产品中使用&#xff0c;无潜在商业风险&#xff0c;无需担心。 2…

NIST的 临床质量指标的简介

啥是NIST&#xff1f; 美国国家标准与技术研究院&#xff08;National Institute of Standards and Technology&#xff0c;NIST&#xff09;直属美国商务部&#xff0c;从事物理、生物和工程方面的基础和应用研究&#xff0c;以及测量技术和测试方法方面的研究&#xff0c;提…