需求:1.父级div不设置高度

   2.图片高度自适应,并且显示为正方形;

以前遇到列表中图片高度必须和父级宽度相同,并且需要为正方形的时候,最开始的方法是定死图片高度,这样会导致不同分辨率下图片会压缩,后来傻傻的用js来控制图片的高度,直到现在才明白几句css就能搞定,并且完全符合要求。。。。。。

例子:

1.html

<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.css

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:;
}
.imgbox{
position: relative;
overflow: hidden;
padding-bottom: 100%;/*重要属性*/
outline: 1px solid green;
}
.imgbox img{
width: 100%;
position: absolute;
}

说明:装图片的盒子imgbox,设置的padding-bottom,当该值为百分比属性时,是基于父元素宽度的百分比,所以这里设置100%的时候,就相当于形成了一个正方形。

   当然,也可以设置padding-top。这时img就需要设置top:0;了。记得img要设置100%宽度哦。

   这个方式和js的先获取父级div宽度再设置图片高度相比方便太多太多了。

效果图:

上面所有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:;
left:;
}

效果:

在398px宽度的时候,高度都为222.88px,算下来比例就是16:9

在浏览器宽度发生变化时,能自适应百分百宽度,并且保证比例不会变化

注:也可以设置图片高度为100%,我上面未设是因为原图比例不是16:9,设置100%高度会被压缩

css实现div中图片高度自适应并与父级div宽度一致的更多相关文章

  1. div中宽高度自适应文字换行居中问题解决

    <html> <head> <meta charset="UTF-8"/> <title>div中宽高度自适应文字换行居中demo& ...

  2. div中iframe高度自适应问题

    网页分为上.中.下三部分,上.下高度固定中间高度自适应:中间分为左.右两部分,左边宽度固定,右边宽度自适应.现在右侧div是宽度和高度都是自适应,右侧div里有个IFrame,想让IFrame自适应外 ...

  3. div+css:div中图片垂直居中

    div中图片垂直居中 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> &l ...

  4. 如何让div中的span垂直居中 ----height:100%设置div的高度

    如果div中只有一个span一个元素,可以使用line-height.如果div中还有其他元素,可以设置span的css如下: .span{ position: absolute; top: 50%; ...

  5. winform中dataGridView高度自适应填充完数据的高度

    // winform中dataGridView高度自适应填充完数据的高度,就是dataGridView自身不产生滚动条,自己的高度是根据数据的多少而变动. 在load的时候,数据绑定后,加上如下代码: ...

  6. 典型的DIV CSS三行二列居中高度自适应布局

    如何使整个页面内容居中,如何使高度适应内容自动伸缩.这是学习CSS布局最常见的问题.下面就给出一个实际的例子,并详细解释.(本文的经验和是蓝色理想论坛xpoint.guoshuang共同讨论得出的.) ...

  7. 移动web图片高度自适应的解决方案

    由于图片的加载是在dom加载完成之后进行的,于是,在手机端浏览网页时,经常会看到页面刚打开时很多内容叠在一起,当图片加载完成后,页面会由于图片加载完成出现明显的抖动 针对这个问题,有以下几种解决方案 ...

  8. div 中图片溢出问题及 CSS3中图片翻转问题

    如果设置一个div 装两张以上的图片,如果不设置好div的宽度和高度,就会使图片溢出. 我们知道,div是可以由图片撑开其宽高的,也就是说如果只放一张图片的情况下,不设置div的宽高,div的宽高会默 ...

  9. css和javascript中图片路径的不同

    之前在写前端代码时,在图片路径的设置那里经常会遇到一个问题.比方说,我 (1)在根目录下面新建了个"images"文夹,里面放了张图片top.gif (2)在根目录下另外新建了两个 ...

随机推荐

  1. Springdata mongodb 版本兼容 引起 Error [The 'cursor' option is required, except for aggregate with the explain argument

    在Spring data mongodb 中使用聚合抛出异常 mongodb版本 为 3.6 org.springframework.dao.InvalidDataAccessApiUsageExce ...

  2. Dockerfile 编译安装mysql5.7 千万不要执行.只是记录一下编译安装罢了

    开启所有核心make  20G 内存都不够玩,跑3-4个核心吧,还好. 最后的出来的镜像3G多,百思不得其解,看了官方的Dockerfile,也没什么特别,就是 apt 或者 yum.好吧,不知做了什 ...

  3. 关于.Net的知识和相关书籍

    a. DBCC DROPCLEANBUFFERS 清空缓存信息b. DBCC FREEPROCCACHE 从过程缓存中删除所有元素2. 引用两个和尚打水的故事,说明平时要注重积累,只有量变达到了才会形 ...

  4. Hbase多列范围查找(效率)

    Hbase索引表的结构 Hbase Rowkey 设计 Hbase Filter Hbase二级索引 Hbase索引表的结构 在HBase中,表格的Rowkey按照字典排序,Region按照RowKe ...

  5. (2018干货系列三)最新PHP学习路线整合

    怎么学PHP PHP是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,利于学习,使用广泛,主要适用于Web开发领域. 菜鸟到大神,一步到位,正式开启干货模式: PHP初级开发工程师 ...

  6. 【Unity3D】Unity3D 让角色的头部望向鼠标

    转载请注明出处:http://www.cnblogs.com/shamoyuu/p/MouseAim.html 原理很简单,因为骨骼也是一个物体,也拥有transform那一套东西,所以可以简单地用L ...

  7. Unable to find the ncurses libraries的解决办法

    我们在更新CentOS或者Ubuntu的内核时,执行make menuconfig可能看如这样的错误: *** Unable to find the ncurses libraries or the* ...

  8. 多线程实现之Java

    关于Java线程的生命周期,请看下面这张图: 新建状态(New):当线程对象创建后,即进入了新建状态,如:Thread t = new MyThread(); 就绪状态(Runnable):当调用线程 ...

  9. echarts中的option.legend.data has not been defined.

    1.错误描述 2.错误原因 var map = function(mapData){ require( [ 'echarts', 'echarts/chart/map' ], function (ec ...

  10. day8(字符串操作)

    一.字符串操作 1.index  #返回字符串的索引值 s = "Hello word" print(s.index('o')) 2.isalnum #检测字符串是否由字母和数字组 ...