嗨,大家好,我又来了,今天主要是分享下我们在css中常用的布局方式。可能在面试过程中也会出现哦,注意听哦
主要是下面几种
- 等高布局
- 三栏布局
- 两栏布局
- 双飞翼布局
- 圣杯布局
1. 等高布局
这里来讲解下等高布局的实现方式,如果有我漏写的希望大家可以在留言中告诉我,相互学习。
1.1 table-cell 实现方式
1.1.1 上“效果”

1.1.2 上“代码”
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>等高布局实现 - table-cell</title>
<style>
.left,
.middle,
.right {
width: 200px;
display: table-cell;
/* display: table-cell 默认就是等高布局 */
}
.left {
height: 300px;
}
.left,
.right {
background: red;
}
.middle {
background: blue;
}
.outer {
display: table;
}
</style>
</head>
<body>
<div class="outer">
<div class="left"></div>
<div class="middle"></div>
<div class="right"></div>
</div>
</body>
</html>
使用display属性:table-cell 天生具备等高的效果。所以我们可以利用这种方式进行实现
1.2 使用padding以及margin相抵方式
1.1.1 上“效果”

1.1.2 上“代码”
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>等高布局 - padding,margin</title>
<style>
.outer {
overflow: hidden;
}
.left,
.right,
.middle {
float: left;
padding-bottom: 9999px;
margin-bottom: -9999px;
}
.left,
.right {
width: 25%;
background: red;
}
.middle {
width: 50%;
background: yellow;
}
</style>
</head>
<body>
<div class="outer">
<div class="left">
<div>11</div>
<div>22</div>
</div>
<div class="middle">1</div>
<div class="right">2</div>
</div>
</body>
</html>
这里我们可以利用padding-bottom, margin-bottom 相抵的方式实现等高布局,可以理解为这是一种假等高布局
2. 三栏布局
2.1 利用BFC不跟浮动元素重叠方式
2.1.1 上“效果”

2.1.2 上“代码”
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>通过BFC来实现</title>
<style>
* {
padding: 0;
margin: 0;
}
html, body {
height: 100%;
}
.outer {
height: 100%;
}
.left {
width: 200px;
height: 100%;
float: left;
background: red;
}
.right {
width: 200px;
height: 100%;
float: left;
background: green;
}
.middle {
height: 100%;
background: blue;
overflow: hidden;
}
</style>
</head>
<body>
<div class="outer">
<div class="left">left</div>
<div class="right">right</div>
<div class="middle">middle</div>
</div>
</body>
</html>
2.2 flex实现三栏布局
2.2.1 上“效果”

2.2.2 上“代码”
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>flex实现三栏布局</title>
<style>
* {
padding: 0;
margin: 0;
}
.outer {
height: 500px;
display: flex;
justify-content: space-between;
}
.left,
.right,
.middle {
height: 100%;
}
.left,
.right {
width: 200px;
background: red;
}
.middle {
flex: 1;
background: blue;
}
</style>
</head>
<body>
<div class="outer">
<div class="left">left</div>
<div class="middle">middle</div>
<div class="right">right</div>
</div>
</body>
</html>
利用flex:1的特性来实现两边固定宽,中间子实现的三栏布局
2.3 利用定位方式
2.3.1 上“效果”

2.3.2 上“代码”
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>position实现三栏布局</title>
<style>
.left {
background: red;
left: 0;
top: 0;
position: absolute;
height: 100%;
width: 200px;
}
.right {
background: red;
right: 0;
position: absolute;
top: 0;
height: 100%;
width: 200px;
}
.middle {
background: blue;
left: 200px;
top: 0;
right: 200px;
position: absolute;
height: 100%;
}
</style>
</head>
<body>
<div class="outer">
<div class="left">left</div>
<div class="middle">middle</div>
<div class="right">right</div>
</div>
</body>
</html>
其实就是利用中间定位的方式,中间定位的原则是两边的宽度
2.4 双飞翼布局
开始划重点了!!! 注意了
2.4.1 上“效果”

