用grid-template-areas处理新闻列表,核心是命名区域并语义化归位:定义“headline headline hot”等布局,用grid-area分配模块,嵌套Grid实现卡片流,响应式时仅调整grid-template-areas即可垂直堆叠。

用 grid-template-areas 处理复杂新闻列表,核心是把页面逻辑区域“命名化”,再让每个新闻模块按语义归位,既清晰又易维护。
用命名区域划分新闻结构
新闻首页通常有头条、专题、最新、热门、分类等区块,直接用行列线编号容易混乱。改用 grid-template-areas 可读性高得多:
- 在容器上定义区域布局,例如:
- 每行字符串代表一行,每个单词是一个区域名;相同单词横向并列,不同单词纵向对齐
- 空格或点(
.)表示空白单元格,方便留白或预留广告位
为每个新闻模块分配对应区域
给 html 中的每个模块加上 grid-area,它就自动落到指定位置:
-
.headline { grid-area: headline; }→ 占据首行前两列 -
.featured { grid-area: featured; }→ 落在第二行第一列 -
.latest { grid-area: latest; }→ 自动填满第二行后两列 -
.hot { grid-area: hot; }→ 首行第三列,和头条同高 -
.category { grid-area: category; }→ 底部整行三列宽度
嵌套网格处理内部卡片流
像“最新新闻”这类区域本身是多张卡片组成的网格,不能只靠外层命名解决:
- 在
.latest元素内部再设display: grid - 用
repeat(auto-fill, minmax(250px, 1fr))实现自适应列数 - 头条若需跨列,加
grid-column: span 2;即可,不影响外层区域定义
响应式时重排区域顺序
小屏下不追求多栏并列,而是垂直堆叠,这时只需改 grid-template-areas 和列定义:
- @media (max-width: 768px) {
.container {
grid-template-areas: “headline”
“featured“
“latest”
“hot”
“category”;
grid-template-columns: 1fr;
}
} - 所有区块自然变成单列,无需重写 HTML 结构
基本上就这些。命名区域不是炫技,而是把“哪里放什么内容”从 css 数值里解放出来,让新闻列表结构一目了然,改版也省心。