[前端笔记——CSS] 10.层叠与继承+选择器

news2024/9/24 19:25:16

[前端笔记——CSS] 10.层叠与继承+选择器

  • 1.层叠与继承
    • 1.1 冲突规则
    • 1.2 继承
    • 1.3 层叠
    • 1.4 CSS位置的影响
  • 2.选择器
    • 2.1 选择器是什么?
    • 2.2 选择器列表
    • 2.3 选择器的种类
      • 类型、类和 ID 选择器
      • 标签属性选择器
      • 伪类与伪元素
      • 运算符
      • 选择器参考表

1.层叠与继承

1.1 冲突规则

CSS 代表层叠样式表(Cascading Style Sheets),层叠的表现方式是理解 CSS 的关键。与层叠密切相关的概念是优先级(specificity),决定在发生冲突的时候应该使用哪条规则。

样式表层叠——简单的说,就是 CSS 规则的顺序很重要;当应用两条同级别的规则到一个元素的时候,写在后面的就是实际使用的规则。

优先级
浏览器是根据优先级来决定当多个规则有不同选择器对应相同的元素的时候需要使用哪个规则。它基本上是一个衡量选择器具体选择哪些区域的尺度:

  • 一个元素选择器不是很具体,则会选择页面上该类型的所有元素,所以它的优先级就会低一些。
  • 一个类选择器稍微具体点,则会选择该页面中有特定 class 属性值的元素,所以它的优先级就要高一点。

继承——一些设置在父元素上的 CSS 属性是可以被子元素继承的,有些则不能。

这三个概念一起来控制 CSS 规则应用于哪个元素。

1.2 继承

CSS 为控制继承提供了五个特殊的通用属性值。每个 CSS 属性都接收这些值。
inherit

设置该属性会使子元素属性和父元素相同。实际上,就是“开启继承”。

initial

将应用于选定元素的属性值设置为该属性的初始值。

revert(en-US)

将应用于选定元素的属性值重置为浏览器的默认样式,而不是应用于该属性的默认值。在许多情况下,此值的作用类似于 unset。

revert-layer(en-US)

将应用于选定元素的属性值重置为在上一个层叠层中建立的值。

unset

将属性重置为自然值,也就是如果属性是自然继承那么就是 inherit,否则和 initial 一样。

CSS 的简写属性 all 可以用于同时将这些继承值中的一个应用于(几乎)所有属性。它的值可以是其中任意一个(inherit、initial、unset 或 revert)。这是一种撤销对样式所做更改的简便方法,以便回到之前已知的起点。

可以试着实现下面的例子:

<!DOCTYPE html>
<head>
<title>继承</title>
<link rel="stylesheet" href="jicheng.css">
</head>

<body>
 <ul class="main">
    <li>Item One</li>
    <li>Item Two</li>
    <ul>
        <li>2.1</li>
        <li>2.2</li>
    </ul>
    <li>Item three</li>
        <ul class="special">
            <li>3.1</li>
            <ul>
                <li>3.1.1</li>
                <li>3.1.2</li>
            </ul>
            <li>3.2</li>
        </ul>
 </ul>

 <ul>
    <li>Default <a href="#">link</a>color</li>
    <li class="my-class-1">Inherit the <a href="#">link</a>color</li>
    <li class="my-class-2">Reset the <a href="#">link</a>color</li>
    <li class="my-class-3">Unset the <a href="#">link</a>color</li>
</ul>
<blockquote>
    <p>this blockquote is styled</p>
</blockquote>

<blockquote class="fix-this">
    <p>this blockquote is not styled</p>
</blockquote>
</body>
.main{
    color: rebeccapurple;
    border: 2px solid #ccc;
    padding: 1em;
}
.special{
    color: black;
    font-weight: bold;
}

body{
    color: green;
}
.my-class-1 a {
    color: inherit;
}
.my-class-2 a {
    color: initial;
}
.my-class-3 a {
    color: unset;
}

