使用css grid构建复杂布局的小技巧!(值得收藏)

使用css grid构建复杂布局的小技巧!(值得收藏)

(推荐教程:CSS教程)

网格布局是现代CSS中最强大的功能之一。使用网格布局可以帮助我们在没有任何外部 UI 框架的情况下构建复杂的、快速响的布局。在这篇文章中,将会介绍所有我们需要了解的 CSS 网格知识 。

CSS 网格的基础知识

我们直接进入代码,如下所示,先写些标签,源码在这个链接里面:https://codepen.io/Shadid/pen/zYqNvgv

Header
Section
Footer

在上面,我们创建了一个header、两个aside和一个footer元素,并将它们包装在一个container 元素中。我们为容器元素中的所有元素添加背景色和字体大小。

立即学习“前端免费学习笔记(深入)”;

.container > * {  background: aquamarine;  font-size: 30px;}

运行的网页如下:

1.png

现在我们添加一些网格属性:

.container {  display: grid;  grid-gap: 5px;  grid-template-areas:     "header"    "aside-1"    "aside-2"    "section"    "footer"}/* Assign grid areas to elements */header {  grid-area: header;}aside:nth-of-type(1) {  grid-area: aside-1;}aside:nth-of-type(2) {  grid-area: aside-2;}section {  grid-area: section;}footer {  grid-area: footer;}

首先,我们定义了display:grid,它将启用网格布局,然后我们使用grid-gap在网格元素中增加间隙。

接下来,我们为每个html元素分配了一个网格区域名称。在container 类中,我们可以使用grid-template-areas`属性定 义html 模板的外观,注意网格模板区域是如何排列的。

grid-template-areas:     "header"    "aside-1"    "aside-2"    "section"    "footer"

元素的顺序与 dom 结构不同。但是,最终按我们网络区域的顺序来展示。

2.png

下一步是使我们的页面具有响应性。我们希望在更大的屏幕上使用不同的布局。CSS网格使得处理媒体查询和创建响应式布局变得非常容易。看下面代码:

@media (min-width: 670px) {  .container {    grid-template-areas:       "header  header  header"      "aside-1 section  aside-2"      "footer    footer    footer"  }}

我们所要做的就是在媒体查询中重新排序网格模板区域。

3.gif

网格列和行

如何使用 CSS 网格来组织列和? 先从下面的代码开始:

One

Two

Three

Four

Five

Six

添加一些基本的 css

.container {  display: grid;  height: 100vh;  grid-gap: 10px;}.item {  background: lightcoral;}

我们为上面的 dom 结构使用了网格布局,并使用grid-gap增加了风格之间的间距。 现在,我们使用grid-template-columns属性来添加一些列。

.container {    display: grid;    height: 100vh;    grid-gap: 10px;    grid-template-columns: 100px 200px auto auto;}

就像这样,我们使用了列。 我们指定第一列为100px,第二列为200px。 由于我们在第3列和第4列中应用了auto,因此剩余的屏幕长度将在其中分成两半。

4.png

可以看到现在页面中有一个空白。 如果我想将第六列移至第三列第四列怎么办? 为此,我们可以使用grid-column-startgrid-column-end属性。

.item:nth-of-type(6) {  grid-column-start: 3;  grid-column-end: 5;}

注意,我们使用grid-column-end: 5,值5指向列线。 第四列在网格的第五行结束。 grid-column-startgrid-column-end值是指网格线。

如果你觉得网格线的值让人困惑,你也可以使用span,下面的效果与上面一样:

.item:nth-of-type(6) {  grid-column-start: 3;  grid-column-end: span 2;}

对于span 2,指定p占用网格中的两个插槽。 现在,假设要扩展第二列填充下面的空白区域。 我们也可以通过grid-column-start属性轻松地做到这一点。

.item:nth-of-type(2) {  grid-row-start: span 2;}

我们使用spangrid-row-start来指定我们想要占据两个插槽。

5.png

如上所见,我们已经能够使用少量的CSS网格属性来构建非常复杂的布局。

有效地使用 grid-templates

现在来看看grid-templates,在本节中,我们将讨论如何为不同的屏幕大小创建不同的布局。

首先,还是先来一段 dom 结构:

header
Section
Footer

接着,添加一些样式:

``.container { display: grid; height: 100vh; grid-gap: 10px;}.container > * { background: coral; display: flex; justify-content: center; align-items: center;}```

