轻松上手CSS Grid网格布局

2024-08-26 08:38

本文主要是介绍轻松上手CSS Grid网格布局,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

今天刚好要做一个好多div格子错落组成的布局,不是田字格,不是九宫格,12个格子这样子,看起来有点复杂。关键的是笔者有点懒,要写那么多div和css真是不想下手啊。多看了两眼,这布局不跟网格挺像吗?css grid好像就是长这样子的?会不会很简单呢?反正也不熟,实在不行就当学习了。说干就干,说不定能偷点懒呢哈哈~

最终要求的效果图是这样子的:

那么从网格的概念和例子开始,依葫芦画瓢,边看边干吧~

大概看了看,这个和表格类似。要实现效果图的效果,首先给容器设置grid网格属性,然后再看有几行几列。显然是4行5列了,那可以先实现一个4行5列的网格,沿着这个思路实现如下:

grid-container里面有12个div,代表12个格子.

 

<div class="main"><div class="grid-container"><div class="grid-item one">1</div><div class="grid-item two">2</div><div class="grid-item three">3</div><div class="grid-item four">4</div><div class="grid-item five">5</div><div class="grid-item six">6</div><div class="grid-item seven">7</div><div class="grid-item eight">8</div><div class="grid-item nine">9</div><div class="grid-item ten">10</div><div class="grid-item eleven">11</div><div class="grid-item twelve">12</div></div>
</div>

display: grid设置容器网格属性.
grid-template-columns属性定义每一列的列宽,grid-template-rows属性定义每一行的行高.

 

.main{width: 1200px;margin: 30px auto 0;
}
.grid-container{display: grid;grid-template-columns: 385px 180px 180px 180px 180px;grid-template-rows: 180px 180px 180px 180px;
}
.grid-item{border: 2px solid rgb(233,171,88);border-radius: 5px;background-color: rgba(233,171,88,.5);
}

实现效果如下:
设置网格和几行几列后的效果
完成了第一步之后,对比效果图,发现行与行之间和列与列之间都有一定的距离。接下来就开始添加行和列之间的间距。

grid-row-gap属性设置行与行的间隔(行间距),grid-column-gap属性设置列与列的间隔(列间距)

.main{width: 1200px;margin: 30px auto 0;
}
.grid-container{display: grid;grid-template-columns: 385px 180px 180px 180px 180px;grid-template-rows: 180px 180px 180px 180px;grid-column-gap: 24px;grid-row-gap: 24px;
}
.grid-item{border: 2px solid rgb(233,171,88);border-radius: 5px;background-color: rgba(233,171,88,.5);
}

完成效果如下:

再对比以下设计图,那么接下来关键的一步,就是给对应的格子设置跨几行几列了,和表格的rowspan和colspan类似。如果不设置,则默认占1行1列。

grid-column-start属性:左边框所在的垂直网格线
grid-column-end属性:右边框所在的垂直网格线
grid-row-start属性:上边框所在的水平网格线
grid-row-end属性:下边框所在的水平网格线
 

.main{width: 1200px;margin: 30px auto 0;
}
.grid-container{display: grid;grid-template-columns: 385px 180px 180px 180px 180px;grid-template-rows: 180px 180px 180px 180px;grid-column-gap: 24px;grid-row-gap: 24px;
}
.grid-item{border: 2px solid rgb(233,171,88);border-radius: 5px;background-color: rgba(233,171,88,.5);
}
.grid-item.one{grid-row-start: 1;grid-row-end: 3;
}
.grid-item.two{grid-column-start: 2;grid-column-end: 4;
}
.grid-item.three{grid-column-start: 4;grid-column-end: 6;
}
.grid-item.six{grid-column-start: 4;grid-column-end: 6;
}
.grid-item.eight{grid-column-start: 2;grid-column-end: 4;grid-row-start: 3;grid-row-end: 5;
}
.grid-item.ten{grid-column-start: 5;grid-column-end: 6;grid-row-start: 3;grid-row-end: 5;
}

设置完格子所跨的行列之后,效果如下:

走到这一步的话,基本上算是大功告成了,现在的布局基本和效果图一致了。

代码里好多grid-column-start,grid-column-end, grid-row-start, grid-row-end,写起来有些繁琐,那么有没有简写形式呢?答案肯定是有的,下面就来介绍一下:

grid-column属性是grid-column-start和grid-column-end的合并简写形式,grid-row属性是grid-row-start属性和grid-row-end的合并简写形式。

上面的css可以简化为:

