CSS实现自适应下保持宽高比

て烟熏妆下的殇ゞ 提交于 2020-03-05 17:37:20

在项目中,我们可能经常使得自己设计的网页能自适应。特别是网站中的图片,经常要求在网页放大(或缩小)时,宽高同时放大(或缩小),而且不变形(即保持正常的长宽比)。为了不变形,常用的方法就是设置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;具体代码如下:

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>高度自适应</title>
 6 <style>
 7 *{
 8 margin: 0;
 9 padding: 0;
10 }
11 .main{
12 width: 100%;
13 background-color: pink;
14 position: relative;
15 }
16 .main:after{display:block;content: "";visibility: hidden;clear: both;}
17 .main div{
18 float: left;
19 width: 30%;
20 position: relative;
21 padding-top: 35%;
22 margin-left: 3%;
23 border:1px black solid;
24 border-radius: 10px;
25 box-sizing: border-box;
26 }
27 .main div:nth-child(1){
28 background: url(images/banner1.jpg) no-repeat;
29 background-size: cover;
30 }
31 .main div:nth-child(2){
32 background: url(images/banner2.jpg) no-repeat;
33 background-size: cover;
34 }
35 .main div:nth-child(3){
36 background: url(images/banner3.jpg) no-repeat;
37 background-size: cover;
38 }
39 .p1{
40 position: absolute;
41 height: 100%;
42 width: 100%;
43 left: 0;
44 right: 0;
45 top: 0;
46 bottom: 0;
47 background-color: red;
48 overflow: hidden;
49 
50 }
51 </style>
52 </head>
53 <body>
54 <div class="main">
55 <div><p class="p1">图中三个DIV的宽高都会随着页面的大小保持原有比例放大或缩小。其核心思想就是利用padding来拓宽盒子高度。通过padding-top来设置百分比,使其百分比与宽度的百分比为需要的比例。这里需要注意的是:padding-top中设置的百分比与width中设置的百分比都是以父元素的width为参考的</p></div>
56 <div></div>
57 <div></div>
58 </div>
59 </body>
60 </html>

 

 

为了能清楚的展示,我们把第一个div中的P元素背景色标记为红色,我们可以看到P元素的大小也能随着div的大小变化而变化。
---------------------
作者:诗渊
来源:CSDN
原文:https://blog.csdn.net/u014607184/article/details/52661760?utm_source=copy
版权声明:本文为博主原创文章,转载请附上博文链接!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!