# CSS 常用布局

# 文档流

  • 块状元素独占一行
  • 行内元素可以同一行显示,自左向右,如果不够会自动换行
  • 自上而下的展示
  • 脱离文档流:浮动和定位

# 浮动

浮动指的是使元素脱离原来的文本流,在父元素中浮动起来。

  • 浮动使用 float 属性。
  • 可选值:
    • none:不浮动
    • left:向左浮动
    • right:向右浮动

# 浮动的表现形式

  • 当一个元素浮动以后,其下方的元素会上移。元素中的内容将会围绕在元素的周围。
  • 浮动会使元素完全脱离文本流,也就是不再在文档中在占用位置。
  • 元素设置浮动以后,会一直向上漂浮直到遇到父元素的边界或者其他浮动元素。
  • 元素浮动以后即完全脱离文档流,这时不会再影响父元素的高度。也就是浮动元素不会撑开父元素。
  • 浮动元素默认会变为块元素,即使设置 display:inline 以后其依然是个块元素。
  • 块级元素和行内元素都可以浮动,当一个行内元素浮动以后将会自动变为一个块级元素。
  • 当一个块级元素浮动以后,宽度会默认被内容撑开,所以当漂浮一个块级元素时我们都会为其指定一个宽度。

# 浮动的影响

如果子类元素设置了浮动,而父类元素没有设置高度,或者高度比子类元素小,那么子类元素脱离了文档流,就无法把父类盒子撑开。那么整个文档的结构将受到破坏。

  • 清除浮动的影响:
    • 严格计算父类盒子高度
    • 在浮动元素的最后面追加一个空的 div,设置 clear:both 即可清除浮动的影响。
    • 给父类元素设置 overflow:hidden;
  • 因为浮动会对文档流造成影响,所以能用流式布局就不要使用浮动。
补充:
1.display:inline-block 标签的换行符会被显示为空格。
2.float:right 会改变标签的前后顺序。
<!DOCTYPE html>
<html lang="en">
	<head>
		<meta charset="UTF-8" />
		<title>Document</title>
		<style>
			* {
				margin: 0;
				padding: 0;
			}
			.header {
				width: 100%;
				height: 100px;
				background-color: green;
			}
			.content {
				width: 100%;
				/*height: 500px;*/
				background-color: pink;
			}
			/*同级要浮动,都浮动*/
			.content .aside {
				float: left;
				width: 200px;
				height: 300px;
				background-color: red;
			}
			.content .main {
				float: left;
				width: 800px;
				height: 900px;
				background-color: gray;
			}
			.footer {
				width: 100%;
				height: 100px;
				background-color: black;
			}
			/*不允许当前元素左右出现浮动元素  这样可以清除浮动的影响*/
			.clr {
				clear: both;
			}
		</style>
	</head>
	<body>
		<div class="header"></div>
		<div class="content">
			<div class="aside"></div>
			<div class="main"></div>
			<div class="clr"></div>
		</div>
		<div class="footer"></div>
	</body>
</html>

# 定位

通过 position 属性可以实现元素的定位。元素定位之后,需要通过设置 left/right 和 top/bottom 值对元素定位。

  • position 属性可以把一个元素放置到网页中的任何位置。

  • 可选值:

    • static(默认)
    • relative
    • absolute
    • fixed
    • sticky

# relative 相对定位

相对元素本身的位置定位。

  • 每个元素在页面的文档流中都有一个自然位置。相对于这个位置对元素进行移动就称为相对定位。周围的元素完全不受此影响。
  • 当开启了相对定位以后,可以使用 top、right、bottom、left 四个属性对元素进行定位。
  • 如果不设置元素的偏移量,元素位置不会发生改变。
  • 相对定位不会使元素脱离文本流。元素在文本流中的位置不会改变。
  • 相对定位不会改变元素原来的特性。
  • 相对定位会使元素的层级提升,使元素可以覆盖文本流中的元素。
.d1 {
	position: relative;
	left: 100px;
	top: 100px;
	width: 200px;
	height: 200px;
	background-color: green;
}

