Grid Formatting Context(GFC)是CSS Grid布局中由display: grid或inline-grid触发的网格格式化上下文,非HTML5定义;仅此两值可创建GFC,且grid-template-*系列属性仅在此上下文中生效。
HTML5 本身不定义“GFC”这个术语——它是 CSS Grid 布局中 display: grid 或 display: inline-grid 触发的**网格格式化上下文**(Grid Formatting Context),属于 CSS
规范范畴,不是 HTML5 的功能。所谓“GFC 布局技巧”,实际是指如何正确启用并控制 CSS Grid 容器的行为。
display 值只有设为 grid 或 inline-grid 才创建 GFC;其他值如 block、flex、table 都不会。常见误操作是只写 grid-template-columns 却漏掉 display: grid,此时样式完全不生效。
display: grid:生成块级网格容器display: inline-grid:生成行内级网格容器(宽度由内容撑开)display: subgrid:仅用于子网格,且父容器必须已是 GFCdisplay: grid !important 可能被 Shadow DOM 或框架样式覆盖,需检查层叠顺序grid-template-* 系列属性必须配合 GFC 使用像 grid-template-columns、grid-template-rows、grid-template-areas 这些属性,**只在 GFC 中有意义**。在普通 block 容器里声明它们会被浏览器忽略(无报错,但无效)。
.container {
display: grid; /* 必须先有这行 */
grid-template-columns: 1fr 2fr 1fr;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header header"
"nav main aside"
"footer footer footer";
}注意:grid-template-areas 中每个引号内单词数必须等于 grid-template-columns 定义的列数,否则整行声明失效。
GFC 会切断常规文档流和某些继承链,带来几个隐蔽但关键的影响:
float、vertical-align、clear 全部失效margin-collapse(外边距合并)在 GFC 内部不发生width: 100% 是相对于网格轨道(track),不是父容器可视宽,容易误解尺寸grid-column: span 2 跨列时,若目标列被 grid-auto-flow: column 动态生成,行为可能不符合直觉最常踩的坑:把一个已设 display: grid 的容器又套了一层 flex 布局,结果 Grid 子项不再受 Grid 控制——因为父容器不再是 GFC 根节点,而是 Flex 容器的子项。