编程 Grid布局的简洁性和高效性

2024-11-18 03:48:02 +0800 CST views 861

真的不考虑下 Grid 布局?有时候真的很方便!

本文探讨了Grid布局相较于Flex布局的优势,特别是在宫格类布局、后台管理布局和响应式布局中的应用。通过具体的代码示例,展示了Grid布局的简洁性和高效性,以及如何利用其特性简化开发过程。尽管Grid在某些老旧浏览器中的兼容性不如Flex,但在现代浏览器中已得到广泛支持。选择合适的布局方式是关键。

前言

相信很多前端开发者在日常开发中已经将 Flex 布局运用得非常熟练,几乎所有布局都可以通过 Flex 解决。然而,当我接触到 Grid 布局后,发现有些场景下 Grid 能够更加轻松地完成任务。今天通过几个场景来分享 Grid 布局的优势。

宫格类布局

场景描述

假设我们需要实现一个固定宽度 1000px、高度自适应的宫格布局。每个子元素宽度为 300px,一行展示 3 个,元素从左到右排列,最左边与最右边的元素需要紧挨父元素的左右边框。如下图所示:

使用 Flex 实现

Flex 实现这种布局时需要处理好换行和双端对齐。当最后一行元素不足三个时,会出现对齐问题,需要额外处理。

<!DOCTYPE html>
<html lang="en">
<head>
    <style>
        .box {
            width: 1000px;
            display: flex;
            flex-wrap: wrap;
            justify-content: space-between;
            gap: 10px;
        }
        .item {
            background: pink;
            width: 300px;
            height: 150px;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
    </div>
</body>
</html>

由于最后一行不足 3 个,页面布局和预期不同。常见的处理方式是在最后一行补充空元素以填充空间,但这种方式显得繁琐。

使用 Grid 实现

面对这种布局,Grid 可以非常轻松地实现:

<!DOCTYPE html>
<html lang="en">
<head>
    <style>
        .box {
            display: grid;
            grid-template-columns: repeat(3, 300px);
            justify-content: space-between;
            gap: 10px;
            width: 1000px;
        }
        .item {
            background: pink;
            height: 100px;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
    </div>
</body>
</html>

使用 Grid,只需要简单地设置列宽和列数,布局就自动排列,无需处理额外问题。

实现后台管理布局

场景描述

在实现后台管理布局时,使用 Flex 需要嵌套多个额外的标签,而使用 Grid 则更加简洁且高效。

使用 Grid 实现

<!DOCTYPE html>
<html lang="en">
<head>
    <style>
        .container {
            display: grid;
            grid-template-columns: 250px 1fr;
            grid-template-rows: 100px 1fr 100px;
            grid-template-areas:
                'header header'
                'aside main'
                'aside footer';
            height: 100vh;
        }
        .header {
            grid-area: header;
            background: #b3c0d1;
        }
        .aside {
            grid-area: aside;
            background: #d3dce6;
        }
        .main {
            grid-area: main;
            background: #e9eef3;
        }
        .footer {
            grid-area: footer;
            background: #b3c0d1;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="header">Header</div>
        <div class="aside">Aside</div>
        <div class="main">Main</div>
        <div class="footer">Footer</div>
    </div>
</body>
</html>

Grid 布局可以通过grid-template-areas清晰地定义各个区域的布局。布局结构简单易维护,修改布局时只需调整 CSS 而无需改变 HTML 结构。

实现响应式布局

借助 Grid 的 auto-fillminmax 函数,可以轻松实现响应式布局。

<!DOCTYPE html>
<html lang="en">
<head>
    <style>
        .box {
            display: grid;
            grid-template-columns: repeat(auto-fill, minmax(300px, 1fr));
            justify-content: space-between;
            gap: 10px;
        }
        .item {
            background: pink;
            height: 100px;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="item">1</div>
        <div class="item">2</div>
        <div class="item">3</div>
        <div class="item">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
        <div class="item">8</div>
    </div>
</body>
</html>

Grid 的 auto-fillminmax 能够自动调整布局,根据屏幕宽度动态适应内容,减少了手动编写媒体查询的复杂度。

兼容性对比

虽然 Grid 布局在某些老旧浏览器中的兼容性不如 Flex,但在现代浏览器中,Grid 布局已经得到了广泛的支持。

浏览器Grid 支持情况
Chrome支持
Firefox支持
Safari支持
Edge支持
IE (11及以下)不支持

使用 Grid 布局前,需考虑用户的浏览器版本,以确保兼容性。

结尾

Flex 和 Grid 各有优劣,关键在于根据场景选择最合适的布局方式。在二维布局和复杂页面结构中,Grid 可以简化布局并提高可维护性。希望大家在开发中掌握这两种布局方式,灵活运用。

复制全文 生成海报 前端 布局 Web开发

推荐文章

在 Rust 中使用 OpenCV 进行绘图
2024-11-19 06:58:07 +0800 CST
# 解决 MySQL 经常断开重连的问题
2024-11-19 04:50:20 +0800 CST
10个几乎无人使用的罕见HTML标签
2024-11-18 21:44:46 +0800 CST
网站日志分析脚本
2024-11-19 03:48:35 +0800 CST
ElasticSearch简介与安装指南
2024-11-19 02:17:38 +0800 CST
如何优化网页的 SEO 架构
2024-11-18 14:32:08 +0800 CST
如何在Vue3中处理全局状态管理?
2024-11-18 19:25:59 +0800 CST
html一份退出酒场的告知书
2024-11-18 18:14:45 +0800 CST
PHP服务器直传阿里云OSS
2024-11-18 19:04:44 +0800 CST
7种Go语言生成唯一ID的实用方法
2024-11-19 05:22:50 +0800 CST
PHP 压缩包脚本功能说明
2024-11-19 03:35:29 +0800 CST
CSS 奇技淫巧
2024-11-19 08:34:21 +0800 CST
MyLib5,一个Python中非常有用的库
2024-11-18 12:50:13 +0800 CST
thinkphp分页扩展
2024-11-18 10:18:09 +0800 CST
HTML和CSS创建的弹性菜单
2024-11-19 10:09:04 +0800 CST
虚拟DOM渲染器的内部机制
2024-11-19 06:49:23 +0800 CST
使用 Nginx 获取客户端真实 IP
2024-11-18 14:51:58 +0800 CST
18个实用的 JavaScript 函数
2024-11-17 18:10:35 +0800 CST
MySQL设置和开启慢查询
2024-11-19 03:09:43 +0800 CST
Vue3中如何使用计算属性?
2024-11-18 10:18:12 +0800 CST
程序员茄子在线接单