blockquote{
    background-color: red;
    border:2px solid green;
}
.fix-this{
    all:unset;
}

1.3 层叠

层叠如何定义在不止一个元素的时候怎么应用 CSS 规则?
有三个因素需要考虑,根据重要性排序如下,后面的更重要:

1.资源顺序
后面的规则覆盖前面的规则,直到最后一个开始设置样式。资源顺序仅在规则的优先级相同时才体现出来。
2.优先级
不同类型的选择器有不同的分数值。一个选择器的优先级可以说是由三个不同的值(或分量)相加,可以认为是百(ID)十(类)个(元素)——三位数的三个位数:

  • ID:选择器中包含 ID 选择器则百位得一分。
  • 类:选择器中包含类选择器、属性选择器或者伪类则十位得一分。
  • 元素:选择器中包含元素、伪元素选择器则个位得一分。

类选择器的权重大于元素选择器,因此类上定义的属性将覆盖应用于元素上的属性。

内联样式,即 style 属性内的样式声明,优先于所有普通的样式,无论其优先级如何。这样的声明没有选择器,但它们的优先级可以理解为 1-0-0-0;即无论选择器中有多少个 ID,它总是比其它任何优先级的权重都要高。

有一个特殊的 CSS 可以用来覆盖所有上面所有优先级计算,不过需要很小心的使用——!important。用于修改特定属性的值,能够覆盖普通规则的层叠。在一种情况下,可能不得不使用它:当我们不能编辑核心的 CSS 模块,不能用任何其他方式覆盖,而又真的想要覆盖一个样式时。可以研究下面代码学习一下:

<!DOCTYPE html>
<head>
<title>继承</title>
<link rel="stylesheet" href="cengdie.css">
</head>

<body>


<h2>Heading with no class</h2>
<h2 class="small">Heading with class of small</h2>
<h2 class="bright">Heading with class of bright</h2>

<div id="outer" class="container">
    <div id="inner" class="container">
        <ul>
            <li class="nav"><a href="#">One</a></li>
            <li class="nav"><a href="#">Two</a></li>
        </ul>
    </div>
</div>
<p class="better">This is a paragraph</p>
<p class="better" id="winning">One selector to rule them all!</p>
</body>
h2{
    font-size: 2em;
    color: #000;
    font-family: Georgia, 'Times New Roman', Times, serif;
}
.small{
    font-size: 1em;
}
.bright{
    color: rebeccapurple;
}

/*1.specificity:1-0-1 */
#outer a {
    background-color: red;
}

/*2.speciticity:2-0-1 */
#outer #inner a {
    background-color: blue;
}

/*3.specificity:1-0-4*/
#outer div ul li a {
    color:yellow;
}
/*4.specificity:1-1-3*/
#outer div ul .nav a {
    color:white;
}

/*5.specificity:0-2-4*/
div div li:nth-child(2) a:hover {
    border: 10px solid black;
}

/*6.specificity:0-2-3*/
div li:nth-child(2) a:hover{
    border: 10px dashed black;
}

/*7.specificity:0-3-3*/
div div .nav:nth-child(2) a:hover{
    border:10px double black;
}

a {
    display: inline-block;
    line-height: 40px;
    font-size:20px;
    text-decoration: none;
    text-align: center;
    width: 200px;
    margin-bottom:10px;
}

ul{
    padding:0;
}

li{
    list-style-type: none;
}

# winning {
    background-color: red;
    border: 1px solid black;
}
.better{
    background-color: gray;
    border: none !important;
}

p{
    background-color: blue;
    color: white;
    padding: 5px;
}

3.重要程度

1.4 CSS位置的影响

CSS 声明的优先级取决于定义它的样式表和级联层。

