[TOC]
# 简介
在css中,每个[CSS 属性定义](https://developer.mozilla.org/zh-CN/docs/CSS/CSS_Reference)的概述都指出了这个属性是默认继承的("Inherited: Yes") 还是默认不继承的("Inherited: no")。这决定了当你没有为元素的属性指定值时该如何计算值。
<br>
<br>
# 继承属性
当元素的一个继承属性 (inherited property)没有指定值时,则取父元素的同属性的计算值(computed value)。只有文档根元素取该属性的概述中给定的初始值(initial value)(这里的意思应该是在该属性本身的定义中的默认值)。
<br>
继承属性的一个典型例子就是 color 属性。给出以下样式规则:
~~~
p { color: green; }
~~~
若将其应用在下面这段 HTML 代码上…
~~~
<p>This paragraph has <em>emphasized text</em> in it.</p>
~~~
文本 "emphasized text" 就会呈现为绿色,因为 em 元素继承了 p 元素 color 属性的值,而没有获取 color 属性的初始值(这个 color 值用于页面没有指定 color 时的根元素)。
<br>
<br>
# 非继承属性
当元素的一个非继承属性(在Mozilla code 里有时称之为reset property )没有指定值时,则取属性的初始值 initial value(该值在该属性的概述里被指定)。
<br>
非继承属性的一个典型例子就是 border 属性。给出以下样式规则:
~~~
p { border: medium solid; }
~~~
<br>
若将其应用在下面这段 HTML 代码
~~~
<p>This paragraph has <em>emphasized text</em> in it.</p>
~~~
文本 "emphasized text" 就没有边框,因为 border-style 属性的初始值为none。
<br>
inherit 关键字允许显式的声明继承性,它对继承和非继承属性都生效。
<br>
可以使用 all 简写属性一次控制所有属性的继承,该属性将其值应用于所有属性,例如:
~~~
font: {
all: revert;
font-size: 200%;
font-weight: bold;
}
~~~
<br>
这会将 font 属性的样式恢复为用户代理(浏览器)的默认值,除非存在用户样式表,在这种情况下使用该样式表。然后它将字体大小加倍并应用 font-weight 属性 为"bold"。
<br>
<br>
# 相关属性
## inherit
inherit 关键字使得元素获取其父元素的计算值。它可以应用于任何CSS属性,包括CSS简写 all。
<br>
对于继承属性,inherit 关键字只是增强了属性的默认行为,只有在重载(overload)其它规则的时候被使用。对于非继承属性,inherit 这指定的行为通常没有多大意义,一般使用使用 initial 或 unset 作为替代。
<br>
继承始终来自文档树中的父元素,即使父元素不是包含块。
<br>
## initial
initial CSS关键字将属性的初始(或默认)值应用于元素。不应将初始值与浏览器样式表指定的值混淆。它可以应用于任何CSS属性。这包括CSS简写all,initial 可用于将所有CSS属性恢复到其初始状态。
> IE不支持
<br>
## unset
如果 unset 的CSS关键字从其父级继承,则将该属性重新设置为继承的值,如果没有继承父级样式,则将该属性重新设置为初始值。换句话说这个unset关键字会优先用 inherit 的样式,其次会应该用initial的样式。它允许应用任意的CSS样式,包括CSS缩写 all 关键字。
> IE不支持,safari9-不支持,ios9.2-不支持,android4.4.4-不支持
<br>
继承属性 color
~~~html
<p>This text is red.</p>
<div class="foo">
<p>This text is also red.</p>
</div>
<div class="bar">
<p>This text is green (default inherited value).</p>
</div>
~~~
<br>
~~~css
.foo {
color: blue;
}
.bar {
color: green;
}
p {
color: red;
}
.bar p {
color: unset;
}
~~~
<br>
![](https://box.kancloud.cn/3cd3d757dd94d5ccaccd0dc98c94a394_389x188.png)
<br>
非继承属性 border
~~~css
div {
border: 1px solid green;
}
p {
border: 1px solid red;
}
.bar p {
border-color: unset;
}
~~~
<br>
~~~html
<p>This text has a red border</p>
<div>
<p>This text has a red border</p>
</div>
<div class="bar">
<p>This text has has a black border (initial default, not inherited)</p>
</div>
~~~
<br>
![](https://box.kancloud.cn/a5ffdab337d4f47fa3c09d0425ef3ee0_657x210.png)
<br>
## revert
表示样式表中定义的元素属性的默认值。若用户定义样式表中显式设置,则按此设置;否则,按照浏览器定义样式表中的样式设置;否则,等价于unset 。
> 只有safari9.1+和ios9.3+支持
~~~html
<section>
<p>This is a section!</p>
<aside class="widget">
<p>This is a little widget.</p>
</aside>
</section>
~~~
<br>
~~~css
section {
color: blue;
font-family: sans-serif;
font-weight: bold;
}
.widget {
all: revert;
}
~~~
<br>
![](https://box.kancloud.cn/03474bfdb906c330efa09dd2d2275c17_228x124.png)
<br>
<br>
# 可继承及不可继承属性
## 无继承性的属性
* display:规定元素应该生成的框的类型
* 文本属性:
* vertical-align:垂直文本对齐
* text-decoration:规定添加到文本的装饰
* text-shadow:文本阴影效果
* white-space:空白符的处理
* unicode-bidi:设置文本的方向
* 盒子模型的属性:width、height、margin 、margin-top、margin-right、margin-bottom、margin-left、border、border-style、border-top-style、border-right-style、border-bottom-style、border-left-style、border-width、border-top-width、border-right-right、border-bottom-width、border-left-width、border-color、border-top-color、border-right-color、border-bottom-color、border-left-color、border-top、border-right、border-bottom、border-left、padding、padding-top、padding-right、padding-bottom、padding-left
* 背景属性:background、background-color、background-image、background-repeat、background-position、background-attachment
* 定位属性:float、clear、position、top、right、bottom、left、min-width、min-height、max-width、max-height、overflow、clip、z-index
* 生成内容属性:content、counter-reset、counter-increment
* 轮廓样式属性:outline-style、outline-width、outline-color、outline
* 页面样式属性:size、page-break-before、page-break-after
* 声音样式属性:pause-before、pause-after、pause、cue-before、cue-after、cue、play-during
<br>
## 有继承性的属性
* 字体系列属性
* font:组合字体
* font-family:规定元素的字体系列
* font-weight:设置字体的粗细
* font-size:设置字体的尺寸
* font-style:定义字体的风格
* font-variant:设置小型大写字母的字体显示文本,这意味着所有的小写字母均会被转换为大写,但是所有使用小型大写字体的字母与其余文本相比,其字体尺寸更小。
* font-stretch:对当前的font-family 进行伸缩变形。所有主流浏览器都不支持。
* font-size-adjust:为某个元素规定一个aspect 值,这样就可以保持首选字体的 x-height。
* 文本系列属性
* text-indent:文本缩进
* text-align:文本水平对齐
* line-height:行高
* word-spacing:增加或减少单词间的空白(即字间隔)
* letter-spacing:增加或减少字符间的空白(字符间距)
* text-transform:控制文本大小写
* direction:规定文本的书写方向
* color:文本颜色
* 元素可见性:visibility
* 表格布局属性:caption-side、border-collapse、border-spacing、empty-cells、table-layout
* 列表布局属性:list-style-type、list-style-image、list-style-position、list-style
* 生成内容属性:quotes
* 光标属性:cursor
* 页面样式属性:page、page-break-inside、windows、orphans
* 声音样式属性:speak、speak-punctuation、speak-numeral、speak-header、speech-rate、volume、voice-family、pitch、pitch-range、stress、richness、、azimuth、elevation
<br>
## 所有元素可以继承的属性
* 元素可见性:visibility
* 光标属性:cursor
<br>
## 内联元素可以继承的属性
* 字体系列属性
* 除text-indent、text-align之外的文本系列属性
<br>
## 块级元素可以继承的属性
* text-indent、text-align
<br>
<br>
# 参考资料
[MDN - inherit](https://developer.mozilla.org/zh-CN/docs/Web/CSS/inherit)
[CSS中可以和不可以继承的属性](http://www.cnblogs.com/thislbq/p/5882105.html)
- 第一部分 HTML
- meta
- meta标签
- HTML5
- 2.1 语义
- 2.2 通信
- 2.3 离线&存储
- 2.4 多媒体
- 2.5 3D,图像&效果
- 2.6 性能&集成
- 2.7 设备访问
- SEO
- Canvas
- 压缩图片
- 制作圆角矩形
- 全局属性
- 第二部分 CSS
- CSS原理
- 层叠上下文(stacking context)
- 外边距合并
- 块状格式化上下文(BFC)
- 盒模型
- important
- 样式继承
- 层叠
- 属性值处理流程
- 分辨率
- 视口
- CSS API
- grid(未完成)
- flex
- 选择器
- 3D
- Matrix
- AT规则
- line-height 和 vertical-align
- CSS技术
- 居中
- 响应式布局
- 兼容性
- 移动端适配方案
- CSS应用
- CSS Modules(未完成)
- 分层
- 面向对象CSS(未完成)
- 布局
- 三列布局
- 单列等宽,其他多列自适应均匀
- 多列等高
- 圣杯布局
- 双飞翼布局
- 瀑布流
- 1px问题
- 适配iPhoneX
- 横屏适配
- 图片模糊问题
- stylelint
- 第三部分 JavaScript
- JavaScript原理
- 内存空间
- 作用域
- 执行上下文栈
- 变量对象
- 作用域链
- this
- 类型转换
- 闭包(未完成)
- 原型、面向对象
- class和extend
- 继承
- new
- DOM
- Event Loop
- 垃圾回收机制
- 内存泄漏
- 数值存储
- 连等赋值
- 基本类型
- 堆栈溢出
- JavaScriptAPI
- document.referrer
- Promise(未完成)
- Object.create
- 遍历对象属性
- 宽度、高度
- performance
- 位运算
- tostring( ) 与 valueOf( )方法
- JavaScript技术
- 错误
- 异常处理
- 存储
- Cookie与Session
- ES6(未完成)
- Babel转码
- let和const命令
- 变量的解构赋值
- 字符串的扩展
- 正则的扩展
- 数值的扩展
- 数组的扩展
- 函数的扩展
- 对象的扩展
- Symbol
- Set 和 Map 数据结构
- proxy
- Reflect
- module
- AJAX
- ES5
- 严格模式
- JSON
- 数组方法
- 对象方法
- 函数方法
- 服务端推送(未完成)
- JavaScript应用
- 复杂判断
- 3D 全景图
- 重载
- 上传(未完成)
- 上传方式
- 文件格式
- 渲染大量数据
- 图片裁剪
- 斐波那契数列
- 编码
- 数组去重
- 浅拷贝、深拷贝
- instanceof
- 模拟 new
- 防抖
- 节流
- 数组扁平化
- sleep函数
- 模拟bind
- 柯里化
- 零碎知识点
- 第四部分 进阶
- 计算机原理
- 数据结构(未完成)
- 算法(未完成)
- 排序算法
- 冒泡排序
- 选择排序
- 插入排序
- 快速排序
- 搜索算法
- 动态规划
- 二叉树
- 浏览器
- 浏览器结构
- 浏览器工作原理
- HTML解析
- CSS解析
- 渲染树构建
- 布局(Layout)
- 渲染
- 浏览器输入 URL 后发生了什么
- 跨域
- 缓存机制
- reflow(回流)和repaint(重绘)
- 渲染层合并
- 编译(未完成)
- Babel
- 设计模式(未完成)
- 函数式编程(未完成)
- 正则表达式(未完成)
- 性能
- 性能分析
- 性能指标
- 首屏加载
- 优化
- 浏览器层面
- HTTP层面
- 代码层面
- 构建层面
- 移动端首屏优化
- 服务器层面
- bigpipe
- 构建工具
- Gulp
- webpack
- Webpack概念
- Webpack工具
- Webpack优化
- Webpack原理
- 实现loader
- 实现plugin
- tapable
- Webpack打包后代码
- rollup.js
- parcel
- 模块化
- ESM
- 安全
- XSS
- CSRF
- 点击劫持
- 中间人攻击
- 密码存储
- 测试(未完成)
- 单元测试
- E2E测试
- 框架测试
- 样式回归测试
- 异步测试
- 自动化测试
- PWA
- PWA官网
- web app manifest
- service worker
- app install banners
- 调试PWA
- PWA教程
- 框架
- MVVM原理
- Vue
- Vue 饿了么整理
- 样式
- 技巧
- Vue音乐播放器
- Vue源码
- Virtual Dom
- computed原理
- 数组绑定原理
- 双向绑定
- nextTick
- keep-alive
- 导航守卫
- 组件通信
- React
- Diff 算法
- Fiber 原理
- batchUpdate
- React 生命周期
- Redux
- 动画(未完成)
- 异常监控、收集(未完成)
- 数据采集
- Sentry
- 贝塞尔曲线
- 视频
- 服务端渲染
- 服务端渲染的利与弊
- Vue SSR
- React SSR
- 客户端
- 离线包
- 第五部分 网络
- 五层协议
- TCP
- UDP
- HTTP
- 方法
- 首部
- 状态码
- 持久连接
- TLS
- content-type
- Redirect
- CSP
- 请求流程
- HTTP/2 及 HTTP/3
- CDN
- DNS
- HTTPDNS
- 第六部分 服务端
- Linux
- Linux命令
- 权限
- XAMPP
- Node.js
- 安装
- Node模块化
- 设置环境变量
- Node的event loop
- 进程
- 全局对象
- 异步IO与事件驱动
- 文件系统
- Node错误处理
- koa
- koa-compose
- koa-router
- Nginx
- Nginx配置文件
- 代理服务
- 负载均衡
- 获取用户IP
- 解决跨域
- 适配PC与移动环境
- 简单的访问限制
- 页面内容修改
- 图片处理
- 合并请求
- PM2
- MongoDB
- MySQL
- 常用MySql命令
- 自动化(未完成)
- docker
- 创建CLI
- 持续集成
- 持续交付
- 持续部署
- Jenkins
- 部署与发布
- 远程登录服务器
- 增强服务器安全等级
- 搭建 Nodejs 生产环境
- 配置 Nginx 实现反向代理
- 管理域名解析
- 配置 PM2 一键部署
- 发布上线
- 部署HTTPS
- Node 应用
- 爬虫(未完成)
- 例子
- 反爬虫
- 中间件
- body-parser
- connect-redis
- cookie-parser
- cors
- csurf
- express-session
- helmet
- ioredis
- log4js(未完成)
- uuid
- errorhandler
- nodeclub源码
- app.js
- config.js
- 消息队列
- RPC
- 性能优化
- 第七部分 总结
- Web服务器
- 目录结构
- 依赖
- 功能
- 代码片段
- 整理
- 知识清单、博客
- 项目、组件、库
- Node代码
- 面试必考
- 91算法
- 第八部分 工作代码总结
- 样式代码
- 框架代码
- 组件代码
- 功能代码
- 通用代码