CSS中样式继承+优先级

继承属性和非继承属性

一、定义及分类

1、继承属性是指在父元素上设置了这些属性后,子元素会自动继承这些属性的值,除非子元素显式地设置了不同的值。

常见的继承属性:

  • 字体 font 系列
  • 文本text-align text-ident line-height letter-spacing
  • 颜色 color
  • 列表 list-style
  • 可见性 visibility
  • 光标 cursor

容易被误认为继承属性的非继承属性:

  • 透明度 opacity
  • 背景 background系列

2、非继承属性是指在父元素上设置这些属性后,子元素不会继承这些属性的值,除非子元素显式地设置了相同的属性。非继承属性的默认值为初始值(根元素的继承属性的默认值是初始值)。

常见的非继承属性:

布局相关属性:

  • width :设置元素的竞度,例如width:200px;。
  • height :设置元素的高度,如 height:100px;。
  • margin :设置元素的外边距,例如 margin:10px;。
  • padding :设置元素的内边距,如padding:5px;。
  • display :设置元素的显示类型,例如display:block;。

边框相关属性:

  • border :设置元素的边框,如border:1px solid black;。
  • border-radius:设置元素的边框圆角,例如border-radius:5px;

背景相关属性:

  • 设置元素的背景颜色:background-color:yellow;。
  • 设置元素的背景图像:如 background-image:url('image.jpg');

二、相互转化

1、想非继承属性被继承:使用inherit关键字

2、重置属性元素为初始值:使用all关键字