它让用户可以设置自定义样式表来覆盖开发人员定义的样式,也可以在级联层中声明开发人员定义的样式:可以让非分层样式覆盖分层样式,或者可以让后面的层中声明的样式覆盖先前的层中声明的样式。
覆盖声明的顺序:
相互冲突的声明将按以下顺序应用,后一种声明将覆盖前一种声明:

  1. 用户代理样式表中的声明(例如,浏览器的默认样式,在没有设置其他样式时使用)。
  2. 用户样式表中的常规声明(由用户设置的自定义样式)。
  3. 作者样式表中的常规声明(这些是web 开发人员设置的样式)。
  4. 作者样式表中的 !important 声明
  5. 用户样式表中的 !important 声明
  6. 用户代理样式表中的 !important 声明

注意,标记为 !important 的样式的优先级顺序是颠倒的。

级联层的顺序:
在级联层中声明 CSS 时,优先级的顺序由声明层的顺序来决定。

在任何层之外声明的 CSS 样式会被按声明的顺序组合在一起,形成一个未命名的层,它会被当作最后声明的层。

对于存在冲突的常规(没有 !important 声明)样式,后面的层比先前定义的层的优先级高。

对于带有 !important 标记的样式,其顺序相反——先前的层中的 important 样式比后面的层以及为在层中声明的 important 样式优先级要高。

内联样式比所有作者定义的样式的优先级都要高,不受级联层规则的影响。
可以try 1 try下面的程序:

<p id="addSpecificity">A paragraph with a border and backgroud</p>
@layer firstLayer {
    #addSpecificity { /* 1-0-0 */
    background-color: blue;
    color: white;
    border-width: 5px;
    border-style: dashed !important;
    }
}

@layer secondLayer {
    p#addSpecificity { /* 1-0-1 */
    background-color: green;
    color: orange !important;
    border-width: 10px;
    border-style: dotted !important;
    }
}

2.选择器

2.1 选择器是什么?

CSS 选择器是 CSS 规则的第一部分。它是元素和其他部分组合起来告诉浏览器哪个 HTML 元素应当是被选为应用规则中的 CSS 属性值的方式。选择器所选择的元素,叫做“选择器的对象”。
在这里插入图片描述
CSS 中,选择器由 CSS 选择器规范加以定义。就像是 CSS 的其他部分那样,它们需要浏览器的支持才能工作。大多数选择器都是在CSS 3中定义的,这是一个成熟的规范,浏览器对这些选择器有良好的支持。

2.2 选择器列表

如果有多个使用相同样式的 CSS 选择器,那么这些单独的选择器可以被混编为一个“选择器列表”,这样,规则就可以应用到所有的单个选择器上了。例如,如果我的h1和.special类有相同的 CSS,那么我可以把它们写成两个分开的规则。

h1 {
	color:blue;
}
.special {
	color:blue;
}

也可以将它们组合起来,在它们之间加上一个逗号,变为选择器列表。

h1,.special {
	color:blue;
}

空格可以在逗号前或后,如果每个选择器都另起一行,会更好读些。

h1,
.special {
	color:blue;
}

当你使用选择器列表时,如果任何一个选择器无效 (存在语法错误),那么整条规则都会被忽略。
在下面的示例中,无效的 class 选择器会被忽略,而h1选择器仍会被样式化。

h1 {
  color: blue;
}

..special {
  color: blue;
}

但是在被组合起来以后,整个规则都会失效,无论是h1还是这个 class 都不会被样式化。

h1, ..special {
  color: blue;
}

2.3 选择器的种类

类型、类和 ID 选择器

这个选择器组,第一个是指向了所有 HTML 元素 <h1>

h1 { }

它也包含了一个 class 的选择器:

.box { }

亦或,一个 id 选择器:

.#unique { }

标签属性选择器

这组选择器根据一个元素上的某个标签的属性的存在以选择元素的不同方式:

a[title] { }

或者根据一个有特定值的标签属性是否存在来选择:

a[href="https://example.com"] { }

伪类与伪元素

这组选择器包含了伪类,用来样式化一个元素的特定状态。例如:hover伪类会在鼠标指针悬浮到一个元素上的时候选择这个元素:

a:hover { }

