先记住这个答案
Flexbox 和 Grid 中,外边距、内边距、尺寸都可以用逻辑属性表达文字流方向,例如 margin-inline-start、padding-block、inline-size。但间距属性不是 gap-inline:常用的是 gap、row-gap、column-gap。Grid 的行列由书写模式定义;Flex 的主轴还要看 flex-direction,不能把“inline”简单等同于水平或等同于 Flex 主轴。
margin-inline跟随文字行内轴inline-size对应行内尺寸gap-inline不是通用属性row-gap、column-gap控制行列间距
让组件随方向改变留白
一个卡片标题前有强调线,旁边是图标。用逻辑边距和边框可让 RTL 与竖排布局自动映射到合适的物理边;Grid 或 Flex 只负责项目之间如何排列,不会改变逻辑属性的定义。
.cards { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; }
.card { padding-inline: 1rem; padding-block: 0.75rem; }
.card__icon { margin-inline-end: 0.5rem; }gap 设置轨道或项目之间的距离,padding-inline 设置卡片行内两侧内边距,margin-inline-end 设置图标后方的留白。三者作用层级不同,不能拿一个代替另一个。
对于 Flex 容器,justify-content 沿主轴分配空间,而主轴受 flex-direction 控制;margin-inline-start 则按文字行内方向映射。把两种轴混在一起推理,会在 flex-direction: column 或竖排时出错。
理解 row-gap 与 column-gap
Grid 中 row-gap 隔开行轨道,column-gap 隔开列轨道;换书写模式时行列的物理方向也可能变化。Flex 中这两个属性作用于弹性行与行内项目的间距,具体对应主轴还是交叉轴,要看 flex-direction。
通常先写 gap 最省心;需要两个方向不同间距时再拆成 row-gap、column-gap。不要写 gap-inline 期待浏览器自动理解行内轴,那不是这里通用的声明。
容易答错的地方
- 把
gap-inline当作合法通用属性 - Flexbox 与 Grid 常用的间距声明是
gap、row-gap、column-gap。 - 认为 Flex 主轴永远是行内轴
flex-direction: column会让主轴沿另一方向;逻辑属性仍按书写模式映射。
面试官还会怎么问?
Grid 的列一定是从左到右吗?
不一定。书写方向与模式会影响行列轨道的物理映射,RTL 与竖排都需要实际检查。
gap 会给容器外侧也加间距吗?
不会。它作用于相邻轨道或项目之间,容器边缘留白应使用 padding 等属性。
用 margin-inline 代替 gap 合适吗?
少量特殊项目可用边距微调;均匀的项目间距通常用 gap 更直接,也不会在两端额外留下相同边距。
参考资料
示例用于理解所注明的运行环境与边界;延伸学习可结合原文中的更多案例。