CSS(Cascading Style Sheets ,层叠样式表)是网页"颜值"的缔造者。它通过将 属性(property) 与 值(value) 配对成声明,再由多个声明组成 声明块 ,最终通过 选择器 将这些样式精准地应用到 HTML 元素上。
css
p {
color: blue;
font-size: 16px;
}
上面这段代码就是一个典型的 CSS 规则:p 是选择器,花括号内是声明块,包含两个声明。
🔍 选择器优先级:谁说了算?
当多个规则作用于同一个元素时,CSS 需要决定"听谁的"------这就是 层叠(Cascading) 的核心机制。优先级按"个十百千"来记忆:
- 千位 :元素选择器(如
p)、伪元素(如::before) - 百位 :类选择器(
.class)、属性选择器([type="text"])、伪类(:hover) - 十位 :ID 选择器(
#id) - 个位 :行内样式(
style="...") - 特殊存在 :
!important------ 它拥有最高权限,但请慎用⚠️,容易破坏样式的可维护性。
举个例子:
bash
<p id="intro" class="highlight">这是一段文字。</p>
如果同时有:
css
p { color: black; } /* 千位 */
.highlight { color: green; } /* 百位 */
#intro { color: red; } /* 十位 */
最终文字会是 红色,因为 ID 选择器优先级更高。
🧪 伪类 vs 伪元素:别再混淆!
伪类(Pseudo-classes)
描述元素的状态,比如:
:hover(鼠标悬停):focus(获得焦点):nth-child(n)/:nth-of-type(n)(选第几个子元素)
💡 小知识:
:nth-child(2)选的是父元素下的第二个子元素,不管类型;:nth-of-type(2)选的是同类型中的第二个 。
例如在<div><p>1</p><div>A</div><p>2</p></div>中,p:nth-child(3)能选中第二个<p>,但p:nth-child(2)选不到任何东西!
伪元素(Pseudo-elements)
用于创建不存在于 HTML 中的内容,常用:
::before/::after:在元素前后插入内容::first-line/::first-letter:美化首行或首字
css
a::after {
content: " ➡️";
color: gray;
}
这样每个链接后面都会自动加上一个箭头图标,非常适合做"查看更多"这类提示 ✨
🧱 布局与定位:inline 的小秘密
你可能注意到,有些 inline 元素(如 <span>)不支持 transform 或 width/height。这是因为 inline 元素只占据内容所需宽度,不能设置盒模型属性。
但有趣的是:当你给一个 inline 元素设置 position: absolute,它会自动变成 inline-block 行为!这意味着你可以自由设置宽高、使用 transform 等------这是浏览器的隐式转换机制。
css
<span style="position: absolute; transform: rotate(10deg);">旋转我!</span>
✅ 这样是有效的!
⚖️ margin 重叠:布局中的"幽灵现象"
在垂直方向上,相邻块级元素的上下 margin 会发生合并(collapse) ,最终间距取两者中的最大值,而不是相加。
css
<div style="margin-bottom: 20px;">A</div>
<div style="margin-top: 30px;">B</div>
A 和 B 之间的实际间距是 30px,不是 50px!这是很多初学者踩过的坑 🕳️
解决方法包括:
- 使用
padding代替部分 margin - 给父容器设置
overflow: hidden - 使用 Flex 或 Grid 布局(它们不会发生 margin 重叠)
📏 单位小谈:px 是怎么处理的?
px(像素)是最常用的绝对单位。虽然叫"绝对",但在现代浏览器中,它其实是相对于设备像素比(DPR)进行缩放的逻辑像素。比如在 Retina 屏上,1px 可能对应 2 个物理像素,但开发者无需关心,浏览器会自动处理。
对于响应式设计,更推荐使用相对单位:
em/rem:基于字体大小%:基于父元素vw/vh:基于视口
💡 总结:CSS 是一门"层叠的艺术"
从选择器的精准匹配,到优先级的微妙博弈;从伪类的状态响应,到伪元素的内容增强;再到布局中的细节陷阱......CSS 不只是"调颜色",而是一套精密的视觉控制语言。
掌握它,你就能让静态的 HTML "活"起来,像海浪一样层层推进,又井然有序 🌊✨
记住:好的 CSS = 清晰的选择器 + 合理的层叠 + 对盒模型的深刻理解。
继续加油,前端之路,风景这边独好!🚀