CSS 样式的 initial(默认)和 inherit(继承)以及 unset

本文详细介绍了CSS属性值initial、inherit和unset的使用方法及技巧,包括它们如何影响样式继承和默认值设置,并通过实例展示了这些关键字的实际应用。

经常会碰到,问一个 CSS 属性,例如 position 有多少取值。

通常的回答是 staticrelativeabsolute 和 fixed 。当然,还有一个极少人了解的 sticky 。其实,除此之外, CSS 属性通常还可以设置下面几个值:

  • initial
  • inherit
  • unset
  • revert
1
2
3
4
5
6
7
8
{
   position : initial;
   position : inherit;
   position : unset
   /* CSS Cascading and Inheritance Level 4 */
   position : revert;
}

了解 CSS 样式的 initial(默认)和 inherit(继承)以及 unset 是熟练使用 CSS 的关键。(当然由于 revert 未列入规范,本文暂且不过多提及。)

initial

initial 关键字用于设置 CSS 属性为它的默认值,可作用于任何 CSS 样式。(IE 不支持该关键字)

inherit

每一个 CSS 属性都有一个特性就是,这个属性必然是默认继承的 (inherited: Yes) 或者是默认不继承的 (inherited: no)其中之一,我们可以在 MDN 上通过这个索引查找,判断一个属性的是否继承特性。

譬如,以 background-color 为例,由下图所示,表明它并不会继承父元素的 background-color:

可继承属性

最后罗列一下默认为 inherited: Yes 的属性:

  • 所有元素可继承:visibility 和 cursor
  • 内联元素可继承:letter-spacing、word-spacing、white-space、line-height、color、font、 font-family、font-size、font-style、font-variant、font-weight、text- decoration、text-transform、direction
  • 块状元素可继承:text-indent和text-align
  • 列表元素可继承:list-style、list-style-type、list-style-position、list-style-image
  • 表格元素可继承:border-collapse

还有一些 inherit 的妙用可以看看这里:谈谈一些有趣的CSS题目(四)-- 从倒影说起,谈谈 CSS 继承 inherit,合理的运用 inherit 可以让我们的 CSS 代码更加符合 DRY(Don‘’t Repeat Yourself )原则。

unset

名如其意,unset 关键字我们可以简单理解为不设置。其实,它是关键字 initial 和 inherit 的组合。

什么意思呢?也就是当我们给一个 CSS 属性设置了 unset 的话:

  1. 如果该属性是默认继承属性,该值等同于 inherit
  2. 如果该属性是非继承属性,该值等同于 initial

举个例子,根据上面列举的 CSS 中默认继承父级样式的属性,选取一个,再选取一个不可继承样式:

  • 选取一个可继承样式: color
  • 选取一个不可继承样式: border

使用 unset 继承/取消样式:

看看下面这个简单的结构:

1
2
3
4
< div  class="father">
     < div  class="children">子级元素一</ div >
     < div  class="children unset">子级元素二</ div >
</ div >
1
2
3
4
5
6
7
8
9
10
11
12
13
14
.father {
     color red ;
     border 1px  solid  black ;
}
.children {
     color green ;
     border 1px  solid  blue ;
}
.unset {
     color : unset;
     border : unset;
}
  1. 由于 color 是可继承样式,设置了 color: unset 的元素,最终表现为了父级的颜色 red

  2. 由于 border 是不可继承样式,设置了 border: unset 的元素,最终表现为 border: initial ,也就是默认 border 样式,无边框。

CodePen Demo -- unset Demo;

unset 的一些妙用

例如下面这种情况,在我们的页面上有两个结构类似的 position: fixed 定位元素。

区别是其中一个是 top:0; left: 0;,另一个是 top:0; right: 0;。其他样式相同。

假设样式结构如下:

1
2
3
4
< div  class="container">
     < div  class="left">fixed-left</ div >
     < div  class="right">fixed-right</ div >
</ div >

通常而言,样式如下:

1
2
3
4
5
6
7
8
9
10
11
12
. left ,
. right  {
     position fixed ;
     top 0 ;   
     ...
}
. left  {
     left 0 ;
}
. right  {
     right 0 ;
}

使用 unset 的方法:

1
2
3
4
5
6
7
8
9
10
11
. left ,
. right  {
     position fixed ;
     top 0 ;   
     left 0 ;
     ...
}
. right  {
     left : unset;
     right 0 ;
}

CodePen Demo -- unset Demo;

到此本文结束,如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。

文章转载:谈谈一些有趣的CSS题目(十五)-- 谈谈 CSS 关键字 initial、inherit 和 unset - ChokCoco - 博客园

