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

news2024/11/16 7:55:36

[前端笔记——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/176088.html

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

相关文章

一起自学SLAM算法:8.1 Gmapping算法

连载文章&#xff0c;长期更新&#xff0c;欢迎关注&#xff1a; 下面将从原理分析、源码解读和安装与运行这3个方面展开讲解Gmapping 算法。 8.1.1 Gmapping原理分析 首先要知道&#xff0c;Gmapping是一种基于粒子滤波的算法。在7.7.2节中已经提到过用RBPF&#xff08;Rao-…

linux系统中使用QT实现APP开发的基本方法

大家好&#xff0c;今天主要和大家分享一下&#xff0c;如何使用QT进行APP的主界面开发的方法。 目录 第一&#xff1a;APP界面开发基本简介 第二&#xff1a;滑动界面实现 第三&#xff1a;APP界面开发实现 第四&#xff1a;APP主界面测试 第一&#xff1a;APP界面开发基本…

ARP渗透与攻防(一)之ARP原理

ARP原理 前言 ARP攻击就是通过伪造IP地址和MAC地址实现ARP欺骗&#xff0c;能够在网络中产生大量的ARP通信量使网络阻塞&#xff0c;攻击者只要持续不断的发出伪造的ARP响应包就能更改目标主机ARP缓存中的IP-MAC条目&#xff0c;造成网络中断或中间人攻击。ARP攻击主要是存在…

CSS3基础内容

目录 CSS基本样式 选择器分类 标签选择器 类选择器 利用类选择器画三个盒子 多类名 id选择器 id选择器和类选择器的区别 通配符选择器 CSS字体属性 字体粗细font-weight 字体样式 CSS文本属性 CSS的引入方式 行内样式表&#xff08;行内式&#xff09; 内部样式表…

2023年集卡活动简记

文章目录支付宝总评&#xff1a;【强烈推荐】年味浓&#xff0c;必中奖&#xff0c;单倍金额不算少。只关注开奖可以除夕当天玩儿。集卡分1.88元难度&#xff1a;【非常低】必中奖时间投入&#xff1a;【较少】无需打开其他App&#xff0c;比较轻松。操作体验&#xff1a;【好】…

深度理解卷积神经网络

神经网络包括卷积层&#xff0c;池化层&#xff0c;全连接层。一个最简单的神经元结构&#xff0c;假如有三个输入&#xff0c;都对应一个权重参数&#xff0c;然后通过权重加起来&#xff0c;经过一个激活函数&#xff0c;最后输出y。CNN中独特的结构就是卷积层&#xff0c;就…

拓展:阿里巴巴中文站架构演进分析【部分】

文章目录前言阿里巴巴中文站架构发展历程阿里巴巴第五代架构数据架构的复杂前言 由学习整理而来&#xff0c;并非有意抄袭。如果有冒犯行为&#xff0c;请及时联系作者进行处理&#xff01; 阿里巴巴中文站架构发展历程 时间关键技术1999第一代网站架构Perl&#xff0c;CGl&…

【实操案例八】元组、集合操作 实例代码及运行效果图!

任务一&#xff1a;我的咖啡馆你做主 方法一&#xff1a;使用列表 # 任务一&#xff1a;我的咖啡馆你做主 # 方法一&#xff1a;使用列表lst[蓝山,卡布奇诺,拿铁,皇家咖啡,女王咖啡,美丽与哀愁]for i in lst:print(lst.index(i)1,.,i,end\t) print()while True:chice int(in…

SpringCloud+Ribbon 报错:java.net.unknownhostexception:XXX

SpringCloudRibbon 报错&#xff1a;java.net.unknownhostexception:XXX 问题分析&#xff1a; 网上很多的说法是依赖冲突导致&#xff0c;原因是什么呢&#xff1a;如果你的org.springframework.cloud:spring-cloud-starter-netflix-eureka-client 依赖中包含了ribbon依赖&…

常用JVM配置参数简介

既然学习JVM&#xff0c;阅读GC日志是处理Java虚拟机内存问题的基础技能&#xff0c;它只是一些人为确定的规则&#xff0c;没有太多技术含量。 既然如此&#xff0c;那么在IDE的控制台打印GC日志是必不可少的了。现在就告诉你怎么打印。 &#xff08;1&#xff09;如果你用的是…

Elasticsearch7.8.0版本高级查询—— 分页查询文档

目录一、初始化文档数据二、分页查询文档2.1、概述2.2、示例一、初始化文档数据 在 Postman 中&#xff0c;向 ES 服务器发 POST 请求 &#xff1a;http://localhost:9200/user/_doc/1&#xff0c;请求体内容为&#xff1a; { "name":"zhangsan", "ag…

数据分析-深度学习 Pytorch Day8

一。什么是循环神经网络&#xff1a;循环神经网络&#xff08;Rerrent Neural Network, RNN&#xff09;&#xff0c;历史啊&#xff0c;谁发明的都不重要&#xff0c;说了你也记不住&#xff0c;你只要记住RNN是神经网络的一种&#xff0c;类似的还有深度神经网络DNN&#xff…

广州周立功CanTest卡使用教程一

网上有不少Can采集平台,包括Ardunio,Can卡,也有不少人用Freescale自己DIY一个平台,这些都是相当不错,并且都有成熟的代码,这里介绍在汽车诊断软件领域普遍都会选择的Can卡使用。 大家是不是对这个节面非常熟悉,CAN-bus 通用测试软件是一个专门用来对所有的 ZLGCAN 系列板…

【Python】基于经典网络架构训练图像分类模型——图像识别模型与训练策略(2023年1月22日,大年初一,春节快乐,兔年大吉)

声明:仅学习使用~ 今天是大年初一,祝大家新年快乐!!! 这个练习使用的图片稍多,因此初次在PyCharm里面可能会需要一些时间。 (注释中包含遇到的一些错误以及修正,同时也含有一些输出,部分较长的输出以省略号的形式在注释里面展示了) 2023.1.22,大年初一,新年快乐…

LoadBalancer源码解析

文章目录一、背景二、总体流程三、源码解析1. lb拦截器配置2. LB拦截器实现3. LB执行前置处理4. 负载均衡5. LB执行http请求一、背景 Spring Cloud 2020版本以后&#xff0c;默认移除了对Netflix的依赖&#xff0c;其中就包括Ribbon&#xff0c;官方默认推荐使用Spring Cloud …

生物化学 电阻抗成像OpenEIT 番外篇 EIT公式

EIT简介 摘要电阻抗断层扫描&#xff08;EIT&#xff09;是一种成像方式&#xff0c;使用无害的电流探测患者或物体。电流通过放置在靶表面上的电极馈送&#xff0c;数据由在电极处测量的电压组成&#xff0c;这些电压由一组线性独立的电流注入模式产生。EIT旨在恢复目标内部电…

【MySQL】第八部分 加密和解密函数

【MySQL】第八部分 加密和解密函数 文章目录【MySQL】第八部分 加密和解密函数8. 加密和解密函数总结8. 加密和解密函数 函数用法PASSWORD(str)返回字符串str的加密版本&#xff0c;41位长的字符串。加密结果不可逆&#xff0c;常用于用户的密码加密.( 8.0 版本以上不能用)MD5…

海湾化学冲刺上交所上市:计划募资30亿元,华融曾是其股东

近日&#xff0c;青岛海湾化学股份有限公司&#xff08;下称“海湾化学”&#xff09;预披露招股书&#xff0c;准备在上海证券交易所主板上市。本次冲刺上市&#xff0c;海湾化学计划募资30亿元&#xff0c;将于37.5万吨/年环氧氯丙烷绿色循环经济项目&#xff08;一期&#x…

23种设计模式(十七)——状态模式【状态变化】

状态模式 文章目录 状态模式意图什么时候使用状态真实世界类比状态模式的实现状态模式的优缺点亦称:State 意图 对有状态的对象,把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为。 状态模式的解决思想是:当控制一个对象状态转…

【沐风老师】教你用3dMax柱子插件Pillars打造欧式罗马柱建模(附柱子插件下载)

Pillars是一个很棒的3dMax插件。Pillars可以创建柱子、柱状物、栏杆、喷泉&#xff08;喷泉建筑的造型&#xff09;和各种类似形状的三维模型。它也会破坏&#xff08;打断&#xff09;这些模型。有了它&#xff0c;您只需在几秒钟内就能制作出外观精美的柱子和效果逼真的断面效…