编程进阶网 编程进阶网
首页
  • 在线工具
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 加解密
  • 时间日期
  • 网络工具
  • 颜色设计
  • 二维码
  • 开发实用
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++编程技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接

杨充

专注编程 · 终身学习者
首页
  • 在线工具
  • JSON工具
  • 文本工具
  • 图片处理
  • 文档转化
  • 代码压缩
  • 加解密
  • 时间日期
  • 网络工具
  • 颜色设计
  • 二维码
  • 开发实用
  • 计算机原理
  • 操作系统
  • 网络协议
  • 数据库原理
  • 面向对象
  • 设计原则
  • 设计模式
  • 系统架构
  • 性能优化
  • 编程原理
  • 方案设计
  • 稳定可靠
  • 工程运维
  • 基础认知
  • 线性结构
  • 树与哈希
  • 工业级实现
  • 算法思想
  • 实战与综合
  • 算法题考核
  • C语言入门
  • C综合案例
  • C专栏博客
  • C标准集库
  • C++入门教程
  • C++综合案例
  • C++专栏博客
  • C++编程技巧
  • Java入门教程
  • Java综合案例
  • Java专栏博客
  • Go入门教程
  • Go综合案例
  • Go专栏博客
  • Go开发技巧
  • JavaScript入门
  • JavaScript高级
  • Android库解读
  • Android专栏
  • iOS ObjC入门
  • iOS Swift入门
  • iOS入门精通
  • Web之Html手册
  • Web之TypeScript
  • Web之Vue高级进阶
  • Linux之QML入门
  • Linux之QT核心库
  • Python教程
  • Shell&Bash教程
  • 工具脚本
  • 自动化脚本
  • 质量保障
  • 产品思考
  • 软实力
  • 开发流程
  • Git应用
  • 技术模版
  • 技术规范
  • Markdown
  • Mermaid
  • 开源协议
  • 关于我
  • 自我精进
  • 职场管理
  • 职场面试
  • 心情杂货
  • 友情链接
  • README
  • Android提升进阶

  • iOS开发和进阶

  • Web开发和进阶

    • README
    • HTML工具手册

    • CSS样式与布局

      • CSS选择器入门
      • CSS盒模型详解
      • Flex弹性布局
      • CSS定位与层级
      • CSS动画与过渡
      • 响应式布局实战
        • 1. 媒体查询 @media
          • 1.1 移动优先 vs 桌面优先
          • 1.2 常见断点
        • 2. 响应式单位
          • 2.1 rem — 根字体相对单位
          • 2.2 vw / vh / vmin / vmax
          • 2.3 clamp() — 范围限制
        • 3. 容器查询 @container
        • 4. 水平垂直居中(6 种方案)
        • 5. 经典布局方案
          • 5.1 圣杯布局(头/尾 + 三列,中间自适应)
          • 5.2 瀑布流(CSS 多列 / Grid)
          • 5.3 等高列
        • 6. 移动端适配清单
        • 7. 速查表
      • CSS渲染与优化
    • JavaScript核心

    • TypeScript入门

    • Vue高级进阶

    • Web工程化实践

  • Linux应用开发

  • IoT智能硬件开发

  • Apps
  • Web开发和进阶
  • CSS样式与布局
杨充
2026-06-23
目录

响应式布局实战

# 06.响应式布局实战

媒体查询 @media、rem/vw/vh 响应式单位、容器查询 @container、6 种水平垂直居中方案、圣杯/双飞翼/瀑布流/等高等经典布局。

# 1. 媒体查询 @media

/* 基础语法 */
@media (max-width: 768px) {
  .sidebar { display: none; }
}

/* 组合条件 */
@media (min-width: 769px) and (max-width: 1024px) {
  .container { max-width: 720px; }
}

/* 设备特性 */
@media (hover: hover) { }              /* 支持悬停的设备(桌面) */
@media (pointer: coarse) { }          /* 触摸设备(移动端) */
@media (prefers-color-scheme: dark) { }  /* 暗色模式 */
@media (prefers-reduced-motion) { }   /* 用户偏好减少动画 */

/* 屏幕方向 */
@media (orientation: portrait) { }    /* 竖屏 */
@media (orientation: landscape) { }   /* 横屏 */

# 1.1 移动优先 vs 桌面优先

/* 移动优先(推荐):先写最小屏,逐步扩展 */
.container { padding: 10px; }                    /* 手机 */
@media (min-width: 768px) { .container { padding: 20px; } }  /* 平板 */
@media (min-width: 1024px) { .container { padding: 30px; } } /* 桌面 */

/* 桌面优先:先写最大屏,逐步收缩 */
.container { padding: 30px; }                    /* 桌面 */
@media (max-width: 1024px) { .container { padding: 20px; } } /* 平板 */
@media (max-width: 768px) { .container { padding: 10px; } }  /* 手机 */

# 1.2 常见断点

/* 移动优先断点 */
@media (min-width: 640px)  { }   /* sm */
@media (min-width: 768px)  { }   /* md — 平板 */
@media (min-width: 1024px) { }   /* lg — 小桌面 */
@media (min-width: 1280px) { }   /* xl — 大桌面 */

# 2. 响应式单位

