CSS中优秀的响应布局Grid


网格布局(Grid)是最强大的 CSS 布局方案。
它将网页划分成一个个网格,可以任意组合不同的网格,做出各种各样的布局。n行n列,之前需要通过css框架等来完成,现在浏览器属性支持。写起来理解起来也很方便。

基本使用

设置display

.container{
    display: grid;
    grid-template-columns: 100px 100px 100px; //列
    grid-template-rows: 100px 100px ; //行
  }

在这里插入图片描述

响应单位fr

grid-template-columns 和 grid-template-rows设置的值可以是固定值,也可以是百分比。这里还有一种单位为fr,是fraction的简写。

.container{
    display: grid;
    grid-template-columns: 1fr 1fr 1fr;
    grid-template-rows: 100px 100px ;
  }

在这里插入图片描述
这里的栅格布局将容器等分为三个等份fraction,每列占据一个 fraction 单位。
如果将这个修改成:grid-template-columns: 1fr 2fr 1fr; 会将容器等分我4份,而第二列占据两份。以此类推。使用grid 三栏布局很好实现。
在这里插入图片描述

网格间距

网格的间距就是行列之间的间距。
grid-gap:10px 设置列和行之间的间距
也可以像下边一样分开设置

   grid-column-gap: 10px; //设置列之间的间距
   grid-row-gap: 1em; //设置行之间的间距

子网格

网格规范中有一个叫做 子网格 的特性。它能让我们在父级网格元素的轨道定义中就能定义一个嵌套网格。 子网格还并未在任何浏览器中实现,并且随时有可能从规范中移除。
嵌套网格将会使用父级网格元素中的轨道定义来排列它其中的网格元素。
需要指出的是嵌套网格有同时有两个单位 —— 行和列。隐式子网格的概念是没有的,这意味着你需要确保父级网格元素为了容纳所有的子网格元素需要包含足够的行与列的轨道。

.container {
   grid-column-start: 1;
   grid-column-end: 4;
   grid-row-start: 1;
   grid-row-end: 3;
   display: subgrid;
}

高级响应

上面列子并没有给出我们想要的响应性,因为网格总是三列宽。我们希望网格能根据容器的宽度改变列的数量。要做到这一点,你必须学习如下三个概念:

repeat()

repeat()函数。是一个强大的指定列和行的方法。repeat()第一个参数为行或者列的数量。第二个参数为宽度。这里的宽度可以为 具体的px值,百分比,或者fraction单位。


.container {
    display: grid;
    grid-template-columns: repeat(3, 100px);  //还可以是百分比 或者 fr 
    grid-template-rows: repeat(2, 50px);
}

这里还可以混合使用

.container{
  display: grid;
  grid-template-columns: 20px repeat(6, 1fr) 20px;  
}

这里将容器首尾设置了20px的宽度,剩余部分等分为6份并且按照响应式布局。

.container{
  display: grid;
  grid-template-columns: repeat(5, 1fr 2fr);
}

这个是重复分配一个1fr 一个2fr 重复5次,栅格一共分为十份。效果如下图。
在这里插入图片描述

auto-fit

auto-fit为自适应数量,使用到repeat函数中,可以根据屏幕大小自适应,

.container {
    display: grid;
    grid-gap: 5px;
    grid-template-columns: repeat(auto-fit, 100px);
    grid-template-rows: repeat(2, 100px);
}

在这里插入图片描述
栅格将会根据容器的宽度调整其数量。它会尝试在容器中容纳尽可能多的 100px 宽的列。但如果我们将所有列硬写为 100px,我们将永远没法获得所需的弹性,因为它们很难填充整个宽度。正如你在上图看到的,网格通常在右侧留有空白。

minmax

这里将 100px 替换为 minmax(100px, 1fr),代码如下:

.container {
    display: grid;
    grid-gap: 5px;
    grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
    grid-template-rows: repeat(2, 100px);
}

效果完美。minmax()函数定义的范围大于或等于 min, 小于或等于 max。因此,现在每列将至少为 100px。但如果有更多的可用空间,栅格布局将简单地将其均分给每列,因为这些列变成了 fraction 单位,而不是 100px。缩放空间的时候,右侧没有了留白。

添加图片

<div><img src="img/forest.jpg"/></div>

将object-fit 设置成cover,这将使图片覆盖它的整个容器,根据需要,浏览器将会对其进行裁剪。

.container > div > img {
    width: 100%;
    height: 100%;
    object-fit: cover;
}

兼容性

在这里插入图片描述
要支持低版本的浏览器的要注意啦。

参考文件
https://developer.mozilla.org/zh-CN/docs/Web/CSS/grid
https://mp.weixin.qq.com/s/i8EoPX65VJOZVVtqsadL8A

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
响应布局是一种能够根据设备屏幕大小和分辨率自动调整页面布局的技术。CSS是实现响应布局的关键工具之一。下面是一些常用的CSS技术和方法来实现响应布局: 1. 媒体查询(Media Queries):使用媒体查询可以根据不同的设备屏幕大小应用不同的CSS样式。通过在CSS定义不同的媒体查询规则,可以根据屏幕宽度、高度、设备类型等条件来应用不同的样式。 2. 弹性盒子布局(Flexbox):Flexbox是一种弹性布局模型,可以方便地创建灵活的、自适应的布局。通过设置容器和子元素的flex属性,可以实现自动调整元素的大小和位置。 3. 网格布局Grid Layout):网格布局是一种二维布局系统,可以将页面划分为行和列,并通过设置网格单元格的大小和位置来实现布局。网格布局提供了更精确的控制,适用于复杂的布局需求。 4. 相对单位(Relative Units):使用相对单位(如百分比、em、rem等)可以根据父元素或根元素的大小来设置元素的尺寸。相对单位可以使元素相对于其容器进行自适应调整。 5. 图片和媒体的响应式处理:通过设置max-width属性和width:auto,可以使图片和媒体元素根据容器大小自动调整大小,避免溢出或变形。 6. 隐藏和显示元素:通过设置display属性或使用CSS伪类(如:visible和:hidden)可以根据屏幕大小来隐藏或显示特定的元素,以适应不同的设备。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值