在项目中,我们可能经常使得自己设计的网页能自适应。特别是网站中的图片,经常要求在网页放大(或缩小)时,宽高同时放大(或缩小),而且不变形(即保持正常的长宽比)。为了不变形,常用的方法就是设置width值,然后高度height设置auto。如果是div,我们该如何处理呢。

背景图片宽高比固定

下面,我仿照了移动端的聚划算网站中(https://ju.m.taobao.com/)中间一部分的布局。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>高度自适应</title><style>*{margin: 0;padding: 0;}div{width: 100%;background-color: pink;position: relative;}div:after{display:block;content: "";visibility: hidden;clear: both;}div p{float: left;width: 30%;padding-top: 35%;margin-left: 3%;border:1px black solid;border-radius: 10px;box-sizing: border-box;}div p:nth-child(1){background: url(images/banner1.jpg) no-repeat;background-size: cover;}div p:nth-child(2){background: url(images/banner2.jpg) no-repeat;background-size: cover;}div p:nth-child(3){background: url(images/banner3.jpg) no-repeat;background-size: cover;}</style>
</head>
<body><div><p></p><p></p><p></p></div>
</body>
</html>

效果如下:

图中三个DIV的宽高都会随着页面的大小保持原有比例放大或缩小。其核心思想就是利用padding来拓宽盒子高度。通过padding-top来设置百分比,使其百分比与宽度的百分比为需要的比例。这里需要注意的是:padding-top中设置的百分比与width中设置的百分比都是以父元素的width为参考的。

div宽高比固定

由于背景图片能覆盖包括padding在内的空间,但是如果需要在子元素中放置其他内容,会扩大子元素的高度,这时应该如何处理呢。为了让其不占用文档流空间,可设置其position:absolute;具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>高度自适应</title><style>*{margin: 0;padding: 0;}.main{width: 100%;background-color: pink;position: relative;}.main:after{display:block;content: "";visibility: hidden;clear: both;}.main div{float: left;width: 30%;position: relative;padding-top: 35%;margin-left: 3%;border:1px black solid;border-radius: 10px;box-sizing: border-box;}.main div:nth-child(1){background: url(images/banner1.jpg) no-repeat;background-size: cover;}.main div:nth-child(2){background: url(images/banner2.jpg) no-repeat;background-size: cover;}.main div:nth-child(3){background: url(images/banner3.jpg) no-repeat;background-size: cover;}.p1{position: absolute;height: 100%;width: 100%;left: 0;right: 0;top: 0;bottom: 0;background-color: red;overflow: hidden;}</style>
</head>
<body><div class="main"><div><p class="p1">图中三个DIV的宽高都会随着页面的大小保持原有比例放大或缩小。其核心思想就是利用padding来拓宽盒子高度。通过padding-top来设置百分比,使其百分比与宽度的百分比为需要的比例。这里需要注意的是:padding-top中设置的百分比与width中设置的百分比都是以父元素的width为参考的</p></div><div></div><div></div></div>
</body>
</html>

效果如下:

为了能清楚的展示,我们把第一个div中的P元素背景色标记为红色,我们可以看到P元素的大小也能随着div的大小变化而变化。

jquery实现宽高比固定

上面两个方法都是纯css方法实现的,如果借用JS(或jquery)来实现的话,可以随意设置div的宽高,下面介绍一下利用jquery来实现。首先我们设置div的宽度为百分比,然后通过jquery来设置高度值。当然,为了能使得div的高度能随着页面的大小变化而变化,还需要绑定一个resize事件。完整代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>高度自适应3</title><style>*{margin: 0;padding: 0;}.main{width: 100%;background-color: pink;position: relative;}.main:after{display:block;content: "";visibility: hidden;clear: both;}.main div:nth-child(1){float: left;width: 30%;position: relative;margin-left: 3%;border:1px black solid;border-radius: 10px;box-sizing: border-box;background: url(images/banner1.jpg) no-repeat;background-size: cover;}.main div:nth-child(2){float: left;width: 30%;position: relative;padding-top: 35%;margin-left: 3%;border:1px black solid;border-radius: 10px;box-sizing: border-box;background: url(images/banner2.jpg) no-repeat;background-size: cover;}.main div:nth-child(3){float: left;width: 30%;position: relative;padding-top: 35%;margin-left: 3%;border:1px black solid;border-radius: 10px;box-sizing: border-box;background: url(images/banner3.jpg) no-repeat;background-size: cover;}</style><script type="text/javascript" src="http://libs.baidu.com/jquery/1.10.2/jquery.min.js"></script><script type="text/javascript">$(function(){// 封装函数function setRatio(obj, ratio){var that = obj;var h = that.outerWidth()*(1/ratio);var borderWid = parseInt(that.css("border-top-width"))+parseInt(that.css("border-bottom-width")); // 考虑边框的宽度that.css("height",h+borderWid);}var obj = $('.main div').eq(0);var ratio = 6/7;setRatio(obj,ratio);$(window).resize(function(){setRatio(obj,ratio);});});</script>
</head>
<body><div class="main"><div><p class="p1">图中三个DIV的宽高都会随着页面的大小保持原有比例放大或缩小。其核心思想就是利用padding来拓宽盒子高度。通过padding-top来设置百分比,使其百分比与宽度的百分比为需要的比例。这里需要注意的是:padding-top中设置的百分比与width中设置的百分比都是以父元素的width为参考的</p></div><div></div><div></div></div>
</body>
</html>

上述代码中,为了达到一开始的比例效果(一开始的效果是width:padding-top=30%:35%),我们加上了边框的宽度。主要思想就是先获取元素的宽度,然后再根据宽高比例计算并设置高度值,为了能随着页面变化,在resize事件中调用设置函数。元素的就能保证宽高比不变,并能随着页面变化自适应变化。

CSS实现自适应下保持宽高比相关推荐

  1. css 大图保持宽高比压缩,CSS实现自适应下保持宽高比

    在项目中,我们可能经常使得自己设计的网页能自适应.特别是网站中的图片,经常要求在网页放大(或缩小)时,宽高同时放大(或缩小),而且不变形(即保持正常的长宽比).为了不变形,常用的方法就是设置width ...

  2. 移动端 css实现自适应正圆 ( 宽高随着手机屏幕宽度自适应 )

    序言:应朋友要求随手写了一下移动端 css实现自适应正圆 ( 宽高随着手机屏幕宽度自适应 ) ,以备后用 LESS代码: .adaptive-circle {margin: 50px auto 0;w ...

  3. css+svg实现的定宽高比

    最近看到一篇关于css实现固定宽高比的思路, 最近也接触了一下svg的viewBox的属性, 想到了这是很好的撑开物. 原来相同, 只是撑开的方式不同, 使用svg而不是padding svg的vie ...

  4. html背景图片div设置宽自动,CSS背景图片固定宽高比自适应调整的实现方法

    标签可以使图片在保持宽高比不变的情况下自动调整.我们讨论的是div的背景图片实现固定宽高比自适应调整的方法.这里的图片不是< img>标签一样通过src引入,而是通过css的backgro ...

  5. html图片固定高宽比显示,科技常识:CSS背景图片固定宽高比自适应调整的实现方法...

    今天小编跟大家讲解下有关CSS背景图片固定宽高比自适应调整的实现方法 ,相信小伙伴们对这个话题应该有所关注吧,小编也收集到了有关CSS背景图片固定宽高比自适应调整的实现方法 的相关资料,希望小伙伴们看 ...

  6. 关于div容器高度随着浏览器宽度按照宽高比自适应的问题(css解决方案)

    div容器html代码: <div class="swiper"></div> div容器样式代码(此处的31.25%为div容器内容的宽高比,比如div内 ...

  7. min-aspect-ratio和max-aspect-ratio宽高比自适应布局

    首先,移动端的适配,还是要先做好的,不管你是使用rem布局,还是使用media进行适配布局(只是单纯的宽度上),布局好了,这里只是宽度自适应了,如果是流式布局的话,这样就已经足够了,对于我们这里的单屏 ...

  8. css 图片自适应_104道 CSS 面试题,助你查漏补缺(下)

    (给前端大全加星标,提升前端技能) 作者:CavsZhouyou https://github.com/CavsZhouyou/Front-End-Interview-Notebook/blob/ma ...

  9. css 大图保持宽高比压缩,css 保持宽高比缩放

    参考 需求简介: 在大的div中放九个小div, 小div需要保持4:3的宽高比, 小div中会有图片, 图片按照4:3拉伸 下图效果是div1:1 , 图片宽度100%, 高度自适应 思路 1, 使 ...

  10. CSS实现固定宽高比响应式布局(附实例分析)

    更多文章可关注我的个人博客:https://seven777777.github.io/myblog/ 在日常开发过程中,有一些前端业务场景可能需要让元素在尺寸变化的同时,保证宽高比不变,所以在此记录 ...

最新文章

  1. NumPy学习笔记 一
  2. kafka集群安全化之启用kerberos与acl
  3. NuttX 启动流程
  4. java foreach跳出本次循环_Java中提供三种常用的循环语句
  5. Java中12个原子操作类
  6. 我们应学的11项技术[转载]
  7. jQuery (二)
  8. 输入3个双精度实数,分别求出它们的和,平均值,平方和以及平方和的开方
  9. Android学习笔记---08_短信发送器的制作
  10. shell 模拟多进程(3)
  11. c语言 万年历问题,【数组函数面试题】面试问题:万年历的C语言… - 看准网
  12. Redis 性能优化思路,写的非常好!
  13. 苹果系统安装python环境_Mac下安装Python虚拟环境Virtualenv
  14. VS2017 CUDA编程学习1:CUDA编程两变量加法运算
  15. webservice的wsdl文件怎么生成
  16. jQuery表格新增行
  17. Jpeg图片旋转和Exif方向
  18. 关于《那些年啊,那些事——一个程序员的奋斗史》的更新
  19. Linux远程管理常用命令(超全超详细)【持续更新】
  20. GDP、经济与社会数据下载网站整理

热门文章

  1. 如何巧妙的申请换部门_职场:如何跟领导提调换工作岗位?这几点你要考虑清楚!...
  2. 再说setlocale——关于区域名称
  3. 微信公众号API接口调用
  4. 商业数据分析师的发展前景
  5. win10系统迁移到固态硬盘ssd
  6. 使用大麦网抢票工具的一些心得体会
  7. python ocr文字识别竖排繁体_古籍族谱繁体竖排中文识别图文攻略-千百OCR
  8. 在Win10与Ubuntu双系统中删除Ubuntu
  9. C语言——逻辑运算符
  10. word 2016插入空白页页眉的办法