纯css实现自适应正方形

在处理移动端页面时,我们有时会需要将banner图做成与屏幕等宽的正方形以获得最佳的体验效果,如Flipbord的移动页面:

这里写图片描述

方案一:CSS3 中新增了一组相对于可视区域百分比的长度单位 vw, vh, vmin, vmax。其中 vw 是相对于视口宽度百分比的单位,1vw = 1% viewport width, vh 是相对于视口高度百分比的单位,1vh = 1% viewport height;vmin 是相对当前视口宽高中较小 的一个的百分比单位,同理 vmax 是相对当前视口宽高中 较大 的一个的百分比单位。

利用 vw 单位,我们可以很方便做出自适应的正方形:

.placehodler{
    width:50%;
    height: 50vw;
    background-color: pink;
}

<div class="placehodler"></div>

优点:简洁方便

缺点:浏览器兼容不好

方案二:设置垂直方向的padding撑开容器

在 CSS 盒模型中,一个比较容易被忽略的就是 margin, padding 的百分比数值计算。按照规定,margin, padding 的百分比数值是相对父元素的宽度计算的(面试官说这是他想考察的点)。由此可以发现只需将元素垂直方向的一个 padding 值设定为与 width 相同的百分比就可以制作出自适应正方形了:

.placeholder {
  width: 50%;
  padding-bottom: 50%;
}

这时一切看起来都很正常,我们试着给容器内增加内容:

这里写图片描述

咦?高度怎么溢出了?我们来看这时的盒模型:

这里写图片描述

如图中所示,内容区域占据了 38px 的高度。为了解决这个问题,我们可以设置容器的高度为 0:

.placeholder {
  width: 50%;
  height:0;
  padding-bottom: 50%;
}

这种方案简洁明了,且兼容性好。

原文链接:http://www.cocoachina.com/webapp/20150807/12940.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值