Chapter · 03

第 3 章 · 布局与排版

Layout · 盒子、流、弹性、网格、约束、变形

你往屏幕上放一个按钮,它凭什么停在那个位置、是那个大小?上一个像素都能画出来的时代(第 2 章),这个问题有个粗暴答案:我指定坐标。但屏幕一大、内容一多、设备一杂,写死坐标立刻变成灾难。这一章讲的是一场持续三十年的思想革命:布局从「写死坐标」走向「讲关系」——盒子之间谁包含谁、谁挨着谁;一排元素沿哪条轴、按什么队形;整页如何先画格子再对号入座;原生世界干脆把布局变成解方程。六节读完,界面上任何一个元素的「待位」,你都能说出它的来历。

本章要回答什么

为什么明明没设间距,两个段落之间却有一段「多余的空白」?float 这个老古董当年到底解决了什么问题、今天还能不能用?导航条图标怎么均匀分布、商品卡片怎么永远等高?报纸式的多栏复杂排版怎么落地?手机 App 的布局为什么长成一串「约束」而不是一堆坐标?以及最现实的——同一套界面,怎么在 4 寸手机和 27 寸显示器上都活得体面?

Analogy · 譬喻

布局一套界面,像装修一套房子
盒模型是木料规格——每块板的实际占位要算上衬里和缝隙,光量板芯会全部算错;
文档流是毛坯房的默认规则——东西从上到下、从左到右依次进场;
Flexbox是一面墙前的家具摆法——沿一条线排开、对齐、能屈能伸;
Grid是整面墙的施工图纸——先弹线画格,家具对号入座;
约束布局是全屋定制的量尺逻辑——不问「放在哪」,只问「A 离 B 多远」;
响应式是那套变形家具——户型变了,桌子自己换形态,五金件永远一套。

本章的六节

§ 3.1

盒模型

content / padding / border / margin——一切布局的原子,也是「宽度怎么量」的百年公案。

§ 3.2

流式与定位

文档流、浮动、absolute / fixed / sticky 的取舍——默认规则与五种例外。

§ 3.3

Flexbox 弹性布局

主轴交叉轴、六大对齐、伸缩算法——一维排队的现代答案。

§ 3.4

Grid 网格

轨道、fr、命名区域、auto-fill——真正的「报纸排版」能力。

§ 3.5

约束布局

AutoLayout / ConstraintLayout——原生 App 的布局,本质是解方程。

§ 3.6

响应式与自适应

媒体查询、断点、容器查询——一套界面,适配所有屏幕。

六节是一条演进路

1. 盒子 · 1996

CSS 诞生即有盒模型——先搞清「一个元素占多大地方」。

2. 流 · 默认规则

不写任何布局代码时元素怎么排——以及 float、position 五种例外。

3. 弹性 · 2015

Flexbox 全浏览器就位:一排盒子听容器统一指挥。

4. 网格 · 2017

Grid 落地:二维图纸级排版,Web 终于有了「真正的布局系统」。

5. 约束 · 原生答案

App 世界殊途同归:布局即方程,位置是解出来的。

6. 变形 · 世界观

响应式收官:承认屏幕千变万化,于是不写死任何数字。

学之前先记住这一点

☰ 主页
学海无涯 · 界面篇 · 第 3 章