# 2.1 rem — 根字体相对单位

html { font-size: 16px; }           /* 基准 */

.box {
  width: 20rem;                      /* = 20 × 16px = 320px */
  font-size: 0.875rem;               /* = 14px */
}

/* 移动端适配:等比缩放 */
@media (max-width: 375px) {
  html { font-size: 14px; }          /* 小屏缩小基准,所有 rem 联动 */
}

# 2.2 vw / vh / vmin / vmax

单位 含义
1vw 视口宽度的 1%
1vh 视口高度的 1%
1vmin vw 和 vh 中的较小值
1vmax vw 和 vh 中的较大值
.hero { height: 100vh; }                  /* 全屏首屏 */
.text { font-size: clamp(16px, 4vw, 24px); }  /* 文字随宽度缩放,但限制范围 */
.card { width: min(100%, 400px); }        /* 最大宽度 400px,窄屏自适应 */

# 2.3 clamp() — 范围限制

/* clamp(min, preferred, max) — 取范围内的首选值 */
h1 { font-size: clamp(1.5rem, 5vw, 3rem); }
/* 最小 1.5rem,最大 3rem,屏幕宽时用 5vw */

# 3. 容器查询 @container

当需要根据父容器宽度(而非视口)调整样式时使用:

/* 定义容器 */
.card-container {
  container-type: inline-size;
  container-name: card;
}

/* 根据容器宽度调整子元素 */
@container card (min-width: 400px) {
  .card { display: flex; flex-direction: row; }
}
@container card (max-width: 399px) {
  .card { display: flex; flex-direction: column; }
}

⚠️ @container 基线 2023 年获得所有现代浏览器支持,生产项目可使用。


# 4. 水平垂直居中(6 种方案)

/* ① Flexbox(推荐,最通用) */
.parent { display: flex; justify-content: center; align-items: center; }

/* ② Grid(最简洁) */
.parent { display: grid; place-items: center; }

/* ③ absolute + transform(不需知道子元素尺寸) */
.parent { position: relative; }
.child  { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); }

/* ④ absolute + margin:auto(需子元素有固定宽高) */
.parent { position: relative; }
.child  { position: absolute; top: 0; right: 0; bottom: 0; left: 0; margin: auto; width: 200px; height: 100px; }

/* ⑤ 文本居中 */
.text-center { text-align: center; }

/* ⑥ table-cell(不推荐,遗留方案) */
.parent { display: table-cell; vertical-align: middle; text-align: center; }

# 5. 经典布局方案

# 5.1 圣杯布局(头/尾 + 三列,中间自适应)

<div class="container">
  <header>头部</header>
  <main>内容(flex: 1 撑开)</main>
  <footer>尾部</footer>
</div>
.container { display: flex; flex-direction: column; min-height: 100vh; }
main { flex: 1; }                                   /* 撑开中间 */

# 5.2 瀑布流(CSS 多列 / Grid)

/* 方案 A:CSS columns(简单) */
.masonry {
  columns: 4 250px;        /* 4 列,最小 250px */
  column-gap: 16px;
}
.masonry .item { break-inside: avoid; margin-bottom: 16px; }

/* 方案 B:Grid + masonry(实验性) */
.masonry {
  display: grid;
  grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
  grid-template-rows: masonry;   /* 仅 Firefox 实验支持 */
}

# 5.3 等高列

/* Flexbox 天然等高 */
.row { display: flex; }
.col { flex: 1; }   /* 高度自动等于最高列 */

/* Grid 天然等行高 */
.row { display: grid; grid-template-columns: repeat(3, 1fr); }

# 6. 移动端适配清单

/* ① viewport 声明 */
<meta name="viewport" content="width=device-width, initial-scale=1">

/* ② 图片自适应 */
img { max-width: 100%; height: auto; }

/* ③ 最小触摸区域 */
button, a { min-width: 44px; min-height: 44px; }   /* Apple HIG 推荐 */

/* ④ 安全区域(iPhone X+) */
body { padding: env(safe-area-inset-top) env(safe-area-inset-right)
                env(safe-area-inset-bottom) env(safe-area-inset-left); }

# 7. 速查表

需求 方案
不同屏幕隐藏/显示元素 @media (max-width: 768px) { .sidebar { display: none; } }
文字随屏幕缩放 font-size: clamp(1rem, 3vw, 1.5rem)
全屏首屏 height: 100vh 或 min-height: 100dvh
组件根据父容器响应 @container
水平垂直居中 display: flex; justify-content: center; align-items: center
暗色模式 @media (prefers-color-scheme: dark)
减少动画 @media (prefers-reduced-motion) { * { animation: none; } }

下一篇:07.CSS渲染与优化 — 重排/重绘诊断、containment、字体加载、关键 CSS。

上次更新: 2026/06/24, 10:13:05
CSS动画与过渡
CSS渲染与优化

← CSS动画与过渡 CSS渲染与优化→

最近更新
01
CSS选择器入门
06-23
02
CSS定位与层级
06-23
03
CSS盒模型详解
06-23
更多文章>
Theme by Vdoing | Copyright © 2019-2026 杨充 | MIT License | 鄂ICP备2024073355号-1 | 鄂ICP备2024073355号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式