前言
实现两栏布局也是一道经典的面试题,两栏布局即左边固定右边伸缩,要实现两栏布局的方式超过十种了,下面举例五种,用来抛砖引玉。
float+BFC
<!DOCTYPE html> <html lang="en">     <head>         <meta charset="UTF-8" />         <meta http-equiv="X-UA-Compatible" content="IE=edge" />         <meta name="viewport" content="width=device-width, initial-scale=1.0" />         <title>两栏布局</title>         <style>                                        			.left {                 width: 200px;                 height: 100px;                 background-color: red;                 float:left;             }             .right {                 height: 200px;                 background-color: blue;                 overflow: hidden;             }
          </style>     </head>     <body > 		<div class="outer"> 			<div class="left">左侧</div> 			<div class="right">右侧</div> 		</div>     </body> </html>
   | 
 
float+margin
<!DOCTYPE html> <html lang="en">     <head>         <meta charset="UTF-8" />         <meta http-equiv="X-UA-Compatible" content="IE=edge" />         <meta name="viewport" content="width=device-width, initial-scale=1.0" />         <title>两栏布局</title>         <style> 			 			.left {                 width: 200px;                 height: 100px;                 background-color: red;                 float:left;             }             .right {                 height: 200px;                 background-color: blue;                 margin-left: 200px;             }
          </style>     </head>     <body > 		<div class="outer"> 			<div class="left">左侧</div> 			<div class="right">右侧</div> 		</div>     </body> </html>
   | 
 
flex
<!DOCTYPE html> <html lang="en">     <head>         <meta charset="UTF-8" />         <meta http-equiv="X-UA-Compatible" content="IE=edge" />         <meta name="viewport" content="width=device-width, initial-scale=1.0" />         <title>两栏布局</title>         <style>              			.outer { 				display: flex; 			} 			.left { 				width: 200px; 				height: 100px; 				background: lightcoral; 			} 			.right { 				flex: 1; 				height: 200px; 				background: lightseagreen; 			}
          </style>     </head>     <body > 		<div class="outer"> 			<div class="left">左侧</div> 			<div class="right">右侧</div> 		</div>     </body> </html>
 
   | 
 
左侧绝对定位
<!DOCTYPE html> <html lang="en">     <head>         <meta charset="UTF-8" />         <meta http-equiv="X-UA-Compatible" content="IE=edge" />         <meta name="viewport" content="width=device-width, initial-scale=1.0" />         <title>两栏布局</title>         <style>              		    
  			.outer { 				position: relative; 			} 			.left { 				position: absolute; 				width: 200px; 				height: 100px; 				background: lightcoral; 			} 			.right { 				margin-left: 200px; 				height: 200px; 				background: lightseagreen; 			}
          </style>     </head>     <body > 		<div class="outer"> 			<div class="left">左侧</div> 			<div class="right">右侧</div> 		</div>     </body> </html>
   | 
 
右侧绝对定位
<!DOCTYPE html> <html lang="en">     <head>         <meta charset="UTF-8" />         <meta http-equiv="X-UA-Compatible" content="IE=edge" />         <meta name="viewport" content="width=device-width, initial-scale=1.0" />         <title>两栏布局</title>         <style>                          
  			.outer { 				position: relative; 			} 			.left { 				width: 200px; 				height: 100px; 				background: lightcoral; 			} 			.right { 				position: absolute; 				left: 200px; 				top: 0; 				right: 0; 				bottom: 0; 				height: 200px; 				background: lightseagreen; 			}
          </style>     </head>     <body > 		<div class="outer"> 			<div class="left">左侧</div> 			<div class="right">右侧</div> 		</div>     </body> </html>
   | 
 
总结
- float+BFC:第一栏float:left; overflow: hidden; 清除浮动显示第二栏
 
- float+margin:第一栏float:left;给第二栏设置margin-left
 
- flex:将第二栏flex设置为1
 
- 左边绝对定位:第一栏绝地定位;第二栏margin-left
 
- 右边绝对定位:第二栏绝对定位:left为第一栏的宽度;top: 0;left: 200px;right: 0;bottom: 0;
 
还有其他方式,比如 grid 、float+calc 、table+calc 就不一一举例了。
感谢小伙伴们的耐心观看,本文为笔者个人学习记录,如有谬误,还请告知,万分感谢!如果本文对你有所帮助,还请点个关注点个赞~,您的支持是笔者不断更新的动力!