纯css实现长宽等比例的div

现代网站页面基本都需要响应式,一个div的长宽往往我们都设置为百分之多少,这个百分之是相对于父容器动态计算的

这样在浏览器宽度变化之后,我们的元素也能自动更新长宽。例如:我们在页面上摆了一个div,这个宽度设置为20%,

同时又要求div始终保持4:3的长宽比来显示,因为这样看上去可能美观一点。很显然,不能因为宽度是20%了,把高度

设置为15%,这是肯定错误的。通常想到的方法就是用js动态计算,但是在浏览器窗口动态变化的时候,必须在resize的时候

再次更新这个div的高度,这样比较麻烦。

下面用例是用纯CSS控制这个div的长宽比,不论浏览器怎么变化,div实时也会变化,并保持比例不变

 1 <!DOCTYPE html>
 2 <html>
 3 <body>
 4 <div class="contain">
 5     <div class="item">
 6         <div class="verticalCenter horizaCenter box">1</div>
 7     </div>
 8     <div class="item">
 9         <div class="verticalCenter horizaCenter box">2</div>
10     </div>
11     <div class="item">
12         <div class="verticalCenter horizaCenter box">3</div>
13     </div>
14     <div class="item">
15         <div class="verticalCenter horizaCenter box">4</div>
16     </div>
17     <div class="item">
18         <div class="verticalCenter horizaCenter box">5</div>
19     </div>
20     <div class="item">
21         <div class="verticalCenter horizaCenter box">6</div>
22     </div>
23     <div class="item">
24         <div class="verticalCenter horizaCenter box">7</div>
25     </div>
26     <div class="item">
27         <div class="verticalCenter horizaCenter box">8</div>
28     </div>
29     <div class="item">
30         <div class="verticalCenter horizaCenter box">9</div>
31     </div>
32     <div class="item">
33         <div class="verticalCenter horizaCenter box">10</div>
34     </div>
35     <div class="item">
36         <div class="verticalCenter horizaCenter box">11</div>
37     </div>
38 </div>
39 </body>
40 </html>
41 <style>
42     html, body {
43         margin: 0;
44         padding: 0;
45         width: 100%;
46         height: 100%;
47     }
48     .contain {
49         width: 50vw;/*屏幕宽度的一半*/
50         height: 70vw;/*屏幕宽度的70%*/
51         background: red;
52     }
53     .item {
54         float: left;
55         position: relative;
56         background-color: darkslategrey;
57         margin: 10px;
58         /*这里显示的就是20:15=4:3,以后div就会保持这个比例*/
59         width: 20%;
60         padding-bottom: 15%;
61     }
62     /*垂直居中*/
63     .verticalCenter{
64         display: flex;
65         align-items:center;
66         height: 100%;
67     }
68     /*水平居中*/
69     .horizaCenter{
70         display: flex;
71         justify-content:center;
72         text-align: center;
73         width: 100%;
74     }
75     .item .box{
76         font-size: 1.5rem; width: 100%;height: 100%;background: blue;position: absolute;left: 0;top: 0;border: 1px solid yellow
77     }
78 </style>
View Code

 

代码中的vw是viewport的宽度,vh就是高度,这个始终是拿viewport计算的

看下面的效果图(1244X774):

缩小浏览器宽高之后(653X774):

这里主要利用了padding-bottom,这个熟悉的百分比是按照宽度来算的,相当于这个div的高度是0,通过padding-bottom,把div

撑开到我们想要的高度,然后里面再套一个div绝对定位,在套的div里面就可以填任何内容了。

 

转载于:https://www.cnblogs.com/JimmyBright/p/6511052.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值