.main{width: 1200px;margin: 30px auto 0;
}
.grid-container{display: grid;grid-template-columns: 385px 180px 180px 180px 180px;grid-template-rows: 180px 180px 180px 180px;grid-column-gap: 24px;grid-row-gap: 24px;
}
.grid-item{border: 2px solid rgb(233,171,88);border-radius: 5px;background-color: rgba(233,171,88,.5);
}
.grid-item.one{grid-row: 1 / 3;
}
.grid-item.two{grid-column: 2 / 4;
}
.grid-item.three{grid-column: 4 / 6;
}
.grid-item.six{grid-column: 4 / 6;
}
.grid-item.eight{grid-column: 2 / 4;grid-row: 3 / 5;
}
.grid-item.ten{grid-column: 5 / 6;grid-row: 3 / 5;
}

grid-column和grid-row,也可以使用span关键字,表示跨越多少个网格。因此上面的代码还等价于:

.main{width: 1200px;margin: 30px auto 0;
}
.grid-container{display: grid;grid-template-columns: 385px 180px 180px 180px 180px;grid-template-rows: 180px 180px 180px 180px;grid-column-gap: 24px;grid-row-gap: 24px;
}
.grid-item{border: 2px solid rgb(233,171,88);border-radius: 5px;background-color: rgba(233,171,88,.5);
}
.grid-item.one{grid-row: 1 / span 2;
}
.grid-item.two{grid-column: 2 / span 2;
}
.grid-item.three{grid-column: 4 / span 2;
}
.grid-item.six{grid-column: 4 / span 2;
}
.grid-item.eight{grid-column: 2 / span 2;grid-row: 3 / span 2;
}
.grid-item.ten{grid-column: 5 / span 1;grid-row: 3 / span 2;
}
.main{width: 1200px;margin: 30px auto 0;
}
.grid-container{display: grid;grid-template-columns: 385px 180px 180px 180px 180px;grid-template-rows: 180px 180px 180px 180px;grid-column-gap: 24px;grid-row-gap: 24px;
}
.grid-item{border: 2px solid rgb(233,171,88);border-radius: 5px;background-color: rgba(233,171,88,.5);
}
.grid-item.one{grid-row: span 2 / 3;
}
.grid-item.two{grid-column: span 2 / 4;
}
.grid-item.three{grid-column: span 2 / 6;
}
.grid-item.six{grid-column: span 2 / 6;
}
.grid-item.eight{grid-column: span 2 / 4;grid-row: span 2 / 5;
}
.grid-item.ten{grid-column: span 1 / 6;grid-row: span 2 / 5;
}

 

这篇关于轻松上手CSS Grid网格布局的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1108075

相关文章

PHP轻松处理千万行数据的方法详解

《PHP轻松处理千万行数据的方法详解》说到处理大数据集,PHP通常不是第一个想到的语言,但如果你曾经需要处理数百万行数据而不让服务器崩溃或内存耗尽,你就会知道PHP用对了工具有多强大,下面小编就... 目录问题的本质php 中的数据流处理:为什么必不可少生成器:内存高效的迭代方式流量控制:避免系统过载一次性

Vue和React受控组件的区别小结

《Vue和React受控组件的区别小结》本文主要介绍了Vue和React受控组件的区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录背景React 的实现vue3 的实现写法一:直接修改事件参数写法二:通过ref引用 DOMVu

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

Python脚本轻松实现检测麦克风功能

《Python脚本轻松实现检测麦克风功能》在进行音频处理或开发需要使用麦克风的应用程序时,确保麦克风功能正常是非常重要的,本文将介绍一个简单的Python脚本,能够帮助我们检测本地麦克风的功能,需要的... 目录轻松检测麦克风功能脚本介绍一、python环境准备二、代码解析三、使用方法四、知识扩展轻松检测麦

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

Python实现网格交易策略的过程

《Python实现网格交易策略的过程》本文讲解Python网格交易策略,利用ccxt获取加密货币数据及backtrader回测,通过设定网格节点,低买高卖获利,适合震荡行情,下面跟我一起看看我们的第一... 网格交易是一种经典的量化交易策略,其核心思想是在价格上下预设多个“网格”,当价格触发特定网格时执行买

小白也能轻松上手! 路由器设置优化指南

《小白也能轻松上手!路由器设置优化指南》在日常生活中,我们常常会遇到WiFi网速慢的问题,这主要受到三个方面的影响,首要原因是WiFi产品的配置优化不合理,其次是硬件性能的不足,以及宽带线路本身的质... 在数字化时代,网络已成为生活必需品,追剧、游戏、办公、学习都离不开稳定高速的网络。但很多人面对新路由器

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二