Bento 网格卡片布局(数据看板式 CSS Grid 源码)

CSS 许可:自研原创

Bento 网格卡片布局源码:grid-template-areas 自由拼贴大小卡片,适配数据看板与功能聚合页,响应式降级,纯 CSS 实现。

效果演示(真实可交互)

下方是一个 4 列 3 行的 Bento 网格:大卡片占据四格、中卡片占据两格,小卡片各占一格,悬停均有上浮反馈。缩放窗口可看到移动端自动降级为两列布局。

数据看板
128 个组件
hover · cards · text
本月新增
12
访问量
36,420
↑ 18.5%
热门分类
loadersbackgrounds3dbuttons
代码质量
92 分 极佳
关于
粤喵组件站:自研 + 安全池 MIT 组件,全部可复制商用。

完整代码

HTML 结构:六块内容各自独立,通过 grid-area 命名归位:

<div class="bento">
  <div class="b-tile t-1">…大卡片…</div>
  <div class="b-tile t-2">…小卡片…</div>
  <div class="b-tile t-3">…小卡片…</div>
  <div class="b-tile t-4">…小卡片…</div>
  <div class="b-tile t-5">…小卡片…</div>
  <div class="b-tile t-6">…通栏卡片…</div>
</div>

核心 CSS:用 grid-template-areas 直观定义拼贴形状:

.bento {
  display: grid;
  grid-template-columns: repeat(4, 1fr);
  grid-template-rows: repeat(3, 128px);
  grid-template-areas:
    "a a b c"
    "a a d e"
    "f f f f";
  gap: 14px;
}

/* 命名区域 */
.t-1 { grid-area: a; }   /* 2x2 大卡片 */
.t-2 { grid-area: b; }
.t-3 { grid-area: c; }
.t-4 { grid-area: d; }
.t-5 { grid-area: e; }
.t-6 { grid-area: f; }   /* 通栏横幅 */

/* 移动端降级为两列 */
@media (max-width: 640px) {
  .bento {
    grid-template-columns: repeat(2, 1fr);
    grid-template-rows: repeat(4, 120px);
    grid-template-areas:
      "a a"
      "b c"
      "d e"
      "f f";
  }
}

.b-tile {
  border-radius: 16px;
  padding: 16px;
  display: flex; flex-direction: column; justify-content: space-between;
  transition: transform .3s ease, box-shadow .3s ease;
}
.b-tile:hover { transform: translateY(-5px); box-shadow: 0 12px 26px rgba(0, 0, 0, .35); }

参数说明

参数默认值说明
列数4桌面端列数,可改 3 或 5
行高128px每行高度,改大则卡片更高
gap14px卡片间距
区域字母a ~ f用相同字母表示跨格,如两个 a 横向跨两格
断点640px移动端降级断点

兼容性与性能

常见问题

Q: 想让某张卡片横跨两列怎么改?grid-template-areas 中让同一行出现两个相同字母即可,例如把 "a a b c" 改成 "a a b b" 让 c 和 b 合并。

Q: 卡片内容高度不一时会乱吗? 不会,grid-template-rows 固定了行高,内容超长时卡片内部需要自行处理滚动或截断。

Q: 能做成瀑布流吗? Bento 是规整网格,瀑布流请使用 columns 多列布局或 JS 排版方案,两者思路不同。

Q: 可以商用吗? 可以,粤喵自研原创组件,免费商用无需署名。

常见问题

这个组件可以商用吗?

可以。本组件为粤喵自研原创,可免费用于个人和商业项目,无需署名。

浏览器兼容性如何?

支持所有现代浏览器(Chrome / Firefox / Safari / Edge 最新版本)。旧版 IE 不支持 CSS 动画相关特性。

怎么修改动画参数?

直接调整 CSS 中的 animation-duration(时长)、animation-timing-function(缓动曲线)等属性即可,代码中有注释说明。