经典三列布局,也叫做圣杯布局【Holy Grail of Layouts】是Kevin Cornell在2006年提出的一个布局模型概念,在国内最早是由淘宝UED的工程师传播开来,在中国也有叫法是双飞翼布局,它的布局要求有几点:
1、三列布局,中间宽度自适应,两边定宽;
2、中间栏要在浏览器中优先展示渲染;
3、允许任意列的高度最高;
4、要求只用一个额外的DIV标签;
5、要求用最简单的CSS、最少的HACK语句;
以上来自博客:https://my.oschina.net/jsan/blog/368543
以下通过代码演示圣杯布局延伸出的几种布局:
【html】
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>Document</title> 6 <link rel="stylesheet" href="../css/reset.css"> 7 <style> 8 html, body { 9 padding: 0; 10 text-align: center; 11 } 12 .header, .footer { 13 width: 100%; 14 height: 50px; 15 line-height: 50px; 16 background: #ccc 17 } 18 .cont { 19 width: 100%; 20 overflow: hidden; 21 clear: both; 22 } 23 .cont p { 24 padding: 10px 0; 25 clear: both; 26 } 27 </style> 28 </head> 29 <body> 30 <div class="page"> 31 <div class="header"><h1>Header</h1></div> 32 33 <div class="cont"> 34 35 <p>三栏布局</p> 36 <div class="main"> 37 <!-- main宽度为100%,撑开占满全屏 --> 38 <div class="main-wrap"> 39 <!-- main-wrap设置左右margin --> 40 <h1>Main</h1> 41 </div> 42 </div> 43 <div class="left"> 44 <h1>Left</h1> 45 </div> 46 <div class="right"> 47 <h1>Right</h1> 48 </div> 49 <style> 50 .left, .main, .right { 51 height: 100px; 52 line-height: 100px; 53 float: left; 54 background: #fff; 55 } 56 .left { 57 width: 190px; 58 margin-left: -100%; 59 background: #e4e4e4; 60 } 61 .right { 62 width: 230px; 63 margin-left: -230px; 64 background: #c90; 65 66 } 67 .main { 68 width: 100%; 69 } 70 .main-wrap { 71 margin: 0 230px 0 190px; 72 } 73 </style> 74 75 <p>两栏布局</p> 76 <div class="main2"> 77 <div class="main2-wrap"> 78 <h1>Main2</h1> 79 </div> 80 </div> 81 <div class="left2"> 82 <h1>Left2</h1> 83 </div> 84 85 <style> 86 .main2, .left2 { 87 float: left; 88 height: 100px; 89 line-height: 100px; 90 } 91 .main2 { 92 width: 100%; 93 background: #fff; 94 } 95 .main2-wrap { 96 margin-left: 200px; 97 } 98 .left2 { 99 width: 200px; 100 margin-left: -100%; 101 background: #c60; 102 } 103 </style> 104 105 <p>两栏布局2</p> 106 <div class="main22"> 107 <div class="main22-wrap"> 108 <h1>Main22</h1> 109 </div> 110 </div> 111 <div class="right22"> 112 <h1>Right22</h1> 113 </div> 114 <style> 115 .main22, .right22 { 116 float: left; 117 height: 100px; 118 line-height: 100px; 119 background: #fff; 120 } 121 .main22 { 122 width: 100%; 123 } 124 .main22-wrap { 125 margin-right: 300px; 126 } 127 .right22 { 128 width: 300px; 129 margin-left: -300px; 130 background: pink; 131 } 132 </style> 133 134 <p>三栏布局1</p> 135 <div class="main3"> 136 <div class="main3-wrap"> 137 <h1>Main3</h1> 138 </div> 139 </div> 140 <div class="left31"> 141 <h1>Left31</h1> 142 </div> 143 <div class="left32"> 144 <h1>Left32</h1> 145 </div> 146 <style> 147 .main3, .left31, .left32 { 148 float: left; 149 height: 100px; 150 line-height: 100px; 151 background: #fff; 152 } 153 .main3 { 154 width: 100%; 155 } 156 .main3-wrap { 157 margin-left: 300px; 158 } 159 .left31 { 160 width: 170px; 161 background: #789; 162 margin-left: -100%; 163 } 164 .left32 { 165 width: 130px; 166 background: #c6c6c6; 167 margin-left: -100%; 168 169 position: relative; 170 left: 170px; 171 172 } 173 </style> 174 175 <p>三栏布局2</p> 176 <div class="main31"> 177 <div class="main31-wrap"> 178 <h1>Main31</h1> 179 </div> 180 </div> 181 <div class="right31"> 182 <h1>Right31</h1> 183 </div> 184 <div class="right32"> 185 <h1>Right32</h1> 186 </div> 187 </div> 188 <style> 189 .main31, .right31, .right32 { 190 float: left; 191 height: 100px; 192 line-height: 100px; 193 background: #fff; 194 } 195 .main31 { 196 width: 100%; 197 } 198 .main31-wrap{ 199 margin-right: 300px; 200 } 201 .right31 { 202 width: 170px; 203 margin-left: -300px; 204 background: green; 205 } 206 .right32 { 207 width: 130px; 208 margin-left: -130px; 209 background: yellow; 210 } 211 </style> 212 <div class="footer"><h1>Footer</h1></div> 213 </div> 214 </body> 215 </html>
【效果】