<think>嗯,用户想了解CSS中的initialinherit这些特殊值的含义使用方法,同时还要解决在修改大部分元素颜色时保留小部分默认颜色的问题。让我先回忆一下相关知识。 首先,initial关键字的作用是把CSS属性重置为默认值。比如,如果用户给一个div设置了红色,但里面的某个元素用了initial,那这个元素就会恢复成默认颜色,比如黑色。这在需要撤销样式时很有用,特别是当用户不想继承父元素样式的时候。 然后是inherit,这个关键字让元素继承父元素的样式值。比如,如果父元素颜色是蓝色,子元素设置color: inherit的话,就会继承蓝色。这在需要保持样式一致性的时候很有用,尤其是当父元素的样式可能动态变化时。 接下来,用户的问题是如何在修改90%元素颜色的同时,让剩下的10%保持默认。根据之前的回答,用户可能已经尝试过在顶级元素设置颜色,但发现所有子元素都跟着变了。这时候需要用initial或者inherit来覆盖。 比如,用户可能在全局设置了颜色,但某些特定元素需要保持默认。这时候可以用类名或者特定选择器选中那些元素,设置color: initial,这样它们就会忽略全局设置,使用浏览器默认的颜色。或者如果父元素有设置颜色,子元素需要继承的话,可以用inherit。 不过要注意,有些元素的默认样式可能不是继承的。比如,链接的颜色通常由浏览器默认样式表设定,这时候可能需要显式地设置initial来覆盖。另外,使用initial时要确保了解属性的默认值是什么,否则可能会出现预期外的结果。 用户可能遇到的问题还包括选择器的优先级。如果全局样式用了更具体的选择器,可能需要用!important来覆盖,但最好避免,可以通过更合理的选择器结构来解决。比如,用类名排除法,或者作用域隔离,把需要保留默认样式的元素放在不同的容器里,避免被全局样式影响。 另外,参考之前的回答,用户可能在使用VueVant组件库,所以在组件化开发中,如何局部覆盖样式。这时候作用域隔离或者CSS变量覆盖可能更有效。比如,使用Vant的CSS变量,全局修改变量值,然后在特定区域重置为initial,这样就能保留默认样式。 还需要考虑浏览器兼容性,虽然initialinherit在现代浏览器中支持良好,但旧版本可能需要前缀或者替代方案。但用户可能更关注现代浏览器的解决方案。 总结一下,用户的需求是理解initialinherit的用法,并应用到实际场景中,确保部分元素不受全局样式影响。需要结合这些关键字的作用,合理选择选择器,并注意样式优先级继承机制。</think>--- ### CSS特殊值解析与应用场景 #### 一、核心概念对比表 | 值 | 作用原理 | 典型应用场景 | 注意事项 | |-----------|------------------------------------|----------------------------------|------------------------------| | `initial` | 强制属性使用浏览器**默认初始值** | 重置第三方库样式 | 需要了解各属性默认值 | | `inherit` | 强制继承**父元素**的计算值 | 创建样式继承链 | 受父元素层叠规则影响 | | `unset` | 自动选择`inherit`或`initial` | 智能重置样式 | 需要兼容性处理 | --- ### 二、关键特性详解 #### 1. `initial` 硬复位 - **作用机制**:将CSS属性值重置为规范定义的初始状态 - **代码示例**: ```css .button { color: initial; /* 恢复为默认黑色 */ background: initial; /* 恢复为透明背景 */ } ``` - **实际应用**:在Vant组件库中重置被修改的按钮样式 ```css /* 恢复特定按钮的默认样式 */ .reset-button { --van-button-primary-background: initial; /* 恢复Vant默认蓝 */ border-radius: initial; } ``` #### 2. `inherit` 继承强化 - **继承规则**:跨越常规继承限制强制继承[^2] - **代码示例**: ```html <div style="color: #1890ff"> <span class="force-inherit">继承文字颜色</span> </div> <style> .force-inherit { color: inherit; /* 强制继承父级蓝色 */ } </style> ``` #### 3. 组合使用技巧 ```css /* 智能重置方案 */ .smart-reset { color: unset; /* 自动选择继承或初始值 */ font-size: inherit; /* 保持父级字号 */ background: initial; /* 清除背景设置 */ } ``` --- ### 三、保留默认颜色解决方案 #### 1. 选择器精准定位 ```css /* 修改90%元素 */ .container *:not(.keep-default) { color: #1677ff; /* 新主题色 */ } /* 保持10%默认 */ .keep-default { color: initial; /* 恢复浏览器默认黑色 */ } ``` #### 2. CSS变量控制 ```css :root { --main-color: #1677ff; /* 新主色 */ } /* 全局应用新颜色 */ body { color: var(--main-color); } /* 特定区域保持默认 */ .default-section { --main-color: initial; /* 重置为默认黑色 */ } ``` #### 3. 层叠顺序控制 ```html <style> /* 基础修改 */ .wrapper { color: #1677ff } /* 通过更具体的选择器保留默认 */ .original-area .content { color: initial !important; /* 强制覆盖 */ } </style> <div class="wrapper"> <div class="original-area"> <div class="content">保持默认颜色</div> </div> </div> ``` --- ### 四、实践注意事项 1. **样式优先级**:`initial`不会影响选择器权重计算 2. **默认值差异**:不同元素的默认值可能不同(如`<button>`自带padding) 3. **继承限制**:部分属性天生不可继承(如`background`) 4. **浏览器兼容**:IE不支持`initial`,需用`all: unset`替代 --- ### 五、调试验证方法 1. 浏览器开发者工具检查`Computed`面板 2. 通过控制台获取实际值: ```javascript // 检查元素最终应用的颜色值 window.getComputedStyle(element).color ``` 3. 使用`@support`检测特性支持: ```css @supports (color: initial) { /* 现代浏览器专属样式 */ } ``` --- ### 相关问题 1. 如何优雅地重置整个组件的样式? 2. CSS `revert` 与 `initial` 有何区别? 3. 在响应式布局中如何结合使用这些特殊值? 4. 如何避免`initial`与浏览器默认样式冲突?
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值