blog-CSS之浮动布局、定位布局

文档流

在学习布局之间,需要对"文档流"这个名词有一定的认识。

1.文档流的概念

文档流是指网页的所有元素按照从左至右,从上至下的排列顺序进行排列,每个元素均有自己所占的位置,不会跨界占别的元素的位置。

2.文档流的特点

(1) 元素在页面显示的顺序与在代码中出现顺序一致
(2) 块级元素独占一行,宽度默认父级的100%,高度由内容决定
(3) 行内元素与其他元素共享一行,宽高由内容决定

3.图示理解脱离文档流

对于网页的显示,就如同一本书籍,默认文档流是书籍的最后一页,称之为底层,而书籍的首页称为顶层。当一个块元素设置相应布局使其脱离文档流之后,这个元素会脱离书籍的最后一页,在书籍的倒数第二页(也可为其他页)显示。
我们也可通过z-index这个属性设置块元素具体在哪一页中显示,如100,2,-1,值越大,元素所在层级越高(也就是书籍的前面几页)
在这里插入图片描述

布局

一.浮动布局(float)

【作用】 让块元素在一行中显示,或者让文字在图片周围显示。
【特点】脱离文档流
              块元素宽高默认由内容决定
              原先所在位置就会被其他块元素抢占
              浮动元素在一行中依次排列,当一行无法容纳的时候会自动换行
【float取值】
float:left 向左浮动
float:right 向右浮动
float:none 不浮动
float:inherit 浮动方式继承父元素

当只有两列布局时,可通过margin-left/margin-right设置列与列之间的间隔

【代码示例:行向列表】

<style type="text/css">
		.box{
			width: 400px;
			height: 200px;
			margin: 0 auto;
		}
		.box>ul{
			/*要li列表浮动要先去除列表样式*/
			list-style: none;
		}
		.box>ul>li{
			float: left; /*设置左浮动*/
			background: pink;
			line-height: 2em;
			text-align: center;
			/*margin-right: 5px;*/
		}
		.box>ul>li>a{
			text-decoration: none;
			color: black;
			padding: 10px;
		}
	</style>
	<div class="box">
		<ul>
			<li><a href="">首页</a></li>
			<li><a href="">博客</a></li>
			<li><a href="">学院</a></li>
			<li><a href="">下载</a></li>
			<li><a href="">论坛</a></li>
		</ul>
	</div>

【代码运行结果】
在这里插入图片描述
【当将margin-right: 5px;的注释去掉时代码运行结果】
在这里插入图片描述

二.定位布局(position)

【作用】 当一个元素悬挂在其他元素之上,优先考虑定位布局
常用在模态框、下拉菜单、二级菜单、固定宣传栏、网页聊天页面等
              
【position取值】

position:static
静态定位,默认值,没有脱离文档流

position:relative
相对定位,不脱离文档流,位置为当前元素原本的位置
通过改变属性top、bottom、left、right改变最终位置

position:absolute
绝对定位,脱离文档流,显示在其他元素的上方,通常与relative相对定位一起使用
其位置相对当前元素最近的父相对定位元素(即参照离它最近的父元素且是相对定位的父元素)
当没有相对定位的父元素,那么则默认是相对html、浏览器视口

position:fixed
固定定位,元素脱离文档流,参照浏览器视口(html)
即当页面随着滚动条下滑时,固定定位元素会固定在浏览器页面,不会被隐藏

position:sticky
粘滞定位,不脱离文档流,是relative 和 fixed 的结合
即,若将其元素设置top:50px时,当当前元素距离浏览器视口顶端为50px的时候,体现fixed的特点

【代码示例1:relative相对定位】

<style>
		.outer {
			background-color: #ccc;
		}
		.outer > div {
			height: 100px;
		}
		.outer > div.one {
			background-color: lightblue;
		}
		.outer > div.two {
			background-color: pink;
			/*将第二个div设置为绝对定位,并改变其位置,固定与其他div上方*/
			position: relative;
			top: 50px;
			left: 50px;
			z-index: 1;
		}
		.outer > div.three {
			background-color: teal;
			position: relative;
		}
	</style>
	<div class="outer">
		<div class="one"></div>
		<div class="two"></div>
		<div class="three"></div>
	</div>

【代码示例1运行结果】
在这里插入图片描述
【代码示例2:absolute绝对定位】

<style>
		.outer {
			background-color: #ccc;
			width: 800px;
			margin: 100px auto;
		}
		.outer > div:nth-child(1), 
		.outer > div:nth-child(3) {
			height: 100px;
		}
		.outer > div.one {
			background-color: lightblue;
		}
		.outer > div.two {
			background-color: pink;
			/*设置为绝对定位元素*/
			position: absolute;
			width: 800px;
			height: 50px;
		}
		.outer > div.three {
			background-color: teal;
		}
	</style>
	<div class="outer">
		<div class="one"></div>
		<div class="two"></div>
		<div class="three"></div>
	</div>

【代码示例2运行结果】
在这里插入图片描述
【代码示例3:fixed固定定位】

<style>
		.wrapper {
			width: 1200px;
			margin: 0 auto;
		}
		.top_nav a{
			text-decoration: none;
			color: #333;
			font-weight: bold;
		}
		.top_nav ul.nav {
			background-color: teal;
			/*将列表设置为固定定位,不随着滚动条滑动*/
			position: fixed;
			list-style: none;
		}
		.top_nav ul.nav > li {
			float: left;
			width: 100px;
			text-align: center;
		}
	</style>
	<div class="container">
		
		<div class="top_nav">
			<div class="wrapper">
			<ul class="nav">
				<li>
					<a href="#">居家生活</a>
				</li>
				<li>
					<a href="#">服饰鞋包</a>
				</li>
				<li>
					<a href="#">美食酒水</a>
				</li>
				<li>
					<a href="#">运动旅行</a>
				</li>
			</ul>
			</div>
		</div>
		<div style="height: 200px;background-color: lightblue">
		</div>
	</div>

【代码示例3运行结果】
在这里插入图片描述
【代码示例4:sticky粘滞定位】

<style>
		div:nth-child(3){
			background-color: pink;
			/*设置为粘滞定位*/
			position: sticky;
			top: 20px;
			width: 200px;
			right: 0;
			float: left;
		}
	</style>

	<div>one</div>
	<div>two</div>
	<div>three</div>
	<div style="height: 1000px;background-color: #ccc"></div>

【代码示例4运行结果】
在这里插入图片描述
此文章为作者本人原创,仅限于作者本人的学习总结记录,若有错误之处请留言提出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值