grid布局

这篇博客详细介绍了CSS Grid布局,包括基本布局、display:grid的使用、grid-template-columns和grid-template-rows的设置,以及repeat()、auto-fill、fr关键字、minmax()、auto等概念。此外,还讲解了grid-row-gap、grid-column-gap、grid-gap的行间距和列间距设定,以及如何通过grid-template-areas定义区域。

CSS Grid布局

1.基本布局

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-b0OHqhJx-1626505727506)(C:\Users\2018-jsb\AppData\Roaming\Typora\typora-user-images\image-20200829140703793.png)]

实现上面布局

html
<view class="dis-gird">
    <view>1</view>
    <view>2</view>
    <view>3</view>
    <view>4</view>
    <view>5</view>
    <view>6</view>
    <view>7</view>
    <view>8</view>
    <view>9</view>
</view>


css
.dis-gird{
    display: grid;  //使用grid布局
    grid-template-columns: 33.33% 33.33% 33.33%;  //定义每一列的列宽
    grid-template-rows: 100px 100px 100px; //定义每一行的行高
    border:1px solid #ddd;
	view{
        text-align: center;
        display: flex;
        justify-content: center;
        flex-direction: column;
	}
    view:nth-child(even){
    	background: #C8C7CC;
    }
}

2.display:grid;

display: grid;  //使用grid布局
grid-template-columns: 33.33% 33.33% 33.33%;  //定义每一列的列宽
grid-template-rows: 100px 100px 100px; //定义每一行的行高

grid-template-columns 有几个参数 表示有几列 ,单位可以使用绝对单位(px)和百分比(%)。

grid-template-rows 有几个参数 表示有几行

grid-template-columns:25% 25% 25% 25%;
grid-template-rows:100px 100px 100px;
将元素分成三行四列  

3.grid-template-columns 和grid-template-rows

3.repeat()

repeat(x,value); x:要重复的次数 value:要重复的值;值也可以是某种模式

grid-template-columns:25% 25% 25% 25%;  
参数相同需要些四次,可以使用repeat();
grid-template-columns:repeat(4,25%);
grid-template-columns:repeat(2,100px 20px 60px); 
相当于
grid-template-columns:100px 20px 60px 100px 20px 60px;

4.auto-fill

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

grid-template-columns:repeat(auto-fill,100px);
每列宽100px 自动填充列

5. fr 关键字 (倍数)

grid-template-columns:1fr 2fr 1fr;  // 将元素分成三份  相当于25% 50% 25%


//可以和绝对单位混合使用。 第一列固定100px 剩下的宽度分成两列 前一列是后一列的两倍
grid-template-columns:100px 2fr 1fr;

6.minmax()

minmax()函数产生一个长度范围,表示长度就在这个范围之中。它接受两个参数,分别为最小值和最大值

grid-template-columns: 1fr 1fr minmax(100px, 1fr);
minmax(100px, 1fr)表示列宽不小于100px,不大于1fr。

7.auto()

auto关键字表示由浏览器自己决定长度

grid-template-columns: 100px auto 100px;
元素分成三列 第一列和第三列 固定100px  第二列自适应

8.网格线的名称

grid-template-columns: [c1] 100px [c2] 100px [c3] auto [c4];
网格布局允许同一根线有多个名字,比如[fifth-line row-5]

4.grid-row-gap 行间距

设置行与行的间隔(行间距)

div{
	display:grid;
	grid-template-columns:repeat(3,100px);
	grid-trmplate-row:repeat(3,100px);
	grid-row-gap:20px;  //行间距20px
}

5.grid-column-gap 列间距

设置列与列的间隔(列间距)

div{
	display:grid;
	grid-template-columns:repeat(3,100px);
	grid-trmplate-row:repeat(3,100px);
	grid-column-gap:20px;  //列间距20px
}

6.grid-gap

grid-row-gap 和 grid-column-gap的合并简写

grid-gap: grid-row-gap grid-column-gap;
grid-gap:10px 20px;//
grid-gap:20px 20px;  第一个值和第二个值相同  可以简写成  grid-gap:20px;

7.grid-template-areas 定义区域

先看效果图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A0jU02LJ-1626505727507)(C:\Users\2018-jsb\AppData\Roaming\Typora\typora-user-images\image-20200831140307332.png)]

实现代码

html
<view class="dis-gird">
    <view class="header">Header</view>
    <view class="nav">Navigation</view>
    <view class="main">Main area</view>
    <view class="footer">Footer</view>
</view>

css
.dis-gird {
    display: grid;
    width: 100%;
    height: 250px;
    grid-template-areas: "head head"
    					"nav  main"
    					"nav  foot"; 
    grid-template-rows: 50px 1fr 30px;
    grid-template-columns: 100px 1fr; 
    .header {
        grid-area: head;
        background-color: #8ca0ff;
    }
    .nav {
        grid-area: nav;
        background-color: #ffa08c;
    }
    .main {
        grid-area: main;
        background-color: #ffff64;
    }
    .footer {
        grid-area: foot;
        background-color: #8cffa0;
    }
}

