在项目中,我们可能经常使得自己设计的网页能自适应。特别是网站中的图片,经常要求在网页放大(或缩小)时,宽高同时放大(或缩小),而且不变形(即保持正常的长宽比)。为了不变形,常用的方法就是设置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的大小变化而变化。
---------------------
作者:诗渊
来源:CSDN
原文:https://blog.csdn.net/u014607184/article/details/52661760?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

CSS实现自适应下保持宽高比的更多相关文章

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

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

  2. 巧用padding让图片宽高比固定并自适应布局

    1.从上图知道原始图片大小是 800 * 250,即宽高比为 3.2: 2.html 及 css 代码如下, 可以知道就只是在一个div里面放了一张图片,那么如何让这张图片的宽高比固定呢,看了css之 ...

  3. css媒体查询aspect-ratio宽高比在less中的使用

    css媒体查询有一个 宽高比很方便,aspect-ratio ,可以直接使用宽/高 来进行页面适配   使用样例如下: // 宽高比在((320/50)+(728/90))/2 两个尺寸中间值以内 适 ...

  4. 使用css让动态容器按固定宽高比显示

    需求:页面上有一个div的宽度是随着屏幕宽度的改变而改变的,但其宽高比始终是2:1,也就是当宽度是1000px时,高度为500px 分析:无论浏览器窗口如何改变,始终要让目标元素的宽高比保持2:1,我 ...

  5. CSS流体(自适应)布局下宽度分离原则

    CSS流体(自适应)布局下宽度分离原则 这篇文章发布于 2011年02月28日,星期一,00:48,归类于 css相关. 阅读 73990 次, 今日 5 次 by zhangxinxu from h ...

  6. CSS 图片自适应容器

    https://www.jb51.net/css/660677.html 经常有这样一个场景,需要让图片自适应容器的大小. 1.img标签的方式 我们马上就能想到,把width.height 设置为1 ...

  7. CSS+DIV自适应布局

    CSS+DIV自适应布局 1.两列布局(左右两侧,左侧固定宽度200px;右侧自适应占满) 代码如下: <!doctype html> <html> <head> ...

  8. 常见css垂直自适应布局(css解决方法)

    css3的盒模型, css3中添加弹性盒模型,最新弹性盒模型是flex,之前为box <!DOCTYPE html> <html > <head> <titl ...

  9. 加载的过程中图片变形了? --教你自定义自动适配图片宽高比的RatioLayout

    很多同行在开发中可能会遇到这样的问题,就是在加载图片的时候会出现图片变形的问题.其实这很可能就是你的图片宽高比和图片所在容器的宽高比不匹配造成的.比如说图片的宽为200,高为100.宽高比就是2,那么 ...

随机推荐

  1. 原生ajax接收json字符串(简单介绍)

    什么是json? JSON的全称是 Javascript Object Notation(javascript对象表示法),是基于javascript对象字面量,如果单从眼睛看,JSON里的数据是被保 ...

  2. 统计决策——贝叶斯决策理论(Bayesian Decision Theory)

    (本文为原创学习笔记,主要参考<模式识别(第三版)>(张学工著,清华大学出版社出版)) 1.概念 将分类看做决策,进行贝叶斯决策时考虑各类的先验概率和类条件概率,也即后验概率.考虑先验概率 ...

  3. cornerstone提交报错"but is missing"以及xocde提示"missing from working copy"

    问题描述 xocde提示"missing from working copy" 虽然这种警告不会影响程序到运行,但是数量很多,而且在svn提交的时候回出现这种问题 使用的svn工具 ...

  4. Struts2知识点小结(四)--拦截器与注解开发

    一.Struts2的拦截器(interceptor) 作用:当请求进入struts2框架后(进入之前可以用filter进行拦截),想对请求进行拦截操作(功能增强.权限控制),需要拦截器组件 1.str ...

  5. 【模板】string中substr函数的运用

    substr有两种用法: 假设:string s = "0123456789" ;  //下标从0开始 ① string a = s.substr(5)               ...

  6. 【TOJ 4309】表达式求值(模拟栈)

    Description Dr.Kong设计的机器人卡多掌握了加减法运算以后,最近又学会了一些简单的函数求值,比如,它知道函数min(20,23)的值是20 ,add(10,98) 的值是108等等.经 ...

  7. 小程序登录 -41003: aes 小程序加密数据解密失败问题

    在微信小程的开发中,登录问题,一定要按照这样的顺序 1. 小程序请求login,拿到code 然后传给服务端:  2.服务端拿到code 到微信服务器拿到sessionKey :3.然后小程序调用ge ...

  8. cnpm 下载

    1, 如果电脑已经有node的话,可以先卸载,然后再去node官网下载最新node, 2,先全局安装cnpm, npm install -g cnpm --registry=https://regis ...

  9. Redis面试问题

    下面列出的这些其中有一些是我面试时遇到的,但是当时自己还不会,所以在网站上找了以下,然后整理出来,加强记忆 感谢码洞将这些问题整理出来: Redis有哪些数据结构? 字符串String.字典Hash. ...

  10. c# WebBrowser开发参考资料--杂七杂八

    c# WebBrowser开发参考资料 http://hi.baidu.com/motiansen/blog/item/9e99a518233ca3b24aedbca9.html=========== ...