它还可以包含伪元素,选择一个元素的某个部分而不是元素自己。例如,::first-line是会选择一个元素(下面的情况中是<p>)中的第一行,类似<span>包在了第一个被格式化的行外面,然后选择这个<span>

p::first-line { }

运算符

最后一组选择器可以将其他选择器组合起来,更复杂的选择元素。下面的示例用运算符(>)选择了<article>元素的初代子元素。

article > p { }

选择器参考表

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/176242.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

动态规划(基础)

目录 一、算法思想 二、解题步骤 三、神奇的兔子序列 &#xff08;一&#xff09;问题 &#xff08;二&#xff09;递归公式 &#xff08;三&#xff09;以求解F(6)为例 &#xff08;四&#xff09;代码 四、01背包问题 &#xff08;一&#xff09;算法思想 &…

深入跨域问题(4) - 利用代理解决跨域

在上面的文章中&#xff0c;我们依此了解到&#xff0c;CORS &#xff0c;JSONP 两种方式实现跨域请求。 这两种方法&#xff0c;都需要 前后端进行配合 才能够正确地处理跨域问题。 今天介绍一种方法&#xff0c;不需要前后端配合&#xff0c;前端可独立完成。 众所周知&…

Java的基本语法格式

在编写JavaJavaJava代码过程中&#xff0c;必须先声明一个类&#xff0c;类使用class字眼定义&#xff0c;在class前面可以有一些修饰符&#xff1a; class的修饰符有&#xff1a; public&#xff0c;final(默认是default&#xff0c;只允许在同一包中进行访问) public&#xf…

C++STL-priority_queue的实现

大家好&#xff01;这篇文章&#xff0c;主要讲解一下这个优先级队列&#xff0c;还包含了仿函数等等的知识。希望大家能够一起加油&#xff01;&#xff01;&#xff01; 文章目录1. priority_queue的实现1.1 push函数1.2 pop函数1.3 top函数和empty函数2. 仿函数2.1 仿函数的…

【C进阶】模拟实现atoi函数

⭐博客主页&#xff1a;️CS semi主页 ⭐欢迎关注&#xff1a;点赞收藏留言 ⭐系列专栏&#xff1a;C语言进阶 ⭐代码仓库&#xff1a;C Advanced 家人们更新不易&#xff0c;你们的点赞和关注对我而言十分重要&#xff0c;友友们麻烦多多点赞&#xff0b;关注&#xff0c;你们…

day21-多线程

1.实现多线程 1.1简单了解多线程【理解】 是指从软件或者硬件上实现多个线程并发执行的技术。 具有多线程能力的计算机因有硬件支持而能够在同一时间执行多个线程&#xff0c;提升性能。 1.2并发和并行【理解】 并行&#xff1a;在同一时刻&#xff0c;有多个指令在多个CP…

【数据结构】双链表实现

双链表实现双链表LinkedList的使用ArrayList 和 LinkedList的区别双链表 双链表的结点其实就是在单链表结点的基础上多了一个存储前一个节点地址的域&#xff0c;例如&#xff1a; 接下来就实现双链表的各种操作&#xff0c;首先定义好双链表的结构&#xff1a; public class…

【经典算法】双指针(尺取法):爱,是双向奔赴,还是你追我赶?

&#x1f451;专栏内容&#xff1a;算法学习随笔⛪个人主页&#xff1a;子夜的星的主页&#x1f495;座右铭&#xff1a;日拱一卒&#xff0c;功不唐捐 目录一、前言二、左右指针&#xff08;双向奔赴&#xff09;1、定义2、回文检查三、快慢指针&#xff08;你追我赶&#xff…

