原来哔哩哔哩首页用到了Grid布局!

1. 认识 Grid 布局

Grid 布局是 CSS 中的二维布局系统,可以同时控制行和列的排列方式,非常适合构建复杂网页结构。它的核心逻辑是把父容器划分为网格,子元素按需填充到指定区域。

例如哔哩哔哩网站首页就是用了 Grid 布局:

与 Flex 布局的区别:

  • Flex是一维布局(横向或纵向排列)
  • Grid是二维布局(同时控制行和列)
  • Grid更适合表格类、卡片墙等需要严格对齐的场景

2.基础用法

1.创建网格容器和子元素

css 复制代码
<div class="container">
  <div class="item item1">公</div>
    <div class="item">众</div>
    <div class="item">号</div>
    <div class="item">知</div>
    <div class="item">否</div>
    <div class="item">技</div>
    <div class="item">术</div>
    <div class="item">6</div>
    <div class="item">6</div>
    <div class="item">6</div>
</div>

css

css 复制代码
    .container {
      background-color: rgb(191, 238, 222);
      padding: 20px;
      /* 启用Grid布局 */
      display: grid;
      /* 定义5列:前4列固定宽度,最后一列自适应宽度 */
      grid-template-columns: 100px 150px 200px 300px 1fr;
      /* 定义两行高度 */
      grid-template-rows: 100px 200px;
      /* 统一设置行列间距 */
      gap: 10px;
    }

    .container .item {
      background-color: rebeccapurple;
      font-size: 30px;
      color: white;
    }

演示效果:

解答:

  • display: grid; 表示启用 Grid 布局
  • grid-template-columns 表示设置列宽度,fr 表示按照比例分配剩余空间。
  • grid-template-rows 用来定义行高
  • gap: 10px 用来设置行列间距

2.使用 repeat 函数

(1)每行有5列,5列宽度全部自适应

css 复制代码
/* 定义5列:5列全部自适应 */
grid-template-columns: repeat(5, 1fr);

(2)响应式布局:所有列宽度全部自适应,最小宽度200px

css 复制代码
 grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
  • auto-fit:自动填充可用空间
  • minmax(200px, 1fr):最小200px,最大按比例分配

3.仿哔哩哔哩首页布局

css

css 复制代码
    .container {
      background-color: rgb(191, 238, 222);
      padding: 20px;
      /* 启用Grid布局 */
      display: grid;
      /* 每行5个,自适应宽度 */
      grid-template-columns: repeat(5, 1fr);
      /* 统一设置行列间距 */
      gap: 10px;
    }

    .container .item {
      background-color: rebeccapurple;
      font-size: 30px;
      color: white;
    }

    .container .item1 {
      grid-row: 1/4;
      grid-column: 1/3;
    }

效果:

  • grid-row:该属性定义了网格元素行的开始和结束位置。
  • grid-row: 1 / 3; 表示行线从第一行线到第三行线为止
  • grid-column:该属性定义了网格元素列的开始和结束位置。
  • grid-column: 1 / 3; 表示列线从第一列线到第三列线为止

span 关键字

在设置 grid-row 和 grid-column 时,我们还可以使用 span 关键字。span 表示跨越的意思,下面表示跨越3行和2列

css 复制代码
.container .item1 {
    grid-row: 1/span 3;
    grid-column: 1/span 2;
  }

效果是一样的:

相关推荐
yume_sibai1 小时前
大屏数据可视化 - 边框红绿呼吸灯实现详解
前端·信息可视化·typescript
Hyyy1 小时前
很多Desktop都在上的Computer Use是什么
前端·llm
慢功夫1 小时前
开篇:VS Code 为什么不是一个普通 React App
前端·visual studio code
你挚爱的强哥2 小时前
Vue2 实现 1.5s 十连击监听(连续点击若干次),封装通用可复用点击检测工具,不用 data!Vue 封装通用连击监听方法,支持自定义时长与点击次数
前端·javascript·vue.js
huashengzsj2 小时前
Shopify个人建站如何搭建独立站:从零开始的完整指南
前端·网络·人工智能
程序猿小泓2 小时前
从 Claude Code 学 Agent Harness:一个前端工程师的 AI Agent 学习笔记
前端·人工智能·学习
柒和远方3 小时前
从审计日志到可下载证据包:事务型 Outbox、租约 fencing 与保留水位
前端·后端·架构
minglie13 小时前
npm ali-oss库依赖冲突
前端·npm
CryptoPP4 小时前
BSE股票K线数据接入实战:从接口调用到前端图表展示
大数据·前端·网络·人工智能·websocket·网络协议
Random_index5 小时前
#Vue3篇: Vue 项目发版后如何提示用户刷新?基于 package.json 版本号的前端更新检测方案
前端·vue.js·json