CSS Grid高级布局
CSS Masonry 瀑布流布局
/* CSS 原生 masonry(Chrome flags / Firefox) */
.masonry-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-template-rows: masonry;
gap: 16px;
}
/* 后备方案:多列布局 */
.masonry-fallback {
column-count: 3;
column-gap: 16px;
}
.masonry-fallback > * {
break-inside: avoid;
margin-bottom: 16px;
}
/* 近似方案:auto-rows 小单位 */
.pseudo-masonry {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(250px, 1fr));
grid-auto-rows: 10px;
gap: 16px;
}
.item--tall { grid-row: span 30; }
.item--medium { grid-row: span 20; }
.item--short { grid-row: span 10; }
网格模板区域
.page-layout {
display: grid;
grid-template-columns: 240px 1fr 300px;
grid-template-rows: auto 1fr auto;
grid-template-areas:
"header header header"
"sidebar main aside"
"footer footer footer";
min-height: 100vh;
}
.site-header { grid-area: header; }
.sidebar { grid-area: sidebar; }
.main-content { grid-area: main; }
.right-aside { grid-area: aside; }
.site-footer { grid-area: footer; }
/* 移动端响应式 */
@media (max-width: 768px) {
.page-layout {
grid-template-columns: 1fr;
grid-template-areas:
"header"
"main"
"aside"
"footer";
}
.sidebar { display: none; }
}
Subgrid(子网格)
/* 跨列对齐卡片内部元素 */
.card-grid {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 24px;
}
.card {
display: grid;
grid-row: span 3;
grid-template-rows: subgrid; /* 继承父级行轨道 */
}
.card__header { /* 第 1 行:跨所有卡片对齐 */ }
.card__body { /* 第 2 行:自动展开 */ }
.card__footer { /* 第 3 行:固定在底部 */ }