解释: 通过 grid-template-rows 和 grid-template-columns 可以看出网格布局是被分成 两列 三行的
grid-template-areas: “head head” //定义第一行为 head
“nav main” //第二行为 nav + main元素 nav100px main撑满
“nav foot”; //第三行为 nav + foot

​ grid-template-areas 定义时还可以使用 ‘. ’ 表示某些区域不适用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8l42c2ww-1626505727514)(C:\Users\2018-jsb\AppData\Roaming\Typora\typora-user-images\image-20200831141909089.png)]

grid-template-areas: ". head"    //注意这里  将第一列使用了  "."  表示不使用
    				"nav  main"
    				"nav  foot"; 

​ grid-template-areas 定义时还可以使用 ‘. ’ 表示某些区域不适用

[外链图片转存中…(img-8l42c2ww-1626505727514)]

grid-template-areas: ". head"    //注意这里  将第一列使用了  "."  表示不使用
    				"nav  main"
    				"nav  foot"; 
<think>我们参考了多个关于Grid布局的引用资料,现在需要整合这些信息,为用户提供Grid布局的详细介绍和使用方法。 引用[1]提到:grid布局是W3C提出的二维布局系统,通过display: grid设置。它能够简化复杂布局,目前需要浏览器支持(如Chrome开启实验性功能)。 引用[2]和[3]介绍了基本用法:在容器上设置display: grid,然后使用grid-template-rowsgrid-template-columns定义行和列的大小。单位可以使用px、百分比等。 引用[4]明确了容器和项目的概念:设置display: grid的元素是容器,其直接子元素是项目(不包括子元素的后代)。 根据以上信息,我们为用户整理Grid布局的详细介绍和使用方法。 步骤: 1. Grid布局概述:什么是Grid布局,它的优势。 2. 基本概念:容器和项目。 3. 创建Grid容器:使用display: grid。 4. 定义行和列:grid-template-rowsgrid-template-columns。 5. 单位介绍:px, %, fr等。 6. 其他常用属性:网格线、间距、项目放置等(虽然引用中没有详细提到,但作为完整指南,可以简要提及,并引导用户参考更多资源)。 7. 浏览器兼容性。 8. 学习资源推荐。 由于引用内容有限,我们将主要基于引用内容进行介绍,并适当补充一些必要的基础知识。 注意:我们引用的内容要标注引用标识。 </think>### Grid布局详细介绍和使用方法 #### 1. Grid布局概述 Grid布局是W3C推出的**二维布局系统**,通过`display: grid`声明可将任何元素转换为网格容器。相比浮动和定位等传统布局方式,Grid能更直观地解决复杂布局问题,尤其适合**行列交叉**的页面结构[^1]。 #### 2. 核心概念 - **容器(container)**:设置`display: grid`的元素 - **项目(item)**:容器的**直接子元素** ```html <section class="container"> <!-- 容器 --> <div>项目1</div> <!-- 项目 --> <div>项目2</div> <!-- 项目 --> </section> ``` > 注意:项目的子元素(如`<p>`)不属于网格项目[^4] #### 3. 基本使用 ##### (1) 定义行列 ```css .container { display: grid; grid-template-columns: 100px 100px 100px; /* 3列,每列100px */ grid-template-rows: 50% 50%; /* 2行,每行占50%高度 */ } ``` ![Grid行列示意图](https://via.placeholder.com/300x150?text=3列×2行布局) ##### (2) 单位支持 - **固定单位**:`px`(如`100px`) - **相对单位**:`%`(如`25%`) - **自适应单位**:`fr`(如`grid-template-columns: 1fr 2fr`) ```css /* 四列等宽布局 */ grid-template-columns: 25% 25% 25% 25%; ``` [^3] #### 4. 高级技巧 ##### (1) 间距控制 ```css .container { grid-gap: 20px; /* 行列间距统一为20px */ /* 或分开设置 */ column-gap: 10px; row-gap: 15px; } ``` ##### (2) 项目定位 ```css .item:first-child { grid-column: 1 / 3; /* 占据第1~2列 */ grid-row: 1; /* 占据第1行 */ } ``` ##### (3) 响应式布局 ```css .container { grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); } ``` #### 5. 浏览器兼容性 | 浏览器 | 支持情况 | |--------|----------| | Chrome | 57+ (需开启实验性功能) | | Edge | 16+ (带前缀) | | Firefox| 52+ | | Safari | 10.1+ | > 推荐使用Chrome浏览器,通过访问`chrome://flags`开启`#enable-experimental-web-platform-features`选项[^1] #### 6. 最佳实践 1. **优先定义网格轨道**:先规划行列结构 2. **命名网格线**增强可读性: ```css grid-template-columns: [start] 1fr [center] 2fr [end]; ``` 3. 使用`minmax()`函数创建弹性网格: ```css grid-template-columns: minmax(100px, 1fr) 3fr; ``` #### 7. 学习资源 1. [Grid by examples](https://gridbyexample.com/) - 实例教程 2. [W3C Grid规范](https://www.w3.org/TR/css-grid-1/) - 官方文档 3. [A Complete Guide to Grid](https://css-tricks.com/snippets/css/complete-guide-grid/) - 终极指南[^1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值