2.4.2 上“代码”
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>双飞翼</title>
<style>
header {
height: 200px;
background: red;
}
.body {
overflow: hidden;
}
.middle,
.left,
.right {
float: left;
height: 200px;
}
.middle {
width: 100%;
}
.inner {
background: blue;
margin: 0 200px;
height: 200px;
}
.left {
background: orange;
width: 180px;
position: relative;
margin-left: -100%;
}
.right {
background: green;
width: 180px;
margin-left: -180px;
}
</style>
</head>
<body>
<header>header</header>
<div class="body">
<div class="middle">
<div class="inner">inner</div>
</div>
<div class="left">left</div>
<div class="right">right</div>
</div>
</body>
</html>
细细的品味代码,其实就是利用margin 来实现元素移动
2.5 圣杯布局
开始划重点了!!! 注意了
2.5.1 上“效果”

2.5.2 上“代码”
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>圣杯布局</title>
<style>
header {
background: red;
}
header,
footer {
height: 100px;
}
footer {
background: green;
}
.body {
padding: 0 200px;
overflow: hidden;
}
.middle {
background: orange;
float: left;
width: 100%;
height: 200px;
}
.left {
background: orchid;
position: relative;
left: -200px;
margin-left: -100%;
}
.right {
background: powderblue;
position: relative;
margin-left: -180px;
left: 200px;
}
.left,
.right {
height: 200px;
width: 180px;
float: left;
}
</style>
</head>
<body>
<header>header</header>
<div class="body">
<div class="middle">middle</div>
<div class="left">left</div>
<div class="right">right</div>
</div>
<footer>footer</footer>
</body>
</html>
希望有缘人在看代码的过程中可以将双飞翼以及圣杯布局同时看,可能收获会比较大
3. 两栏布局
3.1 利用BFC实现
3.1.1 上“效果”

3.1.2 上“代码”
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>BFC实现两栏布局</title>
<style>
.left {
float: left;
width: 200px;
height: 500px;
background: blue;
}
.right {
height: 500px;
background: red;
overflow: hidden;
}
</style>
</head>
<body>
<div class="left"></div>
<div class="right"></div>
</body>
</html>
3.2 利用flex实现
3.2.1 上“效果”

3.2.2 上“代码”
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>flex两栏布局</title>
<style>
.outer {
width: 500px;
height: 600px;
display: flex;
}
.inner1 {
flex: 1;
background: red;
}
.inner2 {
flex: 1;
background: blue;
}
</style>
</head>
<body>
<div class="outer">
<div class="inner1"></div>
<div class="inner2"></div>
</div>
</body>
</html>
3.3 使用定位方式
3.3.1 上“效果”

3.3.2 上“代码”
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>经典两栏布局 -- 定位</title>
<style>
.left {
width: 200px;
position: absolute;
top: 0;
left: 0;
bottom: 0;
background: red;
}
.right {
position: absolute;
left: 200px;
top: 0;
bottom: 0;
right: 0;
background: blue;
}
</style>
</head>
<body>
<div class="outer">
<div class="left"></div>
<div class="right"></div>
</div>
</body>
</html>
3.4 使用margin-left方式
3.4.1 上“效果”

3.4.2 上“代码”
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>float + margin实现布局</title>
<style>
* {
padding: 0;
margin: 0;
}
html,
body {
height: 100%;
}
.outer {
height: 100%;
}
.left {
width: 200px;
height: 100%;
background: red;
float: left;
}
.right {
margin-left: 200px;
height: 100%;
background: blue;
}
</style>
</head>
<body>
<div class="outer">
<div class="left">1</div>
<div class="right">2</div>
</div>
</body>
</html>
4. 结束
其实上述实例基本都是代码以及截图,因为css基本都是熟练知识都是死知识,并没有什么原理可以讲解。唯一可能需要理解的就是BFC,什么是BFC,BFC的存在可以解决哪些事情就完了,如果各位想看源码可以参考下面地址,我的GitHub有很多分栏,其实还有很多js重写原理,也希望大家多多star哦
本文详细介绍了CSS中常见的布局方式,包括等高布局(table-cell、padding/margin相抵)、三栏布局(BFC、flex、定位)以及双飞翼布局和圣杯布局的实现,通过代码实例展示了各种布局的用法和特点。同时,强调了理解BFC的重要性。
1万+

被折叠的 条评论
为什么被折叠?



