前言

 在日常的移动开发中很多时候我们需要一个物体的呈现正方形,这个时候大家能想到的就是直接将宽高设置一样不就好了,但有的时候我们需要的是在不设置高度的情况下如何让高度跟随宽度一样?

演示

1.我们先来看看直接固定死宽高的效果,默认我用的是iphone6的尺寸


看见了吗?我们现在知道在iphone6尺寸下分为三列,每列的宽度为125px固然我们这个时候大可将高度也设置为125px来达到正方形的效果
那么问题来了,在iphone6下我们看到的是正方形,但宽度是会变化的,这个时候如果我们换成iphone5下来看会是怎么样,答案很明显,在iphone5的尺寸下没列的宽度变成了106.67px,这个时候我们的高度还是125px,那肯定就已经变形了。

2.这个时候我们用下今天的黑科技,默认还是先用iphone6的尺寸


发现没有,我们并没有刻意的去设置死物体的高度的,而是将它设置为了0,为什么它也能显示出来呢
关键在这里
1
2
3
4
5
6
7
.css{
position:relative;
width:100%;
height:0;
padding-top:100%; /* 这个时候的100%会基于宽度100%进行计算 */
background: maroon;
}

然后我们再来切换到其他尺寸的屏幕下看看效果



最终代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
li {
list-style: none;
}
img{
display: block;
}
.flex-container{
display: flex;
}
.flex {
flex: 1;
display: block;
min-width: 0;
}
.css{
position:relative;
width:100%;
height:0;
padding-top:100%; /* 这个时候的100%会基于宽度100%进行计算 */
background: maroon;
}
</style>
</head>
<body>
<ul class="flex-container">
<li class="flex">
<div class="css" style="background: pink;"></div>
</li>
<li class="flex">
<div class="css" style="background: green;"></div>
</li>
<li class="flex">
<div class="css" style="background: orange;"></div>
</li>
</ul>
</body>
</html>