正在加载...

CSS 媒体查询

响应式设计确立了思路:一棵 HTML 树、viewport meta、流式外壳、相对单位。媒体查询是开关 — 仅在条件成立时生效的 CSS 块(通常是视口宽度)。本课教语法与克制习惯;响应式图片与 Breakpoints 会继续加深工具箱。

媒体查询工具箱

📊 媒体查询一览

部件 日常作用
@media 打开条件 CSS 块
媒体特性(min-width、max-width、…) 浏览器求值的测试
and 要求列出的每个特性都匹配
逗号分隔的查询 逻辑 或 — 任一匹配列表即可
{ } 内的规则集 仅在查询匹配期间应用的样式
媒体类型(screen、print) 可选的输出介质过滤

没有查询时,每条规则都「始终开启」。有了查询,你保留上一课的稳固基础,并按层 叠加 变化 — 更宽的栏、更大的字号、不同导航 — 只在视口撑得住时才加。

@media 解剖

经典写法:括号里写特性,再跟一对花括号里的普通声明。宽度尽量用 rem 或 em — 比硬编码设备像素列表更能随根/排版设置缩放。

基础 min-width 媒体查询

css
.nav {
display: block;
}

@media (min-width: 48rem) {
.nav {
display: flex;
gap: 1rem;
}
}

用 min-width 做 mobile-first

在基础样式表里写窄屏布局。用 @media (min-width: …) 在视口变宽时 追加 增强。每一步只改一层清楚的东西 — 间距、栏或导航 — 不要每一步都重写整页。

Mobile-first 增强

css
.hero {
padding: 1rem;
font-size: 1.125rem;
}

@media (min-width: 40rem) {
.hero {
padding: 2rem;
font-size: 1.25rem;
}
}

@media (min-width: 64rem) {
.hero {
display: grid;
grid-template-columns: 1fr 1fr;
gap: 2rem;
}
}

用 max-width 做 desktop-first

若基础是宽屏布局,@media (max-width: …) 在阈值以下 收紧 样式 — 栏叠起来、减小 padding、简化 chrome。项目内保持一致:不要无故在纯 min-width 与纯 max-width 栈之间来回跳。

Desktop-first 收紧

css
.sidebar {
width: 16rem;
float: left;
}

@media (max-width: 50rem) {
.sidebar {
width: 100%;
float: none;
}
}

用 and 组合特性

把特性串起来,使 全部 必须匹配。适合范围(min 与 max 一起)或把宽度与另一特性配对。整段 @media 列表之间的逗号表示 或。

用 and 写范围

css
.card-grid {
display: grid;
gap: 1rem;
grid-template-columns: 1fr;
}

@media (min-width: 40rem) and (max-width: 63.99rem) {
.card-grid {
grid-template-columns: 1fr 1fr;
}
}

不止宽度 — 打印(以及克制的附加)

宽度是日常工具。像 print 这类类型会为纸张隐藏 chrome。偏好特性(例如 prefers-reduced-motion)属于无访问性打磨 — 这里少用;Breakpoints 课整理策略,无访问性课稍后讲动效。

简单打印样式

css
@media print {
.site-nav,
.ad-slot {
display: none;
}

body {
color: #000;
background: #fff;
}
}

克制的 breakpoint 习惯

选一份短的、有命名的宽度列表,对齐 你自己的 布局压力点 — 不是每一款手机型号。写进文档(例如「导航在 48rem 以下折叠」)。流式基础 + 少量查询,胜过按设备堆规则的森林。后续课覆盖图片与更完整的 breakpoint 计划。

自己动手

  1. 拿一个纵向堆叠的导航,加一条 @media (min-width: …) 把它切到 flex。
  2. 用 desktop-first 的 max-width 收紧重写同一思路 — 留意基础样式的差异。
  3. 用 min-width 和 max-width 加一条范围查询,只覆盖两栏区间。
  4. 用 @media print 隐藏装饰性横幅。
  5. 为练习页写三个命名 breakpoint — 列表保持简短。

常见错误

  • 为每个设备品牌单独写查询,而不是布局压力点
  • 忘记闭合 },导致后面的 CSS 被吞进查询里
  • 随意混用 min-width 与 max-width 栈,直到 cascade 自相冲突
  • 只靠查询,却忽略响应式设计课里的流式容器与相对单位
  • 在这里倒入长长的 breakpoint 目录 — 那门手艺在 Breakpoints 继续;图片在响应式图片课

小结

  • 媒体查询包裹 CSS,使其仅在条件匹配时生效
  • min-width 向上增强(mobile-first);max-width 向下收紧(desktop-first)
  • and 要求所有特性;查询之间的逗号充当或
  • 用少量、有命名、贴合真实布局需求的 breakpoints
  • 下一课:响应式图片 — 能缩放且不撑破栏的媒体

🧠 测试您的知识

准备开始

测试您的知识

通过这个互动测验挑战自己,看看你对这个主题的理解程度如何

❓
8
问题
🎯
70%
及格要求
♾️
∞
时间
🔄
∞
尝试次数

📝 说明

  • 仔细阅读每个问题
  • 为每个问题选择最佳答案
  • 您可以随时重新参加测验
  • 您的进度将显示在顶部