# absolute 绝对定位

指使元素相对于离他最近的祖先定位元素或视口所在的 html 文档进行定位。

  • 当开启了绝对定位以后,可以使用 top、right、bottom、left 四个属性对元素进行定位。
  • 绝对定位会使元素完全脱离文本流。
  • 绝对定位的块元素的宽度会被其内容撑开。
  • 绝对定位会使行内元素变成块元素。
  • 一般使用绝对定位时会同时为其父元素指定一个相对定位,以确保元素可以相对于父元素进行定位。
.d1 {
	/*有绝对的事情吗?绝对的值必须有参照物*/ /*如何才能既保证父类有定位元素 而且父类不会再原来的位置偏移*/ /*子绝父相*/
	position: relative;
	left: 0;
	top: 0; /* left: 100px; top: 100px;*/
	margin-left: 100px;
	width: 400px;
	height: 400px;
	background-color: green;
}
.d11 {
	position: absolute;
	left: 100px;
	top: 100px;
	width: 150px;
	height: 150px;
	background-color: red;
}

/* 结构 */
/* <div class="d1">
	<div class="d11"></div>
</div> */

# fixed 固定定位

元素会被锁定在屏幕的某个位置上,当访问者滚动网页时,固定元素会在屏幕上保持不动。 (相对于视口定位)

  • 固定定位不占据原来的位置,会脱离文档流。
  • 给元素设置固定定位之后,元素位置从浏览器左上角出发。 - 可以将行内元素转换块元素。
.zx {
	position: fixed;
	right: 100px;
	bottom: 200px;
	width: 200px;
	height: 200px;
	background-color: red;
}

/* <a class="zx" href="#">
	w shi a
</a> */

# sticky 粘性定位

粘性定位可以被认为是相对定位和固定定位的混合。元素在跨越特定阈值前为相对定位,之后为固定定位。

#one {
	position: sticky;
	top: 10px;
}

在网页滚动到元素 top 距离小于 10px 之前,元素为相对定位。之后,元素将固定在与顶部距离 10px 的位置,直到 网页回滚到阈值以下。

# z-index

  • 当元素开启定位以后就可以设置 z-index 这个属性。默认是 0。
  • z-index 可以指定一个整数作为参数,值越大元素显示的优先级越高,也就是 z-index 值较大的元素会显示在网页的最上层。
.box1 {
	position: absolute;
	left: 20px;
	top: 20px;
	width: 200px;
	height: 200px;
	background-color: red;
	z-index: 9;
	/* 数值越大 层级越高 */
}

.box2 {
	position: absolute;
	left: 50px;
	top: 50px;
	width: 200px;
	height: 200px;
	background-color: orange;
	z-index: 2;
}

.box3 {
	position: absolute;
	left: 80px;
	top: 80px;
	width: 200px;
	height: 200px;
	background-color: black;
}

.inner-box {
	width: 50px;
	height: 50px;
	position: absolute;
	left: 20px;
	top: 20px;
	background-color: blue;
	z-index: 9999;
	/* 受限于父类盒子层级 */
}

/* 开启定位层级会得到提升
通过 z-index  属性 控制他们的层级 */
/* <div class="box1">

</div>
<div class="box2">
    <div class="inner-box">

    </div>
</div>
<div class="box3">

</div> */

# 规避脱标流

经验: 一般布局采用标准流,如果标准流布局实现不了用浮动。定位一般用于解决小范围的某个标签的位置。

  • 能用标准流(没有脱标)解决就不用浮动
  • 解决不了就考虑有浮动(页面布局类型,“不完全脱标”)
  • 浮动解决不了用定位(小图标,完全脱标,不影响内容)

# 结束

html 和 css 基础内容基本概况完毕,当然只掌握这些内容是不够的。只要跟着老师的教程走,耐心学,三四个案例下来就可以完全掌握页面基础知识。期间对于类命名,组织规则及实现技巧,都会一一说到。

上次更新: 9/2/2019, 5:09:05 PM