加载中...

响应式Grid布局-按比例响应

响应式Grid布局-按比例响应

响应式Grid布局-按比例响应

响应式Grid布局

Grid布局目前来说应该算是最热门的布局方式了。比Flex布局更加灵活,对于响应式布局设计来说,也是非常方便。甚至一行代码就可以实现响应布局。

以下代码就现一个自动填充的响应布局。

(代码来源网络、这里借助演示一下)

css
复制代码
.wrapper { margin: 50px; display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); grid-gap: 10px 20px; grid-auto-rows: 50px; }

效果如下:

New Image

元素按比例响应

通过上面的例子,可以很好的做一个响应式的效果。

在某些业务场景,或者某种情况下,需要做到子元素的宽,高按照比例进行响应。

通过上面的代码,其实我们可以发现,代码只进行网站的列宽度响应 grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));,通过设置列宽为一个范围进行响应。

对于高度来说,还是固定的grid-auto-rows: 50px;

所以我们得围绕怎么设置高度来思考。

元素纵横比

最直接的解决方案、就是给元素设置元素纵横比aspect-ratio

MDN解释:

aspect-ratio CSS 属性为 box 容器规定了一个期待的纵横比,这个纵横比可以用来计算自动尺寸以及为其他布局函数服务。

这个属性比较简单、直接给元素设置比例就行

css
复制代码
.wrapper { margin: 50px; display: grid; grid-template-columns: repeat(auto-fit, minmax(200px, 1fr)); grid-gap: 10px 20px; //grid-auto-rows: 50px; //首先删除这行 } .item { text-align: center; font-size: 200%; color: #fff; aspect-ratio:1/1; //子元素添加这行代码 }

效果如下:

New Image

兼容性

看上去很完美,但是这个属性兼容不行,某些版本的浏览器可能不支持!这里采用特殊的方案来实现元素纵横比。

那就利用padding属性,padding属性的值如果是百分比,那么它相对的是父元素的

padding属性

New Image

利用这一特性、我们可以实现这个比例。

核心代码:

css
复制代码
.item::before { content: " "; /* 设为块元素,宽度撑满 */ display: block; /* padding百分比是取的父元素的宽度 */ padding-bottom: 100%; /* 宽度是父元素的宽度,高度是父元素的宽度,这样就是一个1比1的正方形了 */ } .content{ position:absolute; left:0; right:0; bottom:0; top:0; }

如果想换成16/9,就把padding-bottom:56.25%;(6除以19)

点这里查看demo

总结

  • Grid响应式布局属性:minmax,auto-fit
  • 元素纵横比:aspect-ratio
  • padding的百分比值是相对父元素的宽度