我们给元素添加了背景色。从上面的代码中可以看到,我们也使用了flex属性。我们可以将flexgrid结合在一起。在这个特殊的例子中,我们使用flex属性中心对齐内容。

6.png

对于移动端,我们希望sectionheader下面,rightsection 下面,我们可以使用网格区域来完成。首先,我们定义网格区域:

.container {  display: grid;  height: 100vh;  grid-gap: 10px;  grid-template-areas:    "header"    "section"    "right"    "left"    "footer"}aside:nth-of-type(1) {  grid-area: left;}aside:nth-of-type(2) {  grid-area: right;}section {  grid-area: section;}footer {  grid-area: footer;}header {  grid-area: header;}

grid-template-areas 中可以看到,我们先有header ,然后是section,然后是right,最后是left。此外,我们希望我们的sectionleftright都大点。为了实现这一点,我们可以使用rid-template-rows 属性

.container {  display: grid;  height: 100vh;  grid-gap: 10px;  grid-template-areas:     "header"    "section"    "right"    "left"    "footer";  grid-template-rows: 1fr 6fr 2fr 2fr 1fr;}

8.gif

我们可以根据需要设置移动端的视图,接下我们使用媒体查询来适配一下大屏幕:

@media (min-width: 500px)  {  .container {    grid-template-areas:       "header header  header"      "left   section right"      "footer footer  right";    grid-template-rows: 1fr 6fr 1fr;    grid-template-columns: 1fr 6fr 1fr;  }}

如何使用minmax函数动态跟踪元素的大小

假设我们有两列,它们均匀地占据了屏幕上的可用空间。通过使用 grid-template-columns,我们可以很容易地做到这一点。但是,如果我们想要其中一个在200px500px之间呢?我们的列可以适应不同的屏幕尺寸,但其中一个永远不会大于500px或小于200px

对于这些类型的场景,我们使用minmax函数。 让我们来看看它的实际效果。

One

Two

.container {  display: grid;  height: 100vh;  grid-template-columns: minmax(200px, 500px) minmax(100px, auto);}.one {  background: cyan;}.two {  background: pink;}

在这个例子中,第一列总是在200px500px之间。然而,第二列的最小值可以是100px,对于更大的屏幕,它将覆盖屏幕的其余部分。

如何使用 repeat 函数?

我们讨论一下元素中的重复模式。我们如何处理它们?我们可以重复我们的代码或使用javascript。不过,还有另一种方法可以用css来实现。repeat函数表示轨道列表的一个重复片段,允许以更紧凑的形式编写显示重复模式的大量列或行。

This item is 50 pixels wide.

Item with flexible width.

This item is 50 pixels wide.

Item with flexible width.

Inflexible item of 100 pixels width.

#container {  display: grid;  grid-template-columns: repeat(2, 50px 1fr) 100px;  grid-gap: 5px;  box-sizing: border-box;  height: 200px;  width: 100%;  background-color: #8cffa0;  padding: 10px;}#container > p {  background-color: #8ca0ff;  padding: 5px;}

7.png

嵌套网格

我还可以将网格嵌套在另一个网格中, 来看看如何实现这一点:

One

Two

Three

i

ii

iii

iv

v

vi

Five

Six

我们首先在外部container上声明网格:

.container {  display: grid;  height: 100vh;  grid-gap: 10px;  grid-template-columns: repeat(auto-fill, minmax(200px, auto))}

注意,我们在网格模板中有一个repeat函数,并将其与一个minmax函数组合在一起。我们现在也可以将网格属性应用到内部网格。

.inner-grid {  display: grid;  background: white;  height: 100%;  grid-gap: 5px;  grid-template-columns: repeat(3, auto);}

这样,我们网格中嵌套了一个网格。

8.png

今天就跟大家分享到这里,感谢大家的观看,我们下期再见!

原文地址:https://blog.soshace.com/how-to-build-complex-layouts-with-css-grid/作者:Shadid Haque

