聖杯布局、雙飛翼布局與flex布局實現


聖杯布局與雙飛翼布局的前半部分是相同的:

1)middle、left、right三欄全部浮動(float:left);

2)middle中間欄放在文檔流前優先渲染(因為浮動元素會把塊級元素的位置空出來);

3)footer元素中要用clear:both;清除浮動;

4)middle中間欄的寬度設為100%;left的margin-left應為-100%;right的margin-left應為-right元素的寬;

此時中間部分(middle)的內容會被左右遮擋,解決這個問題,聖杯布局與雙飛翼布局的方法是不同的:

聖杯布局:

1)將left、middle、right放置在一個div中(class='bd');

2)將div的padding-left設為left元素的寬,padding-right設為right元素的寬;

2)此時left、right的位置也會發生改變,需要將其設為相對位置(position:relative),通過設置left或right屬性移動元素;

雙飛翼布局:

1)將middle中的內容放置在一個div(class='mi_ct')中;

2)將這個div的margin-left設置為left元素的寬,margin-right設置為right元素的寬;

一、聖杯布局

1 <div class="hd">header</div>
2     <div class="bd">
3         <!--middle放在最前面-->
4         <div class="mi">middle</div>
5         <div class="le">left</div>
6         <div class="ri">right</div>
7     </div>
8 <div class="footer">footer</div> 
 1     /*header頭部*/
 2      .hd {
 3              background-color: #666;
 4              /*內容居中*/
 5              display: flex;
 6              justify-content: center;
 7              align-items: center;
 8              height: 50px;
 9          }
10          /*footer尾部*/
11          .footer {
12              background-color: #666;
13              display: flex;
14              justify-content: center;
15              align-items: center;
16              height: 30px;    
17              /*清除浮動*/
18              clear: both;
19          }
20          /*放置left、right、middle*/
21          .bd {
22              padding: 0 100px 0 200px;
23          }
24          /*middle部分*/
25          .mi {
26              background-color: red;
27              float: left;
28              width: 100%;
29              height: 100px;
30          }
31          /*left部分*/
32          .le {
33              background-color: green;
34              float: left;
35              margin-left: -100%;
36              width: 200px;
37              position: relative;
38              left: -200px;
39              height: 100px;
40          }
41          /*right部分*/
42          .ri {
43              background-color: yellow;
44              float: left;
45              margin-left: -100px;
46              width: 100px;
47              position: relative;
48              right: -100px;
49             height: 100px;
50          } 

二、雙飛翼布局

1 <div class="hd">header</div>
2     <div class="bd">
3         <!--middle放在最前面,中間用div放置內容-->
4         <div class="mi"><div class="mi_ct">middle</div></div>
5         <div class="le">left</div>
6         <div class="ri">right</div>
7     </div>
8 <div class="footer">footer</div>
 1     .hd {
 2             background-color: #666;
 3             display: flex;
 4             justify-content: center;
 5             align-items: center;
 6             height: 50px;
 7         }
 8         .footer {
 9             background-color: #666;
10             display: flex;
11             justify-content: center;
12             align-items: center;
13             height: 30px;
14             clear: both;
15         }
16         .mi {
17             background-color: red;
18             float: left;
19             width: 100%;
20             height: 100px;
21         }
22         /*放置內容部分*/
23         .mi_ct {
24             margin-left: 200px;
25             margin-right: 100px;
26         }
27         .le {
28             background-color: green;
29             float: left;
30             margin-left: -100%;
31             width: 200px;
32             height: 100px;
33         }
34         .ri {
35             background-color: yellow;
36             float: left;
37             margin-left: -100px;
38             width: 100px;
39             height: 100px;
40         }

三、flex布局實現

1) 需在外部用一個div(class='contan')放置所有內容,display設為flex,並且可換行flex-wrap:wrap;

2)頭部、尾部寬度為100%,將中間部分(bd)擠到中間;

3)中間(bd)寬度也為100%,display設為flex,使其中內容為三欄布局(left、right寬度固定,中間middle自適應(flex:1));

 1 <div class="contain">
 2     <div class="hd">header</div>
 3     <div class="bd">
 4         <div class="le">left</div>
 5         <!--需按順序排列,middle不在最前面-->
 6         <div class="mi">middle</div>
 7         <div class="ri">right</div>
 8     </div>
 9     <div class="footer">footer</div>
10 </div>
 1     .contain {
 2             display: flex;
 3             flex-wrap: wrap;
 4             height: 300px;
 5         }
 6         .hd {
 7             background-color: #666;
 8             width: 100%;
 9             height: 15%;
10             display: flex;
11             justify-content: center;
12             align-items: center;
13         }
14         .footer {
15             background-color: #666;
16             width: 100%;
17             height: 10%;
18             display: flex;
19             justify-content: center;
20             align-items: center;
21         }
22         .bd {
23             display: flex;
24             width: 100%;
25             height: 75%;
26         }
27         .mi {
28             background-color: red;
29             flex: 1;
30             display: flex;
31             justify-content: center;
32             align-items: center;
33         }
34         .le {
35             background-color: green;
36             width: 200px;
37             display: flex;
38             justify-content: flex-start;
39             align-items: center;
40         }
41         .ri {
42             background-color: yellow;
43             width: 100px;
44             display: flex;
45             justify-content: flex-end;
46             align-items: center;
47         }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM