最强大的布局方案——网格Grid布局万字详解

这篇具有很好参考价值的文章主要介绍了最强大的布局方案——网格Grid布局万字详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Grid 布局又称网格布局,是W3C提出的一个二维布局系统,它与 Flex 布局有一定的相似性,都可以指定容器内部多个项目的位置。但它们也存在重大区别。Flex 布局是轴线布局,只能指定"项目"针对轴线的位置,可以看作是一维布局。Grid 布局则是将容器划分成"行"和"列",产生单元格,然后指定"项目所在"的单元格,可以看作是二维布局。目前为止Grid布局是CSS中最为强大的布局方案。

一、基础概念与浏览器支持

截止目前为止许多浏览器都提供了对 CSS Grid 的原生支持,而且无需加浏览器前缀:Chrome(包括 Android ),Firefox,Edge,Safari(包括iOS)和 Opera 。 另一方面,Internet Explorer 10和11也支持Grid布局,但是是以一个过时的语法实现。

各大主流浏览器对于Grid布局的支持情况如下图所示:

PC端浏览器:

grid布局,javascript,前端,vue.jsgrid布局,javascript,前端,vue.js

学习CSS Grid布局前,我们先需要了解以下基础概念:

1、网格容器(Grid Container)

采用Grid 网格布局的元素称为网格容器,即应用display: grid的元素。

2、网格项目(Grid Item)

网格容器内部采用Grid 网格布局的直接子元素即为网格项目,注意网格项目的子元素不再是网格项目,举个🌰:

<div id="container" style="display: grid;">
	<div class="item"><span></span></div>
	<div class="item"><span></span></div>
	<div class="item"><span></span></div>
</div> 

上面示例中container元素就是网格容器,item元素就是网格项目,注意item里的span元素并不是网格项目,不受Grid 网格布局的影响。

3、网格轨道(Grid Track)

关于网格布局可以直接想象成一个网格,而网格轨道就是这个网格中的“行”和“列”。 grid布局,javascript,前端,vue.js

4、网格线(Grid Line)

划分网格的线,称为"网格线"(grid line)。水平网格线(column grid lines)划分出行,垂直网格线(row grid lines)划分出列。一个m * n的网格有m+1根水平网格线,n+1根垂直网格线。

5、单元格(Grid cell)

网格系统的最小单元,行和列的交叉区域,一个 m * n 的网格有 m * n 个单元格。

6、网格区域(Grid Area)

一个 网格区域可以由任意数量的网格单元格组成,如下图所示:

grid布局,javascript,前端,vue.js

橙色边框包围内容就是一个网格区域。

二、网格容器属性

1、display属性

将元素定义为网格容器,并为其内容建立新的网格格式上下文。

属性值:

  • grid: 生成块级网格
  • inline-grid: 生成内联网格
  • subgrid: 生成一个继承其父级网格容器的行和列的大小的网格容器,它是其父级网格容器的一个子项

注意:设为网格布局以后,容器子元素(项目)的float、display: inline-block、display: table-cell、vertical-align 和 column-* 等设置都将失效。

2、grid-template-columns,grid-template-rows属性

容器指定了网格布局以后,接着就要定义网格轨道,即划分行和列。grid-template-columns属性定义每一列的列宽,grid-template-rows属性定义每一行的行高。

用法:

grid-template-columns: <track-size> ... | <line-name> <track-size> ... ;
grid-template-rows: <track-size> ... | <line-name> <track-size> ... ; 

属性值:

  • track-size: 网格轨道大小,可以使用css长度,百分比或用分数(用fr单位)。
  • line-name: (可选)使用方括号来指定网格线名字,方便以后的引用,网格布局允许同一根网格线有多个名字。
2.1、网格线的名称

如果没有直接指定网格线的名称网格线会自动分配正数和负数名称。示例:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="gbk"/>
	<meta name="viewport" content="width=device-width"/>
	<title>Grid 网格布局</title>
	<style type="text/css"> .container {			margin: 20px;			display: grid;			grid-template-columns: 50px 50px 50px;			grid-template-rows: 50px 50px 50px;
 		}
 		.item { 			text-align: center;			border: 1px solid gray;
 		} </style>
</head>
<body>
	<div class="container">
 		<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 class="item">9</div>
	</div>
</body>
</html> 

页面效果:

grid布局,javascript,前端,vue.js

网格线名称如上图所示。

我们也可以直接给网格线定义名字,示例:

.container{display:grid;grid-template-columns: [col1-start] 50px [col1-end col2-start] 50px [col2-end col3-start] 50px [col3-end];grid-template-rows: [row1-start] 50px [row1-end row2-start] 50px [row2-end row3-start] 50px [row3-end] ;
} 

其中有的网格线就不止一个名字,例如[col1-end col2-start]。

2.2、repeat()

有时候,重复写同样的值非常麻烦,尤其网格很多时。这时,可以使用repeat()函数,简化重复的值。

用法:

repeat (m , n) 

参数: m: 重复的次数 n: 重复的值

上面的示例代码用repeat方法可以改写成:

.container {display: grid;grid-template-columns: repeat(3, 50px);grid-template-rows: repeat(3, 50px);
} 

repeat()重复某种模式也是可以的,示例:

