You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CSS Grid中grid-template-areas的占位符.为何无法生成空白?

问题分析:Grid占位符.未产生预期空白的原因及解决办法

你的Grid布局思路是对的:用grid-template-columns定义左右20px的空列,再通过grid-template-areas的.将这些空列标记为未使用区域。但没看到预期空白,大概率是以下几个原因之一:

1. Grid项的display属性导致视觉错位

你给.nav li设置了display: inline,这会把Grid容器的直接子元素(li)变成行内元素。虽然Grid项依然会占据对应的网格区域,但行内元素无法被拉伸填充整个网格区域的宽度,再加上text-align: center,可能让你误以为左右的空列不存在。

解决办法:
去掉.nav li的display: inline,让li保持Grid项的默认块级表现(Grid容器的直接子元素自动成为Grid项,默认是display: block),这样li会自动填充对应的1fr网格区域,左右的20px空列会清晰显示:

.nav li {
 list-style: none;
 padding: 0;
 margin: 0;
 /* 移除display: inline */
 text-decoration: none;
}

2. Grid容器的宽度计算方式问题

你的.nav设置了width: 100%,如果父元素(比如<nav id="navigation">)存在默认的padding/margin,或者浏览器的默认box-sizing行为影响,可能导致左右的20px空列被挤压或与外部边距重合。

解决办法:
给Grid容器加上box-sizing: border-box,确保宽度计算包含内边距和边框(如果后续添加的话),同时可以显式清除父元素的默认边距:

.nav {
 /* padding: 1rem 1.75rem 0.1rem 1.75rem;*/
 text-align: center;
 font-size: 2rem;
 display: grid;
 width: 100%;
 box-sizing: border-box; /* 添加这行 */
 grid-template-columns: 20px 1fr 1fr 1fr 1fr 20px;
 grid-template-areas: ". main blog work contact .";
 /* grid-gap: 20px;*/
}

#navigation {
 margin: 0; /* 清除nav的默认margin */
 padding: 0;
}

3. 对Grid占位符.的预期理解偏差

你可能以为.会生成容器外部的空白(类似margin),但实际上Grid的.是定义容器内部的空网格列/行,空白是在容器内部的。如果想要容器外部的左右空白,应该给.nav添加左右padding,而不是用Grid空列:

.nav {
 padding: 0 20px; /* 替换Grid的左右空列,直接加padding */
 text-align: center;
 font-size: 2rem;
 display: grid;
 width: 100%;
 box-sizing: border-box;
 grid-template-columns: 1fr 1fr 1fr 1fr; /* 去掉左右20px列 */
 grid-template-areas: "main blog work contact"; /* 去掉左右的. */
}

验证修改后的效果

修改后,你的导航栏会在左右呈现20px的空白,四个链接均匀分配剩余宽度,完全符合预期布局。


内容的提问来源于stack exchange,提问作者Jamie Kane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:17:29