CSS样式计算

news2025/1/21 0:57:24

目录

  • 用户代理样式表
  • 确认声明值
  • 层叠冲突
    • 重要性
    • 权重
    • 源次序
  • 继承
  • 使用默认值
  • 关于a元素不能继承的问题

在网页中,每个 元素都有着许多 CSS属性,有些 属性我们对其 声明并赋值,有些 属性则没有,我们可能会想当然的以为一个 元素会拥有多少 CSS属性是由我们预先声明所决定的,但事实上并不是,每个 元素所拥有的 CSS属性其实是固定的,每个 CSS属性其实都有值,我们预先声明的 CSS属性只不过是将它的 默认值覆盖了而已

对于浏览器而言,一个元素只有它的所有CSS属性都有值才能将其渲染出来

无论这个值是使用默认值还是使用预先定义的值
有时候我们可能会对以下代码产生疑惑

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            color: red;
        }
    </style>
</head>

<body>
    <div>
        <p>p</p>
        <a href="">>=</a>
    </div>
</body>

</html>

结果
为什么a元素的颜色没有继承?
我们大可以说是因为a元素比较特殊,无法继承,必须要单独对a元素进行设置,但下面这段代码呢

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            color: red;
            font-family: 'fira code';
        }
    </style>
</head>

<body>
    <div>
        <p>p</p>
        <a href="">>=</a>
    </div>
</body>

</html>

结果
为什么这段代码有的地方被继承了有的地方没有被继承
想要弄清楚这一切,就需要知道在CSS中属性值是怎么被计算出来的
整个属性值的计算过程分为四个部分

确认声明值
层叠冲突
继承
使用默认值

用户代理样式表

在正式开始学习CSS样式计算过程之前,我们需要先知道什么是用户代理样式表

在CSS中,除了属性原本就有的默认值之外,浏览器本身也会针对一些元素设置一些属性值,这些被浏览器定义的属性被称为用户代理样式表

按理来说用户代理样式表优先级应该最低,但在某些时候用户代理样式表会在某些时候反过来覆盖用户所设置的样式
有了用户代理样式表,浏览器就能保证在没有任何CSS样式定义的情况下网页仍有基本外观与展现

确认声明值

确认声明值是整个CSS样式计算中的第一步,在这一步中浏览器会将用户直接定义在目标元素上的CSS和浏览器自带的代理用户样式表进行比较,将其中没有冲突的部分作为最终CSS

确认声明值

如果我们有一个元素,它的用户代理样式表用户设置的样式表如上图,可以看到margin-block-startmargin-block-endcolor属性是没有冲突的,可以直接作为该元素的最终的对应属性的属性值,而display属性因为在用户代理样式表用户自己设计的样式表中都出现了,所以此阶段不会为包括此属性的其他属性赋值

层叠冲突

这一个阶段主要有三个步骤,一个是判断重要性,一个是判断权重,一个是判断源次序

通过以上规则已经获得属性值的属性将不会参加下面的计算

重要性

参考上图,既然用户代理样式表用户设置的样式表中都有display属性,那么该用哪个呢,浏览器给出的答案是判断用户代理样式表和用户设置的样式表的重要性,哪个更重要就用哪个,很明显用户设置的样式表更加重要

重要性

权重

到了这一步用户代理样式表可以退出整个CSS样式计算流程了,接下来我们就要是开始判断用户设置的样式表里那些冲突样式权重

浏览器通过比较每个选择器的权重来判断哪些选择器里的属性被应用到最终样式上

CSS中的权重大体可以分为以下几种

选择器权重
!important无限大
内联样式1000
id选择器100
class选择器10
伪类选择器10
元素选择器1
伪元素选择器1

源次序

最后,当用户设置的样式表里有重复且权重相同的属性,浏览器会按照他在样式表中定义的次序来决定最终的样式,定义在后面的属性覆盖定义在前面的属性

继承

整个CSS样式计算的第三个阶段就是继承

浏览器会对那些仍没有值且可以继承的属性执行继承操作

继承

如上图,因为font-size于可以被继承且没有属性值属性父元素font-size将被目标元素 继承
因为display属于不能被继承的属性,所以即便目标元素中此属性没有值也不能被继承

使用默认值

默认值是CSS样式计算中的最后一个阶段,浏览器会在此阶段对那个仍旧没有值的属性设置为他们的默认值

经历了以上步骤以后的元素的属性就都拥有了对应的属性值,能被浏览器正常渲染显示

关于a元素不能继承的问题