.container {display: grid;grid-template-columns: repeat(2, 100px 20px 80px);
} 

页面效果:

grid布局,javascript,前端,vue.js
2.3、auto关键字

当你设置行或列大小为auto时,浏览器为自动为网格分配空间,示例:

.container {	
	display: grid;grid-template-columns: 50px auto 50px;grid-template-rows: 50px auto 50px;
} 

页面效果:

grid布局,javascript,前端,vue.js

可以清晰地看到第二列的宽度基本上等于该列单元格的最大宽度,除非单元格内容设置了min-width且值大于最大宽度。

第二行的高度表现出了“包裹性”,即由内部文本或子元素决定高度。

2.4、auto-fill 关键字

有时,单元格的大小是固定的,但是容器的大小不确定。如果希望每一行(或每一列)容纳尽可能多的单元格,这时可以使用auto-fill关键字表示自动填充。

.container {display: grid;grid-template-columns: repeat(auto-fill, 150px);
} 

页面效果:

在浏览器窗口缩放的情况下:

grid布局,javascript,前端,vue.js

在浏览器窗口全屏的情况下&文章来源地址https://www.toymoban.com/news/detail-721124.html

到了这里,关于最强大的布局方案——网格Grid布局万字详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • draggable + grid 拖拽插件 + 网格布局 动态生成首页模版

    背景:         1、首页模板由多个子组件组成,如图表、新闻、公告、轮播图等,一般都由前端引入子组件,写在固定的位置上,最终形成一个固定的首页模板;         2、像这样直接在代码中写死的首页没有灵活性,不同用户想展示出来的首页模板千篇一律;        

    2024年02月01日
    浏览(41)
  • css3-grid:grid 布局 / 基础使用

    一、理解 grid   二、理解 css grid 布局 CSS Grid布局是一个二维的布局系统,它允许我们通过定义网格和网格中每个元素的位置和尺寸来进行页面布局。CSS Grid是一个非常强大的布局系统,它不仅可以用于构建网格布局,还可以用于定位元素,并且可以很好地处理复杂的布局。

    2024年02月12日
    浏览(42)
  • CSS Grid布局

    网格布局(Grid)将王爷分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。Grid布局与Flex不具有一定的相似性,都可以指定容器内部多个项目的位置,但是他们存在重大的区别。flex布局时轴线布局,只能指定项目针对轴线的位置,可以看作是一维布局;grid布

    2024年02月15日
    浏览(52)
  • 43.CSS grid布局

    本节我们学习的初始代码如下: 注:如上,同行情况下,一个元素有高度的话,同行元素会被拉伸,这是默认行为 注:(3)没有被拉伸是因为它有固定高度

    2023年04月18日
    浏览(49)
  • 全面了解 Grid 布局

    grid 布局简介 Grid 布局是一种用于网页布局的 CSS 技术,它允许开发者定义一个元素内部的行和列,并在这些网格中放置子元素,是一个强大的布局方式。 容器属性 Grid 布局需要在父容器上设置 display 属性为 grid 或 inline-grid,以表明它们包含网格项。 行列定义 使用 grid-templ

    2024年02月01日
    浏览(35)
  • Grid 拖拽布局实现

    最近有个需求需要实现自定义首页布局,需要将屏幕按照 6 列 4 行进行等分成多个格子,然后将组件可拖拽对应格子进行渲染展示。 示例 对比一些已有的插件,发现想要实现产品的交互效果,没有现成可用的。本身功能并不是太过复杂,于是决定自己基于 vue 手撸一个简易的

    2024年02月05日
    浏览(38)
  • CSS-grid布局

    网格布局也叫grid布局,平常写样式的时候基本上都是用的flex布局。 像以下布局,用flex布局就可能会有有点麻烦,这时候用grid布局就方便的多了。 或者是照片墙 grid布局就是将容器划分为行和列,产生单元格,然后在指定的单元格,可以看作是二维布局,我们一直经常用的

    2024年02月13日
    浏览(56)
  • css中的grid高频布局

    1.一个父级容器内有n个子元素; 2.每个子元素最小宽度是100px; 3.每个子元素最大宽度根据屏幕宽度自适应; 4.每个子元素的宽度保持同宽; 5.每个元素之间有间隔,每一行的两边不留间隙,每一列的上下不留间隙; 6.每个子元素中的文本超出之后省略显示; css排版常见布局

    2024年02月04日
    浏览(57)
  • css3 Grid布局

    Grid布局是一种强大的CSS布局系统,它可以帮助我们创建灵活的网格结构,使网页布局更易于管理和响应式。 Grid布局由网格容器(Grid Container)和网格项(Grid Item)组成。网格容器是包含网格项的父元素,而网格项则是直接放置在网格容器中的子元素。 在上述示例中,我们创

    2024年02月09日
    浏览(80)
  • css3 grid 布局

    特别声明:这篇博客转载于阮一峰老师,转载是为了方便日后复习,实在写的太棒了。 目录 一、概述 二、基本概念 2.1 容器和项目 2.2 行和列 2.3 单元格 2.4 网格线 三、容器属性 3.1 display 属性 3.2grid-template-columns 属性,grid-template-rows 属性 3.3grid-row-gap 属性,grid-column-gap 属性,

    2024年02月10日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包