背景:
最近因为需要用到绘制类似九宫格的需求,所以研究了一下响应式矩形的实现方案。
有如下几种方案:
- 使用js来设置元素的高度
- 使用vw单位 div {width: 50vw; height: 50vw;}
- 使用伪元素设置padding的方式来实现正方形(也就是本次使用的方式)
实现一个正方形
1 .square 2 position: relative 3 100% 4 5 &::before 6 content: '' 7 display: block 8 padding-top: 100%
1 <div class="square"></div>
我们的做法就是使用伪元素的 padding-top: 100% 来撑开元素本身。
因为 pading-top 与 padding-bottom 的百分比取值来自于元素的宽度,所以,设置值为100%
就实现了我们想要的功能。
实现更多的功能
想要实现更多比例的形状,其实就是修改 ::before 中的 pading-top 或者 padding-bottom 的值即可。
1 // 16: 9 2 .square::before 3 padding-top: (9 / 16 * 100%) 4 5 // 4: 3 6 .square::before 7 padding-top: (3 / 4 * 100%) 8 9 // 1: 2 10 .square::before 11 padding-top: 200%
当然,上边的实现都只是一个简单的矩形,如果你的矩形里边还要有一些内容的话,需要给元素添加以下几个属性:
1 .content 2 position: absolute 3 top: 0 4 right: 0 5 bottom: 0 6 left: 0
1 <div class="square"> 2 <div class="content"> 3 Awesome 4 </div> 5 </div>
要注意的有以下几点:
- IE7-不支持
- 元素不要设置 height 以及 overflow: hidden