最后我们再来谈谈为什么a元素不能被继承的问题,我们知道继承发生在整个CSS样式计算中的第三个阶段,且只会对那些还未有值且能被继承的属性进行继承color自然是能被继承的,没有被继承只能是因为它在此阶段之前就已经有值了,在层叠冲突阶段,没有权重影响,没有源次序影响,更没有重要性的影响,所以我们确定了color属性在第一个阶段就已经确定。
我们来看一下浏览器对于a元素代理样式表
a
真相大白了,浏览器在第一步就根据用户代理样式表就确认了color的属性值,而继承发生在第三步,自然无法影响
想要解决这个问题也很简单:设置color的属性值为inherit就行
当浏览器遇到inherit时,将会读取目标元素父元素的对应属性的值,并作用于目标元素对应属性

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            color: red;
            font-family: 'fira code';
        }

        a {
            color: inherit;
        }
    </style>
</head>

<body>
    <div>
        <p>p</p>
        <a href="">>=</a>
    </div>
</body>

</html>

结果

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

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

相关文章

如果在 Ubuntu 系统中两个设备出现两个相同的端口号解决方案

问题描述&#xff1a; 自己的移动机器人在为激光雷达和IMU配置动态指定的端口时&#xff0c;发现激光雷达和深度相机配置的 idVendor 和 idProduct 相同&#xff0c;但是两个设备都具有不同的ttyUSB号&#xff0c;如下图所示 idVendor&#xff1a;代表着设备的生产商ID,由USB设…

Vuex(vue 项目中实现 频繁、大范围数据共享的技术方案)

参考文档(点击查看) 好处 1.数据的存取一步到位&#xff0c;不需层层传递 2.数据的流动非常清晰 3.存储在Vuex中的数据都是响应式的&#xff08;数据更新后&#xff0c;使用数据的组件都会自动更新&#xff09; Vuex基础配置 npm i vuex3.6.2state中用来存储数据&#xff0c…

如何客观评价5G的现状?

前几天&#xff0c;在知乎上看到一个帖子&#xff0c;热度挺高&#xff1a; 看了一下帖子的回答&#xff0c;基本上都在骂5G。 作为通信行业从业者&#xff0c;我说说我自己的看法。大家姑且听听&#xff0c;一起交流一下。 我们目前所处的这个时代&#xff0c;有一个很大的特点…

移动Web学习05-移动端适配Less预处理器

7、移动端适配 7.1、什么是适配&#xff1f; 简单理解就是、同一个网页&#xff0c;在不同屏幕分辨率的设备下、显示还是一样的&#xff0c;你可以理解为、网页当中的图片&#xff0c;盒子之间的距离、文字的大小、随着屏幕分辨率的变化而变化 前面我们学习了flex布局的方式…

Web大并发集群部署之集群介绍

一、传统web访问模型 传统web访问模型完成一次请求的步骤 1&#xff09;用户发起请求 2&#xff09;服务器接受请求 3&#xff09;服务器处理请求&#xff08;压力最大&#xff09; 4&#xff09;服务器响应请求 传统模型缺点 单点故障&#xff1b; 单台服务器资源有限&…

excel统计分析——多元线性回归

参考资料&#xff1a;生物统计学 多元线性回归&#xff08;multiple linear regression&#xff09;是具有一个因变量或多个&#xff08;两个或以上&#xff09;自变量的线性回归&#xff0c;是直线回归的拓展&#xff0c;其模型和计算过程与直线回归类似&#xff0c;只是在计算…

【软件工程】测试规格

1. 引言 1.1简介 本次的测试用例是基于核心代码基本开发完毕&#xff0c;在第一代系统基本正常运行后编写的&#xff0c;主要目的是为了后续开发与维护的便利性。 该文档主要受众为该系统后续开发人员&#xff0c;并且在阅读此文档前最后先阅读本系统的需求文档、概要设计文…

Qt事件学习案例

视频链接 https://www.bilibili.com/video/BV18B4y1K7Cs?p7&spm_id_frompageDriver&vd_sourcefa4ef8f26ae084f9b5f70a5f87e9e41bQt5跟着视频做即可&#xff0c;Qt6部分代码需要改动,改动的地方注释有写 素材 百度云 链接&#xff1a;https://pan.baidu.com/s/158j…

K8S - Deployment 的版本回滚

当前状态 先看deployment rootk8s-master:~# kubectl get deploy -o wide --show-labels NAME READY UP-TO-DATE AVAILABLE AGE CONTAINERS IMAGES …

