css系列-样式权重

样式权重

元素会被多个样式一层层作用,这就是层叠样式表的来源。如果多个样式做用在元素上就会产生优先级权重问题。

使用类、ID、伪类都有不同的权重,具体应用哪条规则要看权限大小。

  • 相同权重的规则应用最后出现的
  • 可以使用 !important 强制提升某个规则的权限
  • 权重应用

    规则粒度
    ID0100
    class,类属性值0010
    标签,伪元素0001
    *0000
    行内样式1000

    下面是ID权限大于CLASS的示例

  • <style>
      .color {
      	color: red;
      }
    
      #hot {
      	color: green;
      }
    </style>
        
    <h2 class="color" id="hot">id权重大</h2>
    

    属性权重的示例

    <style>
      /* 权重:0021 */
      h2[class="color"][id] {
    		color: red;
      }
    
      /* 权重:0012 */
      article h2[class="color"] {
      	color: blue;
      }
    </style>
    
    <article>
    	<h2 class="color" id="hot">权重计算</h2>
    </article>
    

    行级权重优先级最高

    <style>
      /* 权重:0012 */
      article h2[class="color"] {
      	color: blue;
      }
    
      #hot {
      	color: black;
      }
    </style>
    
    <h2 class="color" id="hot" style="color:green;">行级权重最高1000</h2>
    

    强制优先级

    有时在规则冲突时,为了让某个规则强制有效可以使用 !important。

    <style>
      h2 {
     	 color: red !important;
      }
    
      h2 {
     	 color: green;
      }
    </style>
    
    <h2>强制提升优先级</h2>
    

    两条规则权限一样,默认应用第二个规则,但第一个规则使用了!important 提升了权限,所以被应用。!important主要用于覆盖行内样式。我们尽量不要使用!important,尽量用class。

继承规则

子元素可以继承父元素设置的样式。

  • 子元素并不是全部样式。比如边框、高度等并不会继承。
  • 继承的规则没有权重
  • <style>
      article {
        color: red;
        border: solid 1px #ddd;
      }
    </style>
    ...
    
    <article>
    	<h2>颜色继承 <span>继承article设置的颜色</span></h2>
    </article>
    

    上例中 h2 标签没有设置颜色样式,将继承 html 的颜色,并且边框没有产生继承。

我们也可以修改默认是否继承:

四个通用属性值

css 为控制继承提供了四个特殊的通用属性值,每个 css 属性都能使用这些值。

  • inherit

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

  • initial

将属性的初始值应用于元素。实际上,就是“重置为默认值”。

  • unset

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

  • revert

表示使用样式表中定义的元素属性的默认值。若用户定义样式表中显式设置,则按此设置;否则,按照浏览器定义样式表中的样式设置;否则,等价于 unset 。(属性值 revert 目前只有很少的浏览器支持)

css3 增加了 all 属性,其值可以是上面四个之一,表示重置元素所有属性的值重置为其初始值,或继承值。

.test{
    all: initial;
    all: inherit;
    all: unset;
    all: revert; 
}

通配符

在开发中使用* 选择器会有一个问题。因为通配符的权限为0,而继承的规则没有权重,看以下代码产生的问题。

<style>
  * {
  	color: red;
  }

  h2 {
  	color: blue;
  }
</style>

<article>
	<h2>蓝色 <span>颜色不发生变化</span></h2>
</article>

h2 中的span并没有继承 h2 的颜色,就是因为继承没有权重。而使用了 * 权重为0的规则。

### CSS 中 `font-weight` 属性的用法以及在 Vue 2 样式穿透中的应用 #### 1. `font-weight` 基本概念 `font-weight` 是 CSS 中用于定义文字粗细程度的属性。它接受的关键字值包括但不限于 `normal`、`bold`、`bolder` 和 `lighter`,同时也支持数值形式(如 `100`, `200`, ..., `900`)。其中,`400` 等价于 `normal`,而 `700` 则对应 `bold`[^3]。 --- #### 2. 在 Vue 2 中通过样式穿透设置 `font-weight` 当需要从父组件修改子组件内的字体加粗效果时,可以借助深度选择器完成此任务。例如,针对 Element UI 的对话框标题区域自定义字体大小和权重: ```html <template> <el-dialog :visible.sync="dialogVisible"> <template slot="title"> <div>默认标题</div> </template> </el-dialog> </template> <style scoped> /* 使用 ::v-deep 对 el-dialog 的 title 部分进行样式穿透 */ ::v-deep .el-dialog__title { font-size: 26px; /* 设置更大的字号 */ font-weight: bold; /* 将字体设为粗体 */ color: #ffffff; /* 修改颜色为白色 */ } </style> ``` 上述代码片段展示了如何利用 `::v-deep` 深度选择器覆盖 `.el-dialog__title` 类名下的原有样式,并指定新的字体尺寸与重量[^1]。 --- #### 3. 数值型 `font-weight` 的精确控制 除了常见的关键字外,还可以采用具体数字来微调字体厚度。这尤其适用于那些提供多种字重版本的 Web 字体库(比如 Google Fonts 提供的 Open Sans 或 Roboto)。 示例配置如下: ```css ::v-deep .custom-text { font-family: 'Roboto', sans-serif; font-weight: 300; /* 轻量化的字体风格 */ } ``` 值得注意的是,只有加载了对应的字重资源后才能正常显示预期的效果;否则浏览器会选择最接近可用的那个级别作为替代方案[^4]。 --- #### 4. 解决潜在问题——未生效的情况分析 有时即使正确编写了带有 `::v-deep` 的规则却看不到变化,可能是由于以下几个原因造成的: - **优先级不足**:确认当前声明是否具有足够的权重要压倒已有定义; - **拼写错误**:仔细核对目标类名称是否有误; - **缺少必要依赖**:确保项目引入了完整的字体家族及其变种文件[^5]。 --- #### 5. 结合实际案例优化用户体验 继续沿用前面提到过的 El Dialog 场景,假如希望整个弹窗内部的文字都显得更加醒目一些,则可以直接作用到根节点上并统一设定参数: ```css ::v-deep .el-dialog { font-family: Arial, Helvetica, sans-serif; font-weight: 500 !important; /* 强制提升整体视觉强度 */ } ``` 这样不仅简化维护成本还能保持一致性设计原则[^6]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值