Skip to content
← 返回CSS列表
规范与参考

CSS:层叠、盒模型与布局 ​

规则与选择器 ​

CSS 是样式表语言。规则由选择器和声明块组成,声明写为 属性: 值;。外部文件适合共享样式,在 HTML 的 head 引入:

html
<link rel="stylesheet" href="styles.css">
css
/* styles.css */
body { font-family: system-ui, sans-serif; }
.note { color: #253858; }
.note > strong { color: #a32020; }
input[required] { border-color: #667; }
button:hover { background: #eee; }
button:focus-visible { outline: 3px solid #185adb; }

元素、类、属性、伪类选择器用于选中元素;空格是后代关系,> 是直接子元素,逗号合并多个选择器。不要为了提高优先级不断叠加 ID。

层叠与继承 ​

同一元素同一属性有多个候选值时,浏览器先比较规则来源与重要性、层叠层等,再比较选择器优先级,最后比较作用域接近程度和出现顺序。不能简单说“行内样式永远最高”或“后写总覆盖前写”。详见 MDN 层叠说明。

在同一来源、层级、重要性等条件相同的常见情况中,ID 高于类/属性/伪类,高于元素/伪元素。!important 会改变层叠优先级,先用开发者工具定位冲突,再考虑是否必要。

文字颜色和字体通常继承,边框与布局尺寸通常不继承。用 inherit 显式继承,用 initial 回到初始值,用 unset 按该属性是否继承决定行为。

盒模型与尺寸 ​

元素外部尺寸由内容、内边距、边框、外边距共同影响。border-box 让声明的宽度包含 padding 和 border,便于布局计算。

css
*, *::before, *::after { box-sizing: border-box; }
body { margin: 0; padding: 1rem; }
.card {
  max-width: 48rem;
  margin: 0 auto;
  padding: 1rem;
  border: 1px solid #ccd;
}
img { max-width: 100%; height: auto; }

rem 相对根元素字号,% 的参照因属性而异,vh/vw 相对视口。不要把所有尺寸写死为像素;也不要把 % 一概解释为父元素宽度。

Flex、Grid 与响应式 ​

Flex 适合一维排列,Grid 适合行列布局。先有正常文档流,再逐步增强;绝对定位会脱离正常流,通常不作为整页布局的起点。

给 HTML 示例的 main 添加 class="page",即可配合以下样式:

css
:root { --gap: 1rem; --accent: #185adb; }
.page { display: grid; gap: var(--gap); }
nav { display: flex; flex-wrap: wrap; gap: var(--gap); }
section { min-width: 0; padding: 1rem; border: 1px solid #ccd; }
input { max-width: 100%; }

@media (min-width: 48rem) {
  .page { grid-template-columns: 2fr 1fr; }
}

窗口较窄时单列,达到断点后双列。断点由内容是否拥挤决定,不按设备型号罗列。

常用函数与边界 ​

用途示例说明
颜色rgb(24 90 219 / 80%)、hsl(210 60% 40%)明确颜色和透明度
长度计算calc(100% - 2rem)、min(100%, 48rem)、clamp(1rem, 2vw, 2rem)值需符合所在属性的语法
变换transform: translateX(1rem) rotate(5deg)变换顺序影响结果,不重新排布正常流
渐变background: linear-gradient(to right, white, #dde)渐变是一种图像
资源url("./image.png")外部 CSS 中相对路径相对样式表文件
自定义属性var(--accent, blue)提供未定义变量时的后备值
环境与内容env(safe-area-inset-bottom, 0px)、content: attr(href)按属性与浏览器支持判断适用范围

lighten、darken 以及接收颜色参数的 saturate($color, $amount) 是 Sass 等预处理器中的颜色函数。原生 CSS 也有滤镜函数 filter: saturate(150%),它处理渲染结果,不能混同为 Sass 调色函数。image()、element()、paint() 等也不能假定所有目标浏览器都支持;需要时查具体兼容性,而不是整组当作通用能力。

验证与练习 ​

先给 HTML 中一个 section 添加 class="card",给记录列表中的一个 li 添加 class="note",再在浏览器检查 .card 的盒模型与计算样式;把窗口缩窄到 320px,确认没有意外横向滚动。删除 .note 的颜色声明后观察该记录的继承与回退,再给按钮添加清晰的键盘焦点样式。继续读 JavaScript。

参考核对

在border-box下,.card的声明宽度包含两侧padding与border,margin仍在外部;窄屏单列来自媒体查询未命中,双列仅在48rem及以上生效。删除.note颜色声明后查看继承链,不能预设一定变黑。焦点可使用上文button:focus-visible规则,通过Tab而非仅鼠标悬停核对轮廓;320px下若仍溢出,先查看实际超宽元素及其最小尺寸。

深入课程已接续:层叠层与固有尺寸。基础内容与旧锚点保留,按当前路线进入完整机制和实践。