div等比例缩放-------纯CSS实现自适应浏览器宽度的正方形

转载自:http://blog.csdn.net/zhouziyu2011/article/details/70159209

1方案一:CSS3 vw 单位

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

[css]  view plain  copy
  1. #square{  
  2.     width:30%;  
  3.     height:30vw;  
  4.     background:red;  
  5. }  

类比:纯CSS实现自适应浏览器高度的正方形只需要设置width的单位为vh即可。

优点:简洁方便。

缺点:浏览器兼容不好。

 

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

由于margin, padding 的百分比数值是相对父元素的宽度计算的,只需将元素垂直方向的一个padding值设定为与width相同的百分比就可以制作出自适应正方形了。

但要注意,仅仅设置padding-bottom是不够的,若向容器添加内容,内容会占据一定高度,为了解决这个问题,需要设置height: 0。

[css]  view plain  copy
  1. #square{  
  2.     width:30%;  
  3.     height:0;  
  4.     padding-bottom30%;  
  5.     background:red;  
  6. }  

优点:简洁明了,且兼容性好。

缺点:会导致在元素上设置的max-width属性失效(max-height不收缩)。

 

3、利用伪元素的 margin(padding)-top 撑开容器

max-width属性失效的原因是:max-width属性只限制于width,也就是只会对元素的 content width起作用。

解决方法是:用一个子元素撑开content部分的高度,从而使max-height属性生效。

首先需要设置伪元素,其内容为空,margin-top设置为100%。

但要注意,若使用垂直方向上的margin撑开父元素,仅仅设置伪元素是不够的,这涉及到margin collapse外边距合并的概念,由于容器与伪元素在垂直方向发生了外边距合并,所以撑开父元素高度并没有出现,解决方法是在父元素上触发BFC:设置overflow:hidden。

[css]  view plain  copy
  1. #square{    
  2.     width:30%;    
  3.     background:red;  
  4.     overflow:hidden;    
  5.     max-width:200px;  
  6. }    
  7. #square:after{    
  8.     content'';    
  9.     displayblock;    
  10.     margin-top:100%;    
  11. }    

若使用垂直方向上的padding撑开父元素,则不需要触发BFC。子元素的100%就相当于父元素的30%[css] view plain copy

  1. #square{  
  2.     width:30%;  
  3.     background:red;  
  4.     max-width:200px;  
  5. }  
  6. #square:after{  
  7.     content'';  
  8.     displayblock;  
  9.     padding-top:100%;  
  10. }  
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值