蓝桥杯嵌入式(G431)备赛笔记——LED

cubeMX配置: 原理图,其中PD2高电平使能锁存器,PC8-15默认给高电平,放置上电初始化LED亮 74HC573是八路输出锁存器 1脚是使能,低电平有效,高电平输出高阻 2~9是输入,PC8-PC15 19~12是输出 11是锁存,即PD2: 高电平是同步,即输出跟随输入变化 低电平锁存,即输出不再改变 …

RUST Rover 条件编译 异常处理

按官方处理发现异常 会报异常 error: failed to parse manifest at C:\Users\topma\RustroverProjects\untitled2\Cargo.toml 修改模式如下才能正常编译 网上说明 这样处理 https://course.rs/cargo/reference/features/intro.html RUST 圣经里描述 [features] print-a []…

如何用putty通过ssh连接ubuntu

1. 下载和安装PuTTY 访问PuTTY官网下载PuTTY的最新版本。 2. 打开PuTTY 解压下载的文件后&#xff0c;找到PuTTY文件并双击打开。 3. 配置SSH连接 在ubuntu下安装ssh服务在安装ssh时&#xff0c;我一直遇到一个问题&#xff0c;原因是我的虚拟机连不上网&#xff0c;反复实…

Linux之shell脚本编辑工具awk

华子目录 概念工作流程工作图流程&#xff08;按行处理&#xff09; awk程序执行方式1.通过命令行执行awk程序实例 2.awk命令调用脚本执行实例 3.直接使用awk脚本文件调用实例 awk命令的基本语法格式BEGIN模式与END模式实例awk的输出 记录和域&#xff08;记录表示数据行&#…

若依:一个基于Spring Boot、Spring Security、JWT、Vue和Element的全部开源快速开发平台

若依后台管理系统&#xff1a;一个基于Spring Boot、Spring Security、JWT、Vue和Element的全部开源快速开发平台 一、引言 随着软件开发技术的发展&#xff0c;前后端分离的开发模式逐渐成为主流。这种模式能够提高开发效率&#xff0c;降低维护成本&#xff0c;使前后端工程…

SketchUp Pro 2024 for mac 草图大师 专业的3D建模软件

SketchUp Pro 2024 for Mac是一款功能强大的三维建模软件&#xff0c;适用于Mac电脑。其简洁易用的界面和强大的工具集使得用户可以轻松创建复杂的3D模型。 软件下载&#xff1a;SketchUp Pro 2024 for mac v24.0.483 激活版下载 SketchUp Pro 2024 for Mac支持导入和导出多种文…

leetcode.面试题 02.07. 链表相交

题目 给你两个单链表的头节点 headA 和 headB &#xff0c;请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点&#xff0c;返回 null 。 图示两个链表在节点 c1 开始相交&#xff1a; 思路 假a在链表A上移动,b在链表B上移动&#xff0c;a移动完在B上开始&…

人脸识别:Arcface--loss+code

之前只接触过传统方法的人脸识别算法&#xff0c;本以为基于深度学习的方法会使用对比损失之类的函数进行训练&#xff0c;但是Arcface算法基于softmax进行了创新&#xff0c;本文未深究其详细的loss公式原理&#xff0c;在大致明白其方向下&#xff0c;运行了代码&#xff0c;…

加速度:电子元器件营销网站的功能和开发周期

据工信部预计&#xff0c;到2023年&#xff0c;我国电子元器件销售总额将达到2.1万亿元。随着资本的涌入&#xff0c;在这个万亿级赛道&#xff0c;市场竞争变得更加激烈的同时&#xff0c;行业数字化发展已是大势所趋。电子元器件B2B商城平台提升数据化驱动能力&#xff0c;扩…

云服务器ECS租用价格表报价——阿里云

阿里云服务器租用价格表2024年最新&#xff0c;云服务器ECS经济型e实例2核2G、3M固定带宽99元一年&#xff0c;轻量应用服务器2核2G3M带宽轻量服务器一年61元&#xff0c;ECS u1服务器2核4G5M固定带宽199元一年&#xff0c;2核4G4M带宽轻量服务器一年165元12个月&#xff0c;2核…

docker的安装及入门指令

目录 一、将docker安装到云服务器步骤 1.更新系统yum版本 2.安装所需依赖 3.添加docker仓库设置(使用的是阿里云) 4.安装docker引擎 5.启动docker并开启自动启动 6. 检查是否安装成功&#xff0c;成功会显示相应版本&#xff0c;否则安装失败 二、docker常用命令 1.从…