页面布局

两栏布局

左侧盒子绝对定位,设置固定宽度;左侧盒子宽度100%,使用padding-left设置左边距,实现两栏布局。

index.html

<div class="wrap">
    <div class="item">
      <div class="left"></div>
      <div class="right"></div>
    </div>
    <div class="item">
      <div class="left"></div>
      <div class="right"></div>
    </div>
    <div class="item">
      <div class="left"></div>
      <div class="right"></div>
    </div>
</div>

index.css

body {
  margin: 0;
}

.wrap {
  width: 375px;
  height: 300px;
  border: 1px solid #000;
  margin: 10px auto;
}

.item {
  position: relative;
  height: 100px;
  border: 1px solid #000;
  box-sizing: border-box;
}

.item .left {
  position: absolute;
  top: 0;
  left: 0;
  width: 100px;
  height: 100%;
  background-color: orange;
  box-sizing: border-box;
}

.item .right {
  width: 100%;
  height: 100%;
  padding-left: 100px;
  background-color: green;
  box-sizing: border-box;
}

two_column_layout.png

三栏布局

圣杯布局

布局时,中间盒子必须在最上方;
父级设置默认左边距和右边距,中间盒子宽度占满父级元素;
左侧盒子设置left为父级默认的左边距的负值,同时设置左外边距-100%;
右侧盒子设置right和左外边距为父级默认的右边距的负值;

index.html

<div class="container">
  <div class="column middle"></div>
  <div class="column left"></div>
  <div class="column right"></div>
</div>

index.css

html,
body,
.container {
  height: 100%;
  margin: 0;
}

.container {
  margin: 0 200px 0 150px;
}

.container .column {
  float: left;
  position: relative;
  height: 100%;
}

.container .middle {
  width: 100%;
  background-color: green;
}

.container .left {
  left: -150px;
  width: 150px;
  margin-left: -100%;
  background-color: orange;
}

.container .right {
  right: -200px;
  width: 200px;
  margin-left: -200px;
  background-color: red;
}

grail_model.png

双飞翼布局

中间盒子设置宽度100%,设置其内层盒子固定的左边距和右边距;
左侧盒子设置左外边距为-100%;
左侧盒子设置已定义的固定右边距的负值即可;

index.html

<div class="container">
  <div class="column middle">
    <div class="main"></div>
  </div>
  <div class="column left"></div>
  <div class="column right"></div>
</div>

index.css

html,
body,
.container {
  height: 100%;
  margin: 0;
}

.container .column {
  float: left;
  height: 100%;
}

.container .middle {
  width: 100%;
  background-color: orange;
}

.container .middle .main {
  height: 100%;
  margin: 0 200px 0 150px;
}

.container .left {
  width: 150px;
  margin-left: -100%;
  background-color: gray;
}

.container .right {
  width: 200px;
  margin-left: -200px;
  background-color: blue;
}

double_flying_wing.png