两栏布局与三栏布局

99 阅读2分钟

两栏布局

1. BFC实现

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
		*{
			margin: 0; padding: 0;
		}
			#app{
				width: 100vw; height: 400px;
				background-color: #55ff00;
				/* overflow: hidden; */
			}
			.box1{
               /* 一边固定宽度(设置在左边或右边按需求即可) */
				width: 100px; height: 100px;
				float: left;
				margin-right: 50px;
				background-color: #55ffff;
			}
			.box2{
                 /* 一边不设宽度(不设默认为父元素100%) */
				height: 150px;
				/* 触发BFC */
				overflow: hidden;
				background-color: #ffff7f;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<div class="box1">
				盒子一
			</div>
			<div class="box2">
				盒子二
			</div>
		</div>
	</body>
</html>

2. flex实现

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			* {
				margin: 0;
				padding: 0;
			}

			#app {
				width: 100vw;
				height: 400px;
				background-color: #55ff00;
                /*转换布局方式*/
				display: flex; 
			}

			.box1 {
				width: 100px;
				height: 100px;
				background-color: #55ffff;
			}

			.box2 {
				height: 150px;
				overflow: hidden;
				background-color: #ffff7f;
                /*让其将剩余空间铺满*/
				flex: 1;
			}
		</style>
	</head>
	<body>
		<div id="app">
			<div class="box1">
				盒子一
			</div>
			<div class="box2">
				盒子二
			</div>
		</div>
	</body>
</html>

3. 定位实现

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			* {
				padding: 0;
				margin: 0;
			}

			body {
				position: relative;
			}

			#left {
				width: 300px;
				height: 400px;
				background: yellow;
				/* 定位实现两栏布局关键 */
				position: absolute;
				top: 0;
				left: 0;
				/* margin-right:300px ; */
  
			}

			#right {
				height: 500px;
				background-color: blue;
				/* 外边距拉开距离 */
				margin-left: 300px;
			}
		</style>
	</head>
	<body>
		<div id="left">

		</div>
		<div id="right">

		</div>
	</body>
</html>

三栏布局

1. 浮动

原理:左边左浮动,中间右浮动最后不设浮动(右边设overflow:hidden触发BFC)

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			*{
				padding: 0; margin: 0;
			}
			body{
				overflow: hidden;
			}
			.left {
				width: 100px;
				height: 300px;
				background: #0000FF;
				/* 三栏布局关键 */
				float: left;
			}

			.center {
				height: 300px;width: 100px;
				background: #ffff00;
				/* 三栏布局关键 */
				float: right;
			}

			.right {
				height: 500px;
				background: #aaff00;
				/* 三栏布局关键 */
				overflow: hidden;
			}
		</style>
	</head>
	<body>
		<div class="left">

		</div>
		<div class="center">

		</div>
		<div class="right">

		</div>
	</body>
</html>

2. flex布局

实现:左右设定固定宽度,中间使用flex:1 让其自动适应铺满。

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			*{
				padding: 0; margin: 0;
			}
			body{
				/* Flex实现三栏布局关键 */
				display: flex;
			}
			.left {
				width: 100px;
				height: 300px;
				background: #0000FF;
				
			}
			
			.center {
				height: 500px;
				background: #ffff00;
				/* Flex实现三栏布局关键 */
				flex: 1;
			}
			
			.right {
				height: 300px; width: 100px;
				background: #aaff00;
			}
		</style>
	</head>
	<body>
		<div class="left">
		
		</div>
		<div class="center">
		
		</div>
		<div class="right">
		
		</div>
	</body>
</html>

3. 定位实现

实现:左边设置绝对定位(top:0;left:0),中间设置左右边距,右边设置左边设置绝对定位(top:0;right:0)

原理:利用绝对定位让左右元素靠近左右边框,而中间就不设宽度自适应但是得设置外边距和左右元素拉开距离

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title></title>
		<style type="text/css">
			*{
				padding: 0; margin: 0;
			}
			body{
				/* 定位实现三栏布局关键 */
				position: relative;
			}
			.left {
				width: 100px;
				height: 300px;
				background: #0000FF;
				/* 实现三栏布局关键 */
				position: absolute;
				top: 0;
				left: 0;
			}
			
			.center {
				height: 500px;
				background: #ffff00;
				/* 实现三栏布局关键 */
				margin: 0 100px;
			}
			
			.right {
				height: 300px; width: 100px;
				background: #aaff00;
				/* 实现三栏布局关键 */
				top: 0;
				right: 0;
				position: absolute;
			}
		</style>
	</head>
	<body>
		<div class="left">
		
		</div>
		<div class="center">
		
		</div>
		<div class="right">
		
		</div>
	</body>
</html>