需求:1.父级div不设置高度css
2.图片高度自适应,而且显示为正方形;html
之前遇到列表中图片高度必须和父级宽度相同,而且须要为正方形的时候,最开始的方法是定死图片高度,这样会致使不一样分辨率下图片会压缩,后来傻傻的用js来控制图片的高度,直到如今才明白几句css就能搞定,而且彻底符合要求。。。。。。浏览器
例子:布局
1.htmlspa
<ul> <li class="bli"> <div class="imgbox"> <img src="upimg/comm.png"/> </div> <p>喵喵喵喵喵喵111</p> </li> <li class="bli"> <div class="imgbox"> <img src="upimg/comm1.png"/> </div> <p>喵喵喵喵喵喵222</p> </li> <li class="bli"> <div class="imgbox"> <img src="upimg/comm2.png"/> </div> <p>喵喵喵喵喵喵333</p> </li> </ul>
2.csscode
ul{ overflow: hidden; } .bli{ float: left; width: 49%; margin:0 2% 2% 0; background: white; outline: 1px solid red; } .bli:nth-child(even){ margin-right: 0; } .imgbox{ position: relative; overflow: hidden; padding-bottom: 100%;/*重要属性*/ outline: 1px solid green; } .imgbox img{ width: 100%; position: absolute; }
说明:装图片的盒子imgbox,设置的padding-bottom,当该值为百分比属性时,是基于父元素宽度的百分比,因此这里设置100%的时候,就至关于造成了一个正方形。htm
固然,也能够设置padding-top。这时img就须要设置top:0;了。记得img要设置100%宽度哦。blog
这个方式和js的先获取父级div宽度再设置图片高度相比方便太多太多了。图片
效果图:it
上面全部li的高度都未定死,可是都是同样的高度,图片很长或者很宽,都不影响布局,主要是overflow:hidden隐藏了。这样设置以后,页面无论怎么变化,图片高度也会动态随之变化。
扩展:若是想实现,宽高必定比例好比16:9,宽度自适应100%的div呢?
再啰嗦一句:padding当为百分比属性时,是基于父元素宽度的百分比的。
那么:我设置宽度为100%的时候,按比例算,高度大体就是(100% * 9)/16 ,这样算的话,padding-bottom的值就是56%
1.html
<div class="box"> <img src="upimg/comm.png"/> </div> <div class="box"> <img src="upimg/comm1.png"/> </div> <div class="box"> <img src="upimg/comm2.png"/> </div>
以上是3张图片,每一个图片的大小分别是:216X216,330X180,180X330
2.CSS
.box{ width: 100%; margin: 20px auto; background: skyblue; position: relative; padding-bottom: 56%; //这是重要属性 overflow: hidden; } .box>img{ width: 100%; position: absolute; top: 0; left: 0; }
效果:
在398px宽度的时候,高度都为222.88px,算下来比例就是16:9
在浏览器宽度发生变化时,能自适应百分百宽度,而且保证比例不会变化
注:也能够设置图片高度为100%,我上面未设是由于原图比例不是16:9,设置100%高度会被压缩