Published on

左侧定宽,右侧自适应与双飞翼布局

Authors
  • avatar
    Name
    Simmzl
    Twitter

mark

左侧定宽,右侧自适应布局:

<!-- html -->
<div class="left">left</div>
<div class="right">right</div>
.left{
  background-color: #4FB3A4;
  width: 200px;
  height: 500px;
}
.right{
  background-color: #e07d075c;
  height: 500px;
}

flex 布局

body{
  display: flex;
}
.left{
  flex: 0 0 200px;
}
.right{
  flex: 1;
}
flex: none | [ <'flex-grow'> <'flex-shrink'> <'flex-basis'> ]

默认 0 1 auto

  • flex-grow:定义项目的放大比例,默认为0
  • flex-shrink:定义了项目的缩小比例,默认为1
  • flex-basis:定义了在分配多余空间之前,项目占据的主轴空间(main size)

左侧浮动,右侧width:100%

.left{
  float: left;
}
.right{
  width: 100%;
}

左侧绝对定位,右侧设置margin-left

body{
  position: relative;
}
.left{
  position: absolute;
}
.right{
  margin-left: 200px;
}

两侧都是绝对定位

body{
  position: relative;
}
.left{
  position: absolute;
}
.right{
  position: absolute;
  left: 200px;
  width: 100%;
}

两侧都左浮动,右侧设置calc宽度

.left{
  float: left;
}
.right{
  float: left;
  width: calc(100% - 200px);
}

负margin

首先需要把右侧自适应部分用容器包起来并放在前面:

<div class="wrapper">
    <div class="right">right</div>
</div>
<div class="left">left</div>
.wrapper{
  float: left;
  width: 100%;
}
.left{
  float: left;
  margin-left: -100%;
}
.right{
  margin-left: 200px;
}

双飞翼布局(三栏布局)

mark

flex布局

<div class="left">left</div>
<div class="content">content</div>
<div class="right">right</div>
body{
  display: flex;
} 
.left{
  flex: 0 0 200px;
}
.content{
  flex: 1;
}
.right{
  flex: 0 0 200px;
}

负margin

原理同左侧定宽,右侧自适应布局的负margin方法。 将content放置在文档流前面可以让其优先渲染。

<div class="wrapper">
  <div class="content">content</div>
</div>
<div class="left">left</div>
<div class="right">right</div>
  1. 三者都设置向左浮动。
  2. 设置wrapper宽度为100%。
  3. 设置 负边距,left设置负左边距为100%,right设置负左边距为负的自身宽度。
  4. 设置content的margin值给左右两个子面板留出空间。
.wrapper{
  float: left;
  width: 100%;
}
.left{
  float: left;
  margin-left: -100%;
}
.right{
  float: left;
  margin-left: -200px;
}
.content{
  margin : 0 200px;
}

计算宽度calc()

<div class="left">left</div>
<div class="content">content</div>
<div class="right">right</div>
.left{
  float: left;
}
.right{
  float: left;
}
.content{
  float: left;
  width: calc(100% - 400px)
}