前提:属性值来源可以是开发者、用户、浏览器默认(规范之外,浏览器为部分元素,如表单元素设置默认样式)
  • all:initial——清空了用户配置和浏览器默认样式,设置为W3C规范初始值(没有任何样式,而我们在工作中一般都希望重置而不是清空
  • all:revert——属性还原。继承属性是还原为父元素的属性,非继承属性或者父元素继承属性没设置就还原为用户配置和浏览器默认的属性

针对将继承属性不继承父元素属性的方法:

1、使用all:initial

2、使用unset关键字,对于继承属性,unset会将其设置为initial,去掉其继承性;对于非继承属性,会设置为inherit

3、为子元素指定不同的值,覆盖继承的值,在效果上取消其继承性

优先级

一、为什么定义优先级?

同一元素被多个选择器选中时,并且多个选择器选中时相同属性设置了不同的值,这时候就需要根据优先级来判断该让哪个选择器设置的样式生效

二、优先级规则

三、!important的作用和弊端?如何避免?

1、作用:可以忽略选择器的优先级,让声明的属性总是生效
2、 弊端:
  • 破坏原CSS级联规则,增加调试难度。CSS 的级联规则是一种基于选择器特异性(选择器有不同的优先级权重)和样式声明顺序(特异性相同的选择器则最后声明的)来确定样式优先级的系统。
  • 修改样式变得困难。只能不断用!important进行覆盖,会导致比较混乱,也可能会出现其他的冲突
  • 污染全局样式。
3、避免
  • 使用css选择器优先级解决样式冲突,不使用!important
  • 不在全局、会被复用的插件中使用!important
  • 通过CSS命名或shadow DOM限制CSS作用域

四、如何限制CSS选择器的作用域??

1、通过css命名限制

2、通过shadowDOM限制

 这种的方法的原理是:

  • 首先获取到要限制作用域的DOM节点,并用attachShadow方法来创建一个影子DOM
  • 为这个影子DOM设置内容以及样式,这样设置的样式即使界定在当时选定的DOM节点的作用域内的

3、通过@document限制

@document 是基于 URL 条件在浏览器层面控制样式的应用范围。

  • 当url后面的路径确定到某个html文件时,就说明作用范围是当前的这个页面
  • 但url后括号内的路径只精确到html文件前一级的域名时,说明作用范围是这个域名下的多个页面

4、CSS Modules限制

把CSS作为资源引入到不同的js文件中,后面项目进行构建时,CSS Modules会根据本js文件的内容生成独一无二的哈希值作为类名,来使整个项目中的相同的样式不会冲突

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

macOS 安装JDK17

文章目录 前言介绍新特性下载安装1.下载完成后打开downloads 双击进行安装2.配置环境变量3.测试快速切换JDK 小结 前言 近期找开源软件,发现很多都已经使用JDK17springboot3 了,之前的JDK8已经被替换下场,所以今天就在本机安装了JDK17&#…

ChatGPT大模型极简应用开发-CH1-初识 GPT-4 和 ChatGPT

文章目录 1.1 LLM 概述1.1.1 语言模型和NLP基础1.1.2 Transformer及在LLM中的作用1.1.3 解密 GPT 模型的标记化和预测步骤 1.2 GPT 模型简史:从 GPT-1 到 GPT-41.2.1 GPT11.2.2 GPT21.2.3 GPT-31.2.4 从 GPT-3 到 InstructGPT1.2.5 GPT-3.5、Codex 和 ChatGPT1.2.6 …

vector迭代器的使用以及迭代器失效

一、iterator的使用注意 begin与end 遵循左闭右开的原则,begin 指向vector的第一个元素,end 指向vector的最后一个元素的往下一个位置。 rbegin 与 rend rbegin指向最后一个元素的位置,rend指向第一个元素的往前一个位置。 二、vector的常…

【Linux】15.Linux进程概念(4)

文章目录 程序地址空间前景回顾C语言空间布局图:代码1代码2代码3代码4代码5代码6代码7 程序地址空间前景回顾 历史核心问题: pid_t id fork(); if(id 0) else if(id>0) 为什么一个id可以放两个值呢?之前没有仔细讲。 C语言空间布局图&am…

【无法下载github文件】虚拟机下ubuntu无法拉取github文件

修改hosts来进行解决。 步骤一:打开hosts文件 sudo vim /etc/hosts步骤二:查询 github.com的ip地址 https://sites.ipaddress.com/github.com/#ipinfo将github.com的ip地址添加到hosts文件末尾,如下所示。 140.82.114.3 github.com步骤三…

Android BitmapShader实现狙击瞄具十字交叉线准星,Kotlin

Android BitmapShader实现狙击瞄具十字交叉线准星&#xff0c;Kotlin <?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.…

Android系统开发(十):标准协议和通讯的桥梁:探索蓝牙、NFC、WLAN 的工作原理

引言&#xff1a; 现代社会已经是信息互联的世界&#xff0c;各种设备之间的互联互通已经成为了生活的一部分。而在这个过程中&#xff0c;Android 设备与其他硬件之间的通信扮演着至关重要的角色。从蓝牙耳机到 WiFi 路由器&#xff0c;甚至与电话功能的互动&#xff0c;所有…

node中文名的js文件有问题

新版Node无法运行含有中文名的JS文件&#xff0c;具体表现在无报错无反应。如下图&#xff1a; 源码如下&#xff1a; 改成英文的JS文件&#xff0c;则正常&#xff0c;如下图&#xff1a;

BERT与CNN结合实现糖尿病相关医学问题多分类模型

完整源码项目包获取→点击文章末尾名片&#xff01; 使用HuggingFace开发的Transformers库&#xff0c;使用BERT模型实现中文文本分类&#xff08;二分类或多分类&#xff09; 首先直接利用transformer.models.bert.BertForSequenceClassification()实现文本分类 然后手动实现B…

openharmony应用开发快速入门

开发准备 本文档适用于OpenHarmony应用开发的初学者。通过构建一个简单的具有页面跳转/返回功能的应用&#xff08;如下图所示&#xff09;&#xff0c;快速了解工程目录的主要文件&#xff0c;熟悉OpenHarmony应用开发流程。 在开始之前&#xff0c;您需要了解有关OpenHarmon…

RabbitMQ---TTL与死信

&#xff08;一&#xff09;TTL 1.TTL概念 TTL又叫过期时间 RabbitMQ可以对队列和消息设置TTL&#xff0c;当消息到达过期时间还没有被消费时就会自动删除 注&#xff1a;这里我们说的对队列设置TTL,是对队列上的消息设置TTL并不是对队列本身&#xff0c;不是说队列过期时间…

51.WPF应用加图标指南 C#例子 WPF例子

完整步骤&#xff1a; 先使用文心一言生成一个图标如左边使用Windows图片编辑器编辑&#xff0c;去除背景使用正方形&#xff0c;放大图片使图标铺满图片使用格式工程转换为ico格式&#xff0c;分辨率为最大 在资源管理器中右键项目添加ico类型图片到项目里图片属性设置为始终…

多语言插件i18n Ally的使用

先展示一下效果 1.第一步首先在vscode下载插件 2.第二步在 setting.json 里面配置 要区分文件是js&#xff0c;ts或json结尾 以zh.ts和en.ts结尾的用这个 { "i18n-ally.localesPaths": ["src/locales"],"i18n-ally.keystyle": "nested"…

蓝桥杯备考:堆和priority queue(优先级队列)

堆的定义 heap堆是一种特殊的完全二叉树&#xff0c;对于树中的每个结点&#xff0c;如果该结点的权值大于等于孩子结点的权值&#xff0c;就称它为大根堆&#xff0c;小于等于就叫小根堆&#xff0c;如果是大根堆&#xff0c;每个子树也是符合大根堆的特征的&#xff0c;如果是…

【人工智能】:搭建本地AI服务——Ollama、LobeChat和Go语言的全方位实践指南

前言 随着自然语言处理&#xff08;NLP&#xff09;技术的快速发展&#xff0c;越来越多的企业和个人开发者寻求在本地环境中运行大型语言模型&#xff08;LLM&#xff09;&#xff0c;以确保数据隐私和提高响应速度。Ollama 作为一个强大的本地运行框架&#xff0c;支持多种先…

Java锁 从乐观锁和悲观锁开始讲 面试复盘

目录 面试复盘 Java 中的锁 大全 悲观锁 专业解释 自我理解 乐观锁 专业解释 自我理解 悲观锁的调用 乐观锁的调用 synchronized和 ReentrantLock的区别 相同点 区别 详细对比 总结 面试复盘 Java 中的锁 大全 悲观锁 专业解释 适合写操作多的场景 先加锁可以…

OpenVela——专为AIoT领域打造的开源操作系统

目录 一、系统背景与开源 1.1. 起源 1.2. 开源 二、系统特点 2.1. 轻量化 2.2. 标准兼容性 2.3. 安全性 2.4. 高度可扩展性 三、技术支持与功能 3.1. 架构支持 3.2. 异构计算支持 3.3. 全面的连接套件 3.4. 开发者工具 四、应用场景与优势 4.1. 应用场景 4.2. …

使用 Java 实现基于 DFA 算法的敏感词检测

使用 Java 实现基于 DFA 算法的敏感词检测 1. 引言 敏感词检测在内容审核、信息过滤等领域有着广泛的应用。本文将介绍如何使用 DFA&#xff08;Deterministic Finite Automaton&#xff0c;确定有限状态自动机&#xff09; 算法&#xff0c;在 Java 中实现高效的敏感词检测。…

单片机存储器和C程序编译过程

1、 单片机存储器 只读存储器不是并列关系&#xff0c;是从ROM发展到FLASH的过程 RAM ROM 随机存储器 只读存储器 CPU直接存储和访问 只读可访问不可写 临时存数据&#xff0c;存的是CPU正在使用的数据 永久存数据&#xff0c;存的是操作系统启动程序或指令 断电易失 …

UDP报文格式

UDP是传输层的一个重要协议&#xff0c;他的特性有面向数据报、无连接、不可靠传输、全双工。 下面是UDP报文格式&#xff1a; 1&#xff0c;报头 UDP的报头长度位8个字节&#xff0c;包含源端口、目的端口、长度和校验和&#xff0c;其中每个属性均为两个字节。报头格式为二…