CSS中样式继承+优先级

news/2025/1/19 20:59:48/
htmledit_views">

继承属性和非继承属性

一、定义及分类

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、避免
  • 使用html" title=css>css选择器优先级解决样式冲突,不使用!important
  • 不在全局、会被复用的插件中使用!important
  • 通过CSS命名或shadow DOM限制CSS作用域

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

1、通过html" title=css>css命名限制

2、通过shadowDOM限制

 这种的方法的原理是:

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

3、通过@document限制

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

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

4、CSS Modules限制

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


http://www.ppmy.cn/news/1564498.html

相关文章

Ubuntu 开启 SMB 服务,并通过 windows 访问

背景资料 Ubuntu服务器折腾集Ubuntu linux 文件权限Ubuntu 空闲硬盘挂载到 文件管理器的 other locations Ubuntu开启samba和window共享文件 Ubuntu 配置 SMB 服务 安装 Samba 确保 Samba 已安装。如果未安装,运行以下命令进行安装: sudo apt upda…

面试题解析

1、写一个sed命令,修改/tmp/input.txt文件的内容 要求: 删除所有空行; 在非空行前面加一个"AAA",在行尾加一个"BBB",即将内容为11111的一行改为:AAA11111BBB 创造测试文件:…

计算机网络 | IP地址、子网掩码、网络地址、主机地址计算方式详解

关注:CodingTechWork 引言 在计算机网络中,IP地址、子网掩码和网络地址是构建网络通信的基本元素。无论是企业网络架构、互联网连接,还是局域网(LAN)配置,它们都起着至关重要的作用。理解它们的工作原理&a…

for循环语句题目

for循环&#xff1a; 1整数的个数 给定k(1<k<100)个正整数&#xff0c;其中每个数都是大于等于1&#xff0c;小于等于10的数。写程序计算给定的k个正整数中&#xff0c;1&#xff0c;5和10出现的次数。 #include <stdio.h> int main(){ int k,n; int sum0;…

es 3期 第24节-运用SQL简化DSL查询

#### 1.Elasticsearch是数据库&#xff0c;不是普通的Java应用程序&#xff0c;传统数据库需要的硬件资源同样需要&#xff0c;提升性能最有效的就是升级硬件。 #### 2.Elasticsearch是文档型数据库&#xff0c;不是关系型数据库&#xff0c;不具备严格的ACID事务特性&#xff…

Windows 蓝牙驱动开发-BLE低功耗

蓝牙的版本为1.0 ~5.2版本&#xff0c;蓝牙1.0~3.0都是经典蓝牙(rfcomm)。而蓝牙4.0开始就是包括蓝牙BLE了。蓝牙4.0的蓝牙芯片都是双模的&#xff0c;既包括经典蓝牙也包括低能耗蓝牙。经典蓝牙和蓝牙BLE完全是两个东西&#xff0c;只是它们在底层上有一些相似的地方。蓝牙BLE…

SpringBoot开发——Spring Boot 3.3实现多端数据一致性的实时数据同步方案

文章目录 1、基于WebSocket的即时推送2、利用Kafka实现异步数据同步3、数据库变更监听与触发小结 在数字化浪潮下&#xff0c;业务横跨Web端、移动端&#xff0c;数据实时同步成了刚需。 Spring Boot 3.3携强大方案登场&#xff0c;为多端数据一致性难题精准“破局”。 1、基于…

电机驱动-标准库和HAL库

一、标准库 Motor.c-标准库 #include "stm32f10x.h" // Device header #include "PWM.h"/*** 函 数&#xff1a;直流电机初始化* 参 数&#xff1a;无* 返 回 值&#xff1a;无*/ void Motor_Init(void) {RCC_APB2PeriphClockCmd…