1. 可继承属性(Inherited Properties)
子元素会继承父元素的这些属性值,除非子元素显式设置不同的值。
文本相关
css
/* 字体属性 */
font-family /* 字体系列 */
font-size /* 字体大小 */
font-weight /* 字体粗细 */
font-style /* 字体样式 */
font-variant /* 字体变体 */
line-height /* 行高 */
/* 文本属性 */
color /* 文本颜色 */
text-align /* 文本对齐 */
text-indent /* 文本缩进 */
text-transform /* 文本转换(大小写) */
letter-spacing /* 字母间距 */
word-spacing /* 单词间距 */
white-space /* 空白处理方式 */
direction /* 文本方向 */
unicode-bidi /* Unicode 双向算法 */
列表相关
css
list-style-type /* 列表标记类型 */
list-style-image /* 列表标记图像 */
list-style-position /* 列表标记位置 */
list-style /* 列表样式简写 */
表格相关
css
border-collapse /* 表格边框合并 */
border-spacing /* 表格边框间距 */
caption-side /* 表格标题位置 */
empty-cells /* 空单元格显示 */
其他
css
visibility /* 可见性 */
cursor /* 鼠标指针样式 */
quotes /* 引号样式 */
2. 不可继承属性(Non-inherited Properties)
子元素不会自动继承这些属性,需要为每个元素单独设置。
盒模型相关
css
/* 尺寸 */
width /* 宽度 */
height /* 高度 */
min-width /* 最小宽度 */
max-height /* 最大高度 */
/* 内外边距 */
margin /* 外边距 */
padding /* 内边距 */
/* 边框 */
border /* 边框 */
border-width /* 边框宽度 */
border-style /* 边框样式 */
border-color /* 边框颜色 */
border-radius /* 边框圆角 */
outline /* 轮廓 */
背景相关
css
background /* 背景 */
background-color /* 背景颜色 */
background-image /* 背景图像 */
background-position /* 背景位置 */
background-repeat /* 背景重复 */
background-size /* 背景大小 */
background-clip /* 背景裁剪 */
background-origin /* 背景定位区域 */
定位与布局
css
/* 定位 */
position /* 定位方式 */
top, right, bottom, left /* 定位偏移 */
z-index /* 堆叠顺序 */
float /* 浮动 */
clear /* 清除浮动 */
/* 显示 */
display /* 显示类型 */
overflow /* 溢出处理 */
visibility /* 可见性(虽然可继承,但行为特殊) */
clip /* 裁剪 */
Flexbox & Grid
css
/* Flexbox */
flex /* 弹性项目属性 */
flex-direction /* 主轴方向 */
justify-content /* 主轴对齐 */
align-items /* 交叉轴对齐 */
/* Grid */
grid-template-columns /* 网格列定义 */
grid-template-rows /* 网格行定义 */
grid-gap /* 网格间距 */
其他不可继承属性
css
/* 变换与过渡 */
transform /* 变换 */
transition /* 过渡 */
opacity /* 不透明度 */
/* 视觉效果 */
box-shadow /* 盒子阴影 */
text-shadow /* 文字阴影 */
filter /* 滤镜效果 */
/* 表格布局 */
table-layout /* 表格布局算法 */
3. 继承控制关键字
inherit - 显式继承
css
/* 强制继承父元素的值 */
.child {
border: inherit; /* 继承父元素的边框 */
background: inherit; /* 继承父元素的背景 */
margin: inherit; /* 继承父元素的外边距 */
}
initial - 使用初始值
css
/* 使用属性的初始默认值 */
.child {
color: initial; /* 重置为默认颜色(通常是黑色) */
display: initial; /* 重置为 display: inline */
}
unset - 重置为继承或初始值
css
/* 如果是可继承属性,则继承父元素值 */
/* 如果是不可继承属性,则使用初始值 */
.child {
color: unset; /* 继承父元素的颜色 */
border: unset; /* 重置为 border: none */
}
revert - 恢复为浏览器默认值
css
/* 恢复为浏览器默认样式表中的值 */
.child {
display: revert; /* 恢复为浏览器默认的 display 值 */
}
4. 继承规则与示例
继承的工作方式
css
/* 父元素设置 */
.parent {
font-family: Arial, sans-serif;
color: #333;
font-size: 16px;
background: #f0f0f0;
padding: 20px;
}
/* 子元素自动继承 */
.child {
/* 继承 font-family, color, font-size */
/* 不继承 background, padding */
/* 需要显式设置不可继承属性 */
background: inherit; /* 显式继承背景 */
padding: 10px; /* 设置自己的内边距 */
}
特殊继承行为
css
/* 百分比值的继承 */
.parent {
font-size: 20px; /* 设置绝对值 */
}
.child {
font-size: 120%; /* 相对于父元素的 20px = 24px */
}
/* em 单位的继承 */
.parent {
font-size: 20px;
}
.child {
font-size: 1.2em; /* 相对于父元素的 20px = 24px */
padding: 1em; /* 相对于自己的 font-size = 24px */
}
/* rem 单位的继承 */
html {
font-size: 16px; /* 根元素字体大小 */
}
.child {
font-size: 1.5rem; /* 相对于根元素的 16px = 24px */
}
5. 实用技巧与最佳实践
全局继承设置
css
/* 使所有元素继承盒模型 */
* {
box-sizing: border-box;
}
/* 设置可继承属性的默认值 */
body {
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto;
line-height: 1.5;
color: #333;
}
/* 链接颜色继承 */
a {
color: inherit; /* 继承父元素的颜色 */
text-decoration: none;
}
表单元素继承处理
css
/* 表单元素默认不继承字体属性 */
input, button, textarea, select {
font-family: inherit; /* 显式继承字体 */
font-size: inherit; /* 显式继承字号 */
color: inherit; /* 显式继承颜色 */
}
创建可继承工具类
css
/* 可继承的文本工具类 */
.text-primary {
color: #007bff;
}
.text-bold {
font-weight: bold;
}
.text-uppercase {
text-transform: uppercase;
}
/* 使用示例 */
<div class="text-primary">
父元素
<div>子元素也会是蓝色</div>
<button class="text-bold">按钮会加粗</button>
</div>
调试继承问题
css
/* 使用开发者工具检查继承 */
.parent {
/* 在浏览器开发者工具中查看:
- Computed 标签页查看最终计算值
- 带有小箭头的属性表示继承值
- Styles 标签页查看继承链 */
}
/* 强制查看所有继承值 */
* {
/* 使用 inherit !important 调试 */
/* color: inherit !important; */
}
6. 常见陷阱与解决方案
陷阱1:按钮不继承字体
css
/* 问题 */
body { font-family: 'Custom Font'; }
button { /* 不继承字体,使用系统默认字体 */ }
/* 解决方案 */
button { font-family: inherit; }
陷阱2:表单元素不继承颜色
css
/* 问题 */
.dark-theme { color: white; }
input { /* 仍然是黑色文本 */ }
/* 解决方案 */
input { color: inherit; }
.dark-theme input { color: white; }
陷阱3:链接颜色混乱
css
/* 问题 */
.card { color: #333; }
.card a { /* 仍然是默认蓝色 */ }
/* 解决方案 */
.card a { color: inherit; }
/* 或明确设置 */
.card a { color: currentColor; }
陷阱4:伪元素继承
css
/* 伪元素默认不继承,需要显式设置 */
.parent::before {
content: "→ ";
color: inherit; /* 显式继承颜色 */
font-family: inherit; /* 显式继承字体 */
}
理解 CSS 属性的继承行为对于编写可维护、高效的样式至关重要。合理利用继承可以减少重复代码,确保界面的一致性。