使用 CSS Grid 实现灵活的多列布局:从基础到实战

在前端开发中,布局一直是一个重要的课题。随着 CSS Grid 的普及,我们有了更强大的工具来实现复杂的布局需求。今天,我将分享一个使用 CSS Grid 实现多列布局的案例,并深入探讨其实现原理和优化技巧。

示例:

xml 复制代码
<html>

<head>
  <style>
    .el-container {
      display: grid;
      grid-template-columns: repeat(4, 1fr); /* 每行 4 列 */
      gap: 10px; /* 列之间的间距 */
    }

    .el-row {
      display: contents; /* 忽略 el-row 的布局,直接使用 grid 布局 */
    }

    .el-col {
      box-sizing: border-box; /* 确保 padding 和 border 不影响宽度 */
      border: 1px solid blue; /* 为了视觉效果 */
    }
  </style>
</head>

<body>
  <div class="el-container">
    <div class="el-row">
      <div class="el-col">1</div>
      <div class="el-col">2</div>
      <div class="el-col">3</div>
    </div>
    <div class="el-row">
      <div class="el-col">4</div>
      <div class="el-col">5</div>
      <div class="el-col">6</div>
    </div>
    <div class="el-row">
      <div class="el-col">7</div>
      <div class="el-col">8</div>
      <div class="el-col">9</div>
    </div>
  </div>
</body>

</html>
  • el-container : 这是最外层的容器,使用了 display: grid 来启用 Grid 布局。grid-template-columns: repeat(4, 1fr) 表示每行有 4 列,每列的宽度相等。gap: 10px 设置了列与列之间的间距。
  • el-row : 这个类使用了 display: contents,这意味着它本身不会生成任何布局,而是直接将其子元素(即 el-col)放入 Grid 布局中。这样可以避免额外的嵌套层级,简化布局结构。
  • el-col : 这是每个网格项的样式,设置了 box-sizing: border-box 以确保边框和内边距不会影响元素的宽度。为了视觉效果,还添加了蓝色的边框。

这种布局非常适合用于展示卡片式内容,比如商品列表、博客文章列表或图片画廊。通过调整 grid-template-columns 的值,可以轻松实现响应式布局,适应不同屏幕尺寸。

  • 响应式布局 :用媒体查询动态调整 grid-template-columns 的值,比如在小屏幕上改为 2 列或 1 列。
css 复制代码
@media (max-width: 768px) {
  .el-container {
    grid-template-columns: repeat(2, 1fr);
  }
}
  • 动态内容: 如果内容是通过 JavaScript 动态生成的,可以结合框架(如 Vue、React)实现更灵活的布局。
  • 动画效果 : 为网格项添加 transition 或 transform 属性,实现 hover 或点击时的动画效果。

运行上述代码后,你会看到一个 4 列的网格布局,每行有 3 个元素,元素之间有 10px 的间距。每个元素都有一个蓝色的边框,方便观察布局。

CSS Grid 是一个非常强大的布局工具,特别适合处理复杂的网格布局。通过 display: contents,我们可以进一步简化布局结构,避免不必要的嵌套。希望这个例子对大家有所帮助!

相关推荐
刃神太酷啦5 天前
前端入门第一课:HTML 基础语法 + 常用标签 + 实战全解
服务器·c语言·前端·javascript·css·c++·html
扶苏10026 天前
CSS 图标换色指南:用 brightness / invert / mask 把任意图片改成想要的颜色
css
我命由我123456 天前
CSS - CSS 媒体查询 orientation
前端·javascript·css·html·css3·html5·js
zhanghaha13146 天前
HTML系列教程:18_HTML / CSS 颜色零基础详解
css·html·tensorflow
Aaswk6 天前
从 HTML/CSS/JS 到 Vue + Axios 的一篇实战笔记
前端·css·vue.js·html
xieliyu.7 天前
前端基础:常见CSS选择器用法
前端·css·笔记·vscode
cll_8692418919 天前
WordPress Single Post 文章页美化:响应式表格、图片优化与自动悬浮 Table of Contents(CSS + JS)
前端·css
愛芳芳9 天前
基于 Electron + Vue3 的仿 PC 微信客户端项目实战
前端·javascript·css·elementui·typescript·electron·vue
feixing_fx9 天前
伪类与伪元素的魔法:纯 CSS 打造炫酷的按钮悬停特效
前端·css·css3
Peter-Code10 天前
微前端避坑指南:主应用与子应用的高度及滚动条协调
css·前端框架·微前端