FE-02-CSS3 进阶:Flex、Grid、动画与容器查询
本节目标:掌握 Flexbox 和 Grid 的全部核心概念、CSS 动画与过渡、容器查询与 @layer 等现代特性。
1. Flexbox(弹性盒子)
一维布局,沿主轴方向排列子元素。
1.1 容器属性
1 | .container { |
**速记 flex-flow**:flex-direction: row; flex-wrap: wrap; → flex-flow: row wrap;
1.2 项目属性
1 | .item { |
1.3 经典场景
居中:
1 | .parent { display: flex; justify-content: center; align-items: center; } |
导航栏:
1 | .nav { display: flex; } |
圣杯布局:
1 | .holy-grail { display: flex; } |
等高卡片:
1 | .row { display: flex; } |
2. Grid(网格布局)
二维布局,行列同时控制。
2.1 容器属性
1 | .container { |
2.2 项目属性
1 | .item { |
2.3 经典场景
12 列网格:
1 | .grid { display: grid; grid-template-columns: repeat(12, 1fr); gap: 16px; } |
响应式(无 media query):
1 | .grid { |
宽度够就多放几列,不够自动换行。
瀑布流:
1 | .masonry { |
圣杯布局:
1 | .holy-grail { |
3. CSS 变量(自定义属性)
1 | :root { |
4. CSS 动画
4.1 transition(过渡)
1 | .button { |
timing function:
linear:匀速ease:默认,慢-快-慢ease-in:加速ease-out:减速ease-in-out:慢-快-慢cubic-bezier(0.4, 0, 0.2, 1):Material 标准steps(4):分步动画
4.2 @keyframes 动画
1 | @keyframes fadeInUp { |
多动画:animation: fadeIn 0.3s, slideIn 0.5s 0.2s;
prefers-reduced-motion(无障碍):
1 | @media (prefers-reduced-motion: reduce) { |
4.3 transform(变换)
1 | .box { |
性能优化:只动 transform 和 opacity(走合成层,不重排/重绘)。
5. 现代 CSS 特性
5.1 容器查询(@container)
根据父容器尺寸(不是视口)来响应式:
1 | .card-container { |
5.2 @layer(层级管理)
1 | @layer reset, base, components, utilities; |
5.3 :has()(父选择器)
1 | /* 含已勾选 checkbox 的父元素 */ |
5.4 :is() 和 :where()
1 | /* 简化选择器列表 */ |
5.5 aspect-ratio
1 | .video { aspect-ratio: 16 / 9; } |
5.6 :focus-visible
1 | .button:focus { outline: none; } /* 永远不要这样! */ |
5.7 color-mix 和相对颜色
1 | .button { |
6. 性能优化
6.1 GPU 加速
1 | /* 触发合成层(独立渲染) */ |
注意:不要滥用 will-change(会占用显存)。
6.2 避免触发布局
1 | /* 触发布局(重排)- 慢 */ |
6.3 content-visibility(跳过渲染)
1 | .below-fold { |
7. 现代 CSS 架构
7.1 BEM 命名
1 | .block { } |
7.2 CSS Modules(构建时作用域)
1 | /* Card.module.css */ |
1 | import styles from './Card.module.css'; |
7.3 CSS-in-JS(运行时)
1 | import styled from '@emotion/styled'; |
7.4 Tailwind(实用类)
1 | <button class="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded"> |
8. 实战:响应式卡片网格
1 | <style> |
小结
| 概念 | 用法 |
|---|---|
| Flexbox | 一维布局,主轴 + 交叉轴 |
| Grid | 二维布局,rows + columns |
| 自定义属性 | CSS 变量,运行时可改 |
| transition | 状态过渡 |
| @keyframes | 关键帧动画 |
| transform | 性能最好的动画属性 |
| @container | 基于父容器大小的响应式 |
| @layer | 优先级管理 |
| :has() | 父选择器 |
| will-change | 提示 GPU 加速 |
下一节讲浏览器渲染原理:DOM / CSSOM / 重绘 / 回流 / 合成层。
- 本文作者: CoderSong
- 本文链接: https://jack-song-gif.github.io/2026/09/30/FE-02-CSS3进阶:FlexGrid动画/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!