# float 布局

<!DOCTYPE html>
<html>
  <head>
    <style type="text/css">
      body > * {
        min-height: 100px;
      }
      
      .left {
        float: left;
        width: 300px;
        background: red;
      }
      .right {
        float: right;
        width: 300px;
        background: yellow;
      }
      
      .content {
        background: green;
        margin: auto 300px;
      }
      
    </style>
  </head>
  <body>
    <section class="left"></section>
    <section class="right"></section>
    <section class="content"></section>
  </body>
</html>

优点:

  • 实现简单

  • 兼容性好

缺点:

  • 浮动元素脱离文档流
  • 需要手动清除浮动,如果处理不好容易造成高度塌陷

# 绝对定位布局

<!DOCTYPE html>
<html>
  <head>
    <style type="text/css">
      body > * {
        min-height: 100px;
      }
      
      .left {
        position: absolute;
        left: 0;
        width: 300px;
        background: red;
      }
      .right {
        position: absolute;
        right: 0px;
        width: 300px;
        background: yellow;
      }
      
      .content {
        background: green;
        position: absolute;
        left: 300px;
        right: 300px;
      }
      
    </style>
  </head>
  <body>
    <section class="left"></section>
    <section class="right"></section>
    <section class="content"></section>
  </body>
</html>

优点:

  • 简单
  • 兼容性好

缺点:

  • 脱离文档流,子元素也脱离文档流
  • 有效性和可用性比较差

# flex 布局

<!DOCTYPE html>
<html>
<head>
	<style type="text/css">
		* {
			margin:0;
			padding: 0;
		}

		.layout {
			display: flex;
			height: 200px;
		}

		.left {
			width:300px;
			background: red;
		}

		.right {
			width: 300px;
			background: yellow;
		}

		.content {
			flex: 1;
			background: green;
		}

	</style>
</head>
<body>
	<div class="layout">
		<section class="left"></section>
		<section class="content"></section>
		<section class="right"></section>
	</div>
</body>
</html>

优点:

  • 简单快捷

缺点:

  • 不兼容 IE8 及以下

# 表格布局

<!DOCTYPE html>
<html>
<head>
	<style type="text/css">
		* {
			margin:0;
			padding: 0;
		}

		.layout {
			display: table;
			min-height: 200px;
			width: 100%;
		}

		.left {
			display: table-cell;
			width:300px;
			background: red;
		}

		.right {
			display: table-cell;
			width: 300px;
			background: yellow;
		}

		.content {
			display: table-cell;
			background: green;
		}

	</style>
</head>
<body>
	<div class="layout">
		<section class="left"></section>
		<section class="content"></section>
		<section class="right"></section>
	</div>
</body>
</html>

优点:

  • 实现简单

缺点:

  • 当其中一个单元格高度超出的时候,两侧的单元格也会跟着一起变高

# grid 布局

<!DOCTYPE html>
<html>
<head>
	<style type="text/css">
		* {
			margin:0;
			padding: 0;
		}

		.layout {
			display: grid;
			grid-template-columns: 300px auto 300px;
			grid-template-rows: 200px;
		}

		.left {
			background: red;
		}
		.right {
			background: yellow;
		}
		.content {
			background: green;
		}
	</style>
</head>
<body>
	<div class="layout">
		<section class="left"></section>
		<section class="content"></section>
		<section class="right"></section>
	</div>
</body>
</html>

优缺点同 flex