一、浮动布局(float布局)(流动布局)(双飞翼布局)

使用浮动来完成左中右三栏布局
float:left----左浮动
float:right----右浮动
tip:使用float浮动时,margin:0 auto;使块元素居中将会失效

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
        /*设置最小高度,以免内容为空撑不起来div*/
            min-height: 200px;
        }
        /*左边div的css设置*/
        .left{
            /*使其左浮动*/
            float: left;
            width: 300px;
            background-color: red;
        }
        /*右边div的css设置*/
        .right{
            /*使其右浮动*/
            float: right;
            width: 300px;
            background-color: blue;
        }
        .center{
            background-color: green;
        }
    </style>
</head>
<body>
    <div class="box">
        <div class="left">这里是左边</div>
        <div class="right">这里是右边</div>
        <div class="center">这里是中间</div><!--中间的div必须写在最后,否则右边的div将会在下面-->
    </div>
    <div style="background-color: tan;"></div>
</body>
</html>
  • 优点:兼容性较好
  • 缺点:浮动会给整体带来较大的影响,在宽度不够时,影响布局,而且必须先写左右div再写中间div,否则右边div将会挤到下面

css3流布局 html5 html流动布局设置_html


双飞翼布局

  1. left、center、right三种都设置左浮动
  2. 设置center宽度为100%
  3. 设置负边距,left设置负边距为100%,right设置负边距为自身宽度
  4. 设置content的margin值为左右两个侧栏留出空间,margin值大小为left和right宽度
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>双飞翼布局</title>
	<style>
		.box{
			height: 600px;
			width: 1200px;
			margin: 0 auto;
		}
		.left{
			float: left;
			width: 200px;
			height: 100%;
			background: red;
			margin-left: -100%;
		}
		.center{
			float: left;
			width: 100%;
			height: 100%;
			background: blue;
		}
		#center_main{
			margin: 0px 200px 0px 200px;
		}
		.right{
			float: left;
			width: 200px;
			height: 100%;
			background: red;
			margin-left: -200px;
		}
	</style>
</head>
<body>
	<div class="box">
		<div class="center">
			<div id="center_main">这是中间500PX</div>
		</div>
		<div class="left">这是左边200PX</div>
		<div class="right">这是右边200PX</div>
	</div>
</body>
</html>

css3流布局 html5 html流动布局设置_css3流布局 html5_02

二、定位布局(position)(圣杯布局)

1. position

position:relative:与自己原有的位置对比定位
position:absolute:与最近的一个具有position属性的父元素对比定位
position:fixed:与浏览器对比定位(需要始终在浏览器页面上的(如广告))
通常操作“子绝父相”:父元素:relative;子元素:absolute;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div{
            min-height: 200px;
        }
        /*给父元素添加position:relative;*/
        .box{
            height: 500px;
            width: 600px;
            position: relative;
            margin-left: 50px;
            background-color: skyblue;
        }
        /*子元素添加absolute*/
        .a{
            width: 200px;
            position: absolute;
            left: 50%;
            top:50%;
            background-color: green;
        }
        /*fixed相对于浏览器定位*/
        .b{
            width: 200px;
            position: fixed;
            left: 50%;
            top: 50%;
            background-color: red;
        }
    </style>
</head>
<body>
    <div class="box">
        这是relative
        <div class="a">这是absolute</div>
        <div class="b">这是fixed</div>
    </div>
</body>
</html>

css3流布局 html5 html流动布局设置_双飞翼布局_03

3. 圣杯布局

  1. left、center、right三种都设置左浮动
  2. 大盒子给padding撑开自己的左右内边距,以便一会左右元素使用
  3. 中间主列给宽度100%
  4. 左元素margin-left负100%,右元素margin-left负自身宽度,为的是让左元素起点在主元素起点,右元素起点在主元素后
  5. 左右元素给position:relative相对定位
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>双飞翼布局</title>
	<style>
		.box{
			height: 600px;
			width: 1200px;
			/*大盒子给padding撑开自己的左右内边距,以便一会左右元素使用*/
			padding: 0px 200px 0px 200px;
		}
		.left , .center , .right{
			float: left;
			height: 100%;
			/*三列都给float左浮动*/
		}
		.center{
			/*中间主列给宽度100%*/
			width: 100%;
			background: blue;
		}
		.left{
			/*此时的左右元素,应该被挤到下面去了,因为中间的元素写在前面,且宽度给100%*/
			/*所以,先给margin-left负100%,让左元素的起点在主元素的起点处*/
			/*设置相对定位,left值给自身的大小*/
			margin-left: -100%;
			position: relative;
			width: 200px;
			left: -200px;
			background: red;
		}
		.right{
			/*与左元素同理,先设置margin-left负200px,即自身的宽度,让自己的起点在主元素边框后*/
			/*设置相对定位,left值给自身的大小*/
			margin-left: -200px;
			position: relative;
			width: 200px;
			background: red;
			left: 200px;
		}
	</style>
</head>
<body>
	<div class="box">
		<div class="center">这是中间500PX
			<div style="float: right;width: 50px;height: 50px;background: green;"></div>
		</div>
		<div class="left">这是左边200PX</div>
		<div class="right">这是右边200PX</div>
	</div>
</body>
</html>

4. 总结
圣杯布局 和 双飞翼布局 是重要布局方式。两者的功能相同,都是为了实现一个两侧宽度固定,中间宽度自适应的三栏布局。

它们遵循了以下要点:
1.两侧宽度固定,中间宽度自适应
2.中间部分在DOM结构上优先,以便先行渲染

它们的区别如下:
双飞翼布局:三列元素均使用float左浮动,中间主元素写在前,将主列元素嵌套到一个新的div下,为最里面的主列元素设置左右内边距以便给左右元素留出空间(全float)
圣杯布局:三列元素嵌套在一个大的div下,且大的div使用padding设置左右内边距留出空间,左右元素使用position定位(主float+左右position)

至此,五种布局方式,还剩三种,因为2020疫情影响,这篇博客拖了一个多月,实在是很抱歉,剩下三种中,还需要重点学习的是flex和表格布局,留至下篇博文,如有不妥之处,还希望各位大佬指出批评,感谢各位