将字符串代码编译为字节代码对象 compile()

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】将字符串代码编译为字节代码对象compile()[太阳]选择题关于以下python代码表述错误的一项是?sx1y2print("xy",xy)print("【显示】s&#xff1a;")print(s)print("【执…

fpga实操训练(一个典型的fpga系统)

【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing @163.com】 对于刚学习fpga的同学来说,很多人可能一开始并不了解,一个典型的fpga系统应该是什么样子的。今天正好来熟悉一下。此外,我们也可以通过这个系统,从另外一个角度学习下,为什么要…

【蓝桥杯】简单数论——快速幂矩阵快速幂

1、快速幂 1.1运算模 定义&#xff1a;模运算为a除以m的余数&#xff0c;记为a mod m&#xff0c;有a mod m a % m。 模运算是大数运算中的常用操作&#xff1a;如果一个数太大&#xff0c;无法直接输出&#xff0c;或者不需要直接输出&#xff0c;可以把它取模后&#xff…

2.4总线操作和定时

文章目录一、引子二、介绍1.总线周期2.总线定时规范三、同步定时方式1.过程2.特点3.优缺点①优点②缺点四、异步定时方式1.介绍2.三种方式&#xff08;1&#xff09;不互锁方式&#xff08;2&#xff09;半互锁方式&#xff08;3&#xff09;全互锁方式3.优缺点①优点②缺点五、…

Allegro如何统计包含过孔长度的网络长度操作指导

Allegro如何统计包含过孔长度的网络长度操作指导 当需要统计网络长度的时候,可以通过element选择nets看到网络的长度,但是当网络换层了,并且需要统计到过孔的长度,类似下图 Allegro可以快速的统计网络的长度,并且包含过孔的长度 具体操作如下 选择Setup选择Constraint –…

设计模式 - 六大设计原则之SRP(单一职责)

文章目录概述CaseBad ImplBetter Impl1. 定义接口2. 职责分离-多种实现类3. 单元测试小结概述 单一职责原则&#xff08;Single Responsibility Principle&#xff0c; SRP&#xff09;又称单一功能原则&#xff0c;是面向对象的五个基本原则&#xff08;SOLID&#xff09;之一…

2022这一年

前言 一年过得好快啊&#xff0c;这个年终总结不知道该写点啥&#xff0c;所以一直到现在也没动笔。 但如果不写吧&#xff0c;总感觉少了点什么。就像过年守夜&#xff0c;反正我是每年都要等到凌晨12点放完鞭炮后才睡。 前些天也看到不少博主发布了2022年终总结&#xff0c;…

【ARM体系结构】之相关概念与公司简介

1、ARM相关的概念 机器码&#xff1a;计算机可以识别的0和1的组合。即高低电平的信号&#xff0c;1高电平信号&#xff0c;0低电平信号 汇编指令&#xff1a;编译器可以将汇编指令&#xff08;存在代码段&#xff09;编译成为机器码&#xff0c;执行汇编指令可以完成相应的汇编…

【进击的算法】基础算法——动态规划

&#x1f37f;本文主题&#xff1a;动态规划 &#x1f388;更多算法&#xff1a;回溯算法 &#x1f495;我的主页&#xff1a;蓝色学者的主页 文章目录一、前言二、概念2.1概念一&#xff1a;状态转移2.2概念二&#xff1a;Dp数组三、例题3.1斐波那契数列3.1.1题目描述3.1.2状态…

JQUERY总结(四)

对象拷贝&#xff1a; <script src"jQuery.min.js"></script> <script>$(function(){// var targetObj{};// var obj{// id:0,// name:"xinyi",// location:"henan"// };// //覆盖以前的相同key值对应的数据// $.…

【自然语言处理】基于NLP的电影评论情感分析模型比较

基于NLP的电影评论情感分析模型比较一段时间以来&#xff0c;使用机器学习的 NLP 任务借助 BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;模型被认为是当前的黄金标准。这些模型通常用于我们日常的许多语言处理任务&#xff0c;比如谷…

Java面试题,线程安全问题

线程安全问题一、对线程安全的理解&#xff08;实际上是内存安全&#xff09;二、Thread类的继承、Runable接口的重写三、守护线程四、ThreadLocal原理和使用场景五、sleep、wait、join、yield六、线程池、解释线程池参数一、对线程安全的理解&#xff08;实际上是内存安全&…