左右固定,中间自适应布局

1.使用自身浮动法:

自身浮动法的原理就是对左右分别使用float:left和float:right,float使左右两个元素脱离文档流,中间元素正常在正常文档流中。对中间文档流使用margin指定左右外边距进行定位。
该布局法的不足是三个元素的顺序,middle一定要放在最后,middle占据文档流位置,所以一定要放在最后,左右两个元素位置没有关系。当浏览器窗口很小的时候,右边元素会被挤到下一行

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8 <style>
 9     .containter{
10         width:100%;
11         height:200px;
12     }
13     
14     .left{
15         width:300px;
16         height:100%;
17         float: left;
18         background: blue;
19     }
20 
21     .center{
22         height:100%;
23         margin-left: 300px;
24         margin-right: 300px;
25         background: red;
26     }
27     .right{
28         height:100%;
29         width:300px;
30         background: blue;
31         float: right;
32     }
33 
34 </style>
35 <!--中间部分一定要放最后-->
36 <div class="containter">
37     <div class="left"></div>
38     <div class="right"></div>
39     <div class="center"></div>
40 </div>
41 </body>
42 </html>

2.使用绝对定位法:

绝对定位法原理是将左右两边使用absolute定位,因为绝对定位使其脱离文档流,后面的middle会自然流动到他们上面,然后使用margin属性,留出左右元素的宽度,既可以使中间元素自适应屏幕宽度。
该法布局的好处,三个div顺序可以任意改变。但是因为是绝对定位,如果页面上还有其他内容,top的值需要小心处理。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6 </head>
 7 <body>
 8 <style>
 9     .containter{
10         position: relative;
11         width:100%;
12         height:500px;
13     }
14     .left{
15         position: absolute;
16         top:0;
17         left: 0;
18         width:300px;
19         height:100%;
20         float: left;
21         background: blue;
22     }
23 
24     .center{
25         height:100%;
26         margin-left: 300px;
27         margin-right: 300px;
28         background: red;
29     }
30     .right{
31         position: absolute;
32         top:0;
33         right: 0;
34         height:100%;
35         width:300px;
36         background: blue;
37         float: right;
38     }
39 
40 </style>
41 
42 <div class="containter">
43     <div class="left"></div>
44     <div class="center"></div>
45     <div class="right"></div>
46 </div>
47 </body>
48 </html>

3.使用flex布局:

设置一个父div,添加样式display:flex。中间div设置flex-grow:1,(等同代码中设置flex:1。flex是grow、shrink、basis的简写)但是盒模型默认紧紧挨着,可以使用margin控制外边距。middle一定在中间,否则需要order属性来调整。      

通过项目属性flex-grow设置middle的放大比例,将空余的空间用middle来填充,使三个项目排满一整行;默认为0,也就是对剩余空间不做处理。通过项目属性flex-basis 设置left和right的固定宽度。

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>Title</title>
 6     <style>
 7         .main{
 8             width:100%;
 9             height:500px;
10             display: flex;
11             flex-direction: row;
12             justify-content: flex-start;
13         }
14 
15         .left{
16             flex:0 1 200px;
17             height:500px;
18             background-color: red;
19         }
20 
21         .middle{
22             flex:1;
23             height:100%;
24             background-color: yellow;
25 
26         }
27 
28         .right{
29             flex:0 1 500px;
30             height:500px;
31             background-color: blue;
32         }
33     </style>
34 </head>
35 <body>
36 <div class="main">
37     <div class="left"></div>
38     <div class="middle"></div>
39     <div class="right"></div>
40 </div>
41 </body>
42 </html>

flex布局教程: 

https://www.runoob.com/w3cnote/flex-grammar.html

posted @ 2019-10-27 16:12  Haoyin-杰克  阅读(620)  评论(0编辑  收藏  举报