html常见布局
 2022/2/13  布局
# 两栏布局(边栏定宽主栏自适应)
- float + overflow(BFC 原理)
👉 codepen online 👈
  https://codepen.io/chengzao/pen/WNXERZm/<div class="section">
  <div class="left">aside</div>
  <div class="main">main</div>
</div>
<style>
  .left {
    width: 200px;
    height: 50px;
    float: left;
  }
  .main {
    height: 100px;
    overflow: hidden;
  }
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- float + margin
👉 codepen online 👈
  https://codepen.io/chengzao/pen/yLPogvL/<div class="section">
  <div class="left">aside</div>
  <div class="main">main</div>
</div>
<style>
  .left {
    width: 200px;
    height: 50px;
    float: left;
  }
  .main {
    height: 100px;
    margin-left: 200px;
  }
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- flex
👉 codepen online 👈
  https://codepen.io/chengzao/pen/podrRKo/<div class="section flex">
  <div class="left">aside</div>
  <div class="main">main</div>
</div>
<style>
  .flex{
    display: flex;
  }
  .left {
    width: 200px;
    height: 50px;
  }
  .main {
    height: 100px;
    flex: 1;
  }
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- grid
👉 codepen online 👈
  https://codepen.io/chengzao/pen/yLPogqy/<div class="section grid">
  <div class="left">aside</div>
  <div class="main">main</div>
</div>
<style>
  .grid {
    display: grid;
    grid-template-columns: 200px auto;
  }
  .left {
    width: 200px;
    height: 50px;
  }
  .main {
    height: 100px;
    flex: 1;
  }
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 三栏布局(两侧栏定宽主栏自适应)
- 圣杯布局
👉 codepen online 👈
  https://codepen.io/chengzao/pen/mdqMRGj/<div class="section clearfix">
  <div class="main">main</div>
  <div class="left">left</div>
  <div class="right">right</div>
</div>
<style>
  .section{
    /* there */
    padding: 0 150px;
  }
  .main {
    height: 100px;
    /* there */
    width: 100%;
    float: left;
  }
  .left {
    width: 150px;
    height: 50px;
    /* there */
    float: left;
    position: relative;
    left: -150px;
    margin-left: -100%;
  }
  .right {
    width: 150px;
    height: 50px;
    /* there */
    float: left;
    position: relative;
    right: -150px;
    margin-left: -150px;
  }
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
- 双飞翼布局
👉 codepen online 👈
  https://codepen.io/chengzao/pen/oNoeZXd/<div class="section clearfix">
  <div class="main"><div class="inner">inner</div></div>
  <div class="left">left</div>
  <div class="right">right</div>
</div>
<style>
  .main {
    height: 100px;
    float: left;
    width: 100%;
  }
  .inner{
    margin: 0 150px;
    height: 100px;
  }
  .left {
    width: 150px;
    height: 50px;
    float: left;
    margin-left: -100%;
  }
  .right {
    width: 150px;
    height: 50px;
    float: left;
    margin-left: -150px;
  }
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
- float + overflow (BFC原理)
👉 codepen online 👈
  https://codepen.io/chengzao/pen/rNYzyMw/<div class="section clearfix">
  <div class="left">left</div>
  <div class="right">right</div>
  <div class="main">main</div>
</div>
<style>
.main {
  height: 100px;
  overflow:hidden;
}
.left {
  width: 150px;
  height: 50px;
  float: left;
}
.right {
  width: 150px;
  height: 50px;
  float: right;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
- flex
👉 codepen online 👈
  https://codepen.io/chengzao/pen/rNYzyjw/<div class="section flex">
  <div class="left">left</div>
  <div class="main">main</div>
  <div class="right">right</div>
</div>
<style>
.flex {
  display: flex;
}
.main {
  height: 100px;
  flex:1;
}
.left {
  width: 150px;
  height: 50px;
}
.right {
  width: 150px;
  height: 50px;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
- grid
👉 codepen online 👈
  https://codepen.io/chengzao/pen/YzExZVd/<div class="section grid">
  <div class="left">left</div>
  <div class="main">main</div>
  <div class="right">right</div>
</div>
<style>
.grid {
  display: grid;
  grid-template-columns: 150px auto 150px;
}
.main {
  height: 100px;
}
.left {
  width: 150px;
  height: 50px;
}
.right {
  width: 150px;
  height: 50px;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 多列等高布局
- padding + 负margin
👉 codepen online 👈
  https://codepen.io/chengzao/pen/PoOKpOY/<main>
  <section class="padmar green">
    <p>111</p>
  </section>
  <section class="padmar orange">
    <p>222</p>
    <p>222</p>
    <p>222</p>
  </section>
  <section class="padmar blue">
    <p>333</p>
    <p>333</p>
  </sectoin>
</main>
<style>
main {
  overflow: hidden;
}
.padmar {
  padding-bottom: 1000px;
  margin-bottom: -1000px;
}
section {
  float: left;
  width: 33.33%;
  color: #fff;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 三行布局(头尾定高主栏自适应)
- calc
👉 codepen online 👈
  https://codepen.io/chengzao/pen/oNoeZmV/<div class="layout">
    <header>header</header>
    <main>
        <div class="inner">main</div>
    </main>
    <footer>footer</footer>
</div>
<style>
  main{
    height: calc(100% - 100px);
    background: #87e8de;
  }
  header, footer {
    height: 50px;
    background: #bfbfbf;
  }
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
- absolute
👉 codepen online 👈
  https://codepen.io/chengzao/pen/mdqMWgd/<div class="layout">
    <header></header>
    <main>
        <div class="inner"></div>
    </main>
    <footer></footer>
</div>
<style>
.layout{
  position: relative;
}
header{
  position: absolute;
  top:0;
  left:0;
  width: 100%;
}
footer{
  position: absolute;
  left: 0;
  bottom: 0;
  width: 100%;
}
main{
  height: 100%;
  padding: 50px 0;
  box-sizing: border-box;
}
header, footer {
  height: 50px;
  background: #bfbfbf;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
- flex
👉 codepen online 👈
  https://codepen.io/chengzao/pen/YzExVyz/<div class="layout">
    <header></header>
    <main>
        <div class="inner"></div>
    </main>
    <footer></footer>
</div>
<style>
.layout{
  display: flex;
  flex-direction: column;
}
main{
  flex: 1
}
header, footer {
  height: 50px;
  background: #bfbfbf;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
- grid
👉 codepen online 👈
  https://codepen.io/chengzao/pen/QWOMvyM/<div class="layout">
    <header></header>
    <main>
        <div class="inner"></div>
    </main>
    <footer></footer>
</div>
<style>
.layout{
  display: grid;
  grid-template-rows: 50px 1fr 50px;
}
header, footer {
  height: 50px;
  background: #bfbfbf;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# css实现文字两端对齐
// html
<div class="row">
  <span>姓名</span><input type="text">
</div>
<div class="row">
  <span>联系方式</span><input type="text">
</div>
// css 1.0
.row span {
    display: inline-block;
    width: 4em;
    text-align: justify;
    text-align-last: justify;
 }
// css 2.0
.row input {
  vertical-align: top;
}
.row span {
  display: inline-block;
  width: 4em;
  text-align: justify;
  height: 20px;
  overflow: hidden;
}
.row span:after {
  content: '';
  display: inline-block;
  width: 100%;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