更多编程相关知识,请访问:编程入门!!

以上就是使用css grid构建复杂布局的小技巧!(值得收藏)的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1615904.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月24日 05:08:11
下一篇 2025年12月24日 05:08:20

相关推荐

  • css怎么使用外部艺术字

    因为系统自带的字体样式很少,并且多数不好看,所以有了引入外部艺术字体的想法。 (视频教程推荐:css视频教程) 方法如下: .shopName { /*使用你自己的字体*/ font-family:fusanghu; font-style: oblique; font-size: 29px; fon…

    好文分享 2025年12月24日
    000
  • 你知道怎么使用纯css来实现下拉菜单效果么

    具体实现步骤如下: (视频教程推荐:css视频教程) 1、用ul 和 li标签写一个关联结构(ul 和 li的父子关系浑然天成,一般的关联结构都用它们) 服装 衬衫 棉袄 裤衩 2、对界面进行初始化 立即学习“前端免费学习笔记(深入)”; *{ padding: 0; margin: 0; } 3、…

    2025年12月24日
    000
  • 你知道怎么利用css实现内凹圆角么

    本文利用径向渐变来实现背景透明的内凹圆角。 (视频教程推荐:css视频教程) 基本线性渐变 div { height: 100px; width: 200px; background-image: linear-gradient(90deg, red, blue);}从左到右的红到蓝渐变 加百分比调…

    2025年12月24日
    000
  • css line-height值为150%或1.5值的区别

    下面css栏目给大家介绍一下line-height:150%与line-height:1.5的区别。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 (推荐教程:CSS视频教程) 这是一个小小的不经意的问题,但是却常常被一些面试官提起。一般都会一下子进入懵逼状态,那让我们来看看区别在…

    2025年12月24日 好文分享
    000
  • 深入浅析css中的z-index

    z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。(推荐教程:CSS视频教程) 层级关系的比较 1. 对于同级元素,默认(或position:static)情况下文档流后面的元素会覆盖前面的。 立即学习“前端免费学习笔记(深入)”; 2. 对于同级元素…

    2025年12月24日 好文分享
    000
  • css实现图片在div中居中的方法有哪些

    本文为大家介绍了图片在div中居中的四种方法,希望对大家有所帮助。 方法一: (推荐教程:css视频教程) html: 立即学习“前端免费学习笔记(深入)”; @@##@@ css .title { width: 100%; font-size: 0; height: 10%;}.title .co…

    2025年12月24日
    000
  • css如何制作饼状图

    前言: 在工作中,有时我们会有饼状图的需求,如统计图表、进度指示器、定时器等,当然,实现方式也有很多,甚至有现成的js库可以拿来直接使用。兴趣使然,自己动手利用纯css实现饼状图,看看效果如何。 (视频教程推荐:css视频教程) .pie { width: 100px; height: 100px;…

    2025年12月24日 好文分享
    000
  • vertical-align负值和margin-bottom负值的差异有哪些?

    vertical-align负值和margin-bottom负值的差异有哪些?下面本篇文章给大家介绍一下vertical-align负值和margin-bottom负值的区别。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 先看一下vertical-align在W3C当中的值有哪一…

    2025年12月24日
    000
  • css可以去掉浮动吗?

    css可以去掉浮动;css去掉浮动的方法:1、父级容器定义“overflow:hidden”样式;2、浮动结尾处,添加带有“clear:both”样式的div或p标签;3、父级容器定义“overflow:auto”样式。 推荐教程:CSS视频教程 浮动是布局的时用到的一种技术,能够方便我们进行布局。…

    2025年12月24日
    000
  • 详解CSS中优先级和Stacking Context等高级特性,带你更深入了解CSS!!

    通常我们在学习CSS的时候,感觉语法很容易掌握,实际应用中却碰到各式各样难以填补的“坑”,为避免大家受到同样的困惑与不解,本文详细讲解了CSS中优先级和Stacking Context等高级特性。让你更深入了解CSS。 CSS 优先级 优先级是浏览器是通过判断哪些属性值与元素最相关以决定并应用到该元…

    2025年12月24日 好文分享
    000
  • css如何禁止元素的点击事件

    在实际工作中,如果我们需要禁止某个元素的点击事件,可以将该元素的pointer-events属性设为none。 (推荐教程:CSS教程) 如下: 立即学习“前端免费学习笔记(深入)”; 测试代码: .disabled { pointer-events: none; cursor: default; …

    2025年12月24日
    000
  • css实现禁止页面文字被选中功能

    通过css实现页面文字不能被选中 (推荐教程:CSS教程) .cannotselect { -webkit-touch-callout: none; -webkit-user-select: none; -moz-user-select: none; -ms-user-select: none; u…

    2025年12月24日
    000
  • 深入浅析CSS 布局和 BFC

    CSS布局中有一些概念,一旦你理解了它们,就能真正提高你的 CSS 布局能力。本文是关于块格式化上下文(BFC)的。你可能从未听说过这个术语,但是如果你曾经用CSS做过布局,你可能知道它是什么,理解什么是 BFC,怎么工作以及如何创建 BFC 非常有用,这些可以帮助你理解CSS中的布局是如何工作的。…

    2025年12月24日 好文分享
    000
  • 7个实用的CSS background-image小技巧

    (推荐教程:CSS教程) background-image可能是我们所有人(前端开发人员)在我们的职业生涯中至少使用过几次的CSS属性之一。大多数人认为背景图像没有什么不寻常的,但经过研究,答案并非如此。 所以本文收集了7个我认为最有用的技巧,并创建了一些代码示例,你可以在其中查看正在发生的事情。 …

    2025年12月24日 好文分享
    000
  • css实现文字描边以及倒影效果

    描边: 主流浏览器都支持 (推荐教程:css视频教程) -webkit-text-stroke: ;-webkit-text-stroke:4px pink;/*描边宽度4px,字体颜色粉红*/ 倒影:谷歌、safari、opera支持,火狐不支持 -webkit-box-reflect: ;-we…

    2025年12月24日
    000
  • 16 个CSS开发中需要了解的DevTools技巧

    大多数开发者基本都使用浏览器的开发者工具调试前端,但即使用了好几年 Chrome 的开发者工具,我仍然会遇到从未见过的技巧和功能。 在本文中,我写了许多在开发者工具中与 CSS 相关的功能和技巧,我认为它们将把你的 CSS 开发水平提升至一个新的台阶。其中一些技巧不仅仅针对 CSS,但是我还是把它们…

    2025年12月24日 好文分享
    000
  • css如何实现对号效果

    实现对号效果,一种思路是利用现成的符号,直接在网上搜索到 √,插入页面。另一种思路是本文要介绍的用 CSS 实现,思路是: (相关推荐:css视频教程) 给块级元素设置宽度和高度 设置元素相邻的两个 border 立即学习“前端免费学习笔记(深入)”; 旋转元素 HTML 解析: 此处需要使用块级元…

    2025年12月24日
    000
  • css如何控制元素的显示与隐藏

    属性介绍: (推荐教程:css视频教程) 1. display属性 display属性用于设置一个元素应如何显示。 立即学习“前端免费学习笔记(深入)”; display: none; 隐藏对象display: block; 除了转换为块级元素之外,同时还有显示元素的意思 display隐藏元素后,…

    2025年12月24日
    000
  • 了解一些 提高前端开发效率的 CSS 属性选择器

    (推荐教程:CSS教程) 属性选择器非常神奇。它们可以使你摆脱棘手的问题,帮助你避免添加类,并指出代码中的一些问题。但是不要担心,虽然属性选择器非常复杂和强大,但是它们很容易学习和使用。在本文中,我们将讨论它们是如何运行的,并给出一些如何使用它们的想法。 通常将 HTML 属性放在方括号中,称为属性…

    2025年12月24日
    000
  • 详细介绍CSS计数器

    css计数器效果是指使用CSS代码实现随元素的数目增多, 数值也跟着变大的效果, 有点类似于 , 但是比ol更灵活。 (推荐教程:css视频教程) CSS计数器有两个属性 (counter-reset 和 counter-increment) 和一个方法 (counter() / counters(…

    2025年12月24日 好文分享
    000

发表回复

登录后才能评论
关注微信