CSS实现自适应正方形
在处理移动端页面时,我们有时需要将banner图做成与屏幕等宽的正方形以获得最佳效果。
方案一:CSS3 vw单位
css3中新增了一组相对于可视区域百分比的长度单位 vw,vh,vmin,vmax。
vw是相对于视口宽度的百分比, 1vw=1% viewport width
vh是相对于视口高度的百分比, 1vh=1% viewport height
vmin是相对于当前视口宽高中较小的一个百分比单位
vmin是相对于当前视口宽高中较大的一个百分比单位
利用vw单位,我们可以很方便的做出自适应的正方形:
.placeholder{ width: 100%; height: 100vw; }
优点:简洁方便
缺点:浏览器兼容不好
方案二:设置垂直方向的padding撑开容器
在CSS盒模型中,一个比较容易被忽略的就是margin,padding的百分比数值计算。按照规定,margin、padding的百分比数值是相对父元素宽度进行计算的。由此可以发现只需将元素垂直方向的一个 padding
值设定为与 width
相同的百分比就可以制作出自适应正方形了:
.placeholder{ width: 100%; padding-bottom: 100%; }
这种方案简洁明了,且兼容性好;但是填充内容后会出现问题,为了解决这个问题,我们可以设置容器的高度为 0
方案三:利用伪元素的margin(padding)-top撑开容器
在方案二中,我们利用百分比数值的 padding-bottom
属性撑开容器内部空间,但是这样做会导致在元素上设置的 max-height
属性失效
.placeholder{ width: 100%; background: #0000FF; overflow: hidden; } .placeholder:after{ content: ''; display: block; margin-top: 100%; //当width=20%时,margin-top也是100%
}