浮动
块元素在文档流中默认垂直排列,如果希望块元素在页面中水平排列,可以使块元素脱离文档流,使用float来使元素浮动,从而脱离文档流。
none: 默认值,元素默认在文档流中排列
left: 元素会立即脱离文档流,向页面的左侧浮动
right: 元素会立即脱离文档流,向页面的右侧浮动
当为一个元素设置浮动以后,元素会立即脱离文档流,它下面的元素会立即向上移动,元素浮动以后,会尽量向页面的左上或者是右上浮动,直到遇见父元素的边框或者其他的浮动元素,如果浮动元素上边是一个没有浮动的块元素,则浮动元素不会超过块元素,浮动的元素不会超过他上边的兄弟元素,最多最多一边齐。
浮动2
- 浮动的元素不会盖住文字,文字会自动环绕在浮动元素的周围,所以我们可以通过浮动来设置文字环绕图片的效果。
div {
height: 200px;
background-color: aqua;
}
在文档流中,子元素的宽度默认占父元素的全部。
div {
background-color: aqua;
float: left;
}
当元素设置浮动以后,会完全脱离文档流,块元素脱离文档流以后,高度和宽度都被内容撑开。
span {
width: 100px;
height: 100px;
background-color: aqua;
float: left;
}
开启span的浮动,内联元素脱离文档流以后会变成块元素。
高度塌陷问题
<div class="box1">
<div class="box2">
</div>
</div>
在文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高。
但是当为子元素设置浮动以后,子元素会完全脱离文档流,此时将会导致子元素无法撑起父元素的高度,导致父元素的高度塌陷,由于父元素的高度塌陷了,则父元素下的所有元素都会向上移动,这样将会导致页面布局混乱。
所以在开发中一定要避免出现高度塌陷的问题,我们可以将父元素的高度写死,以避免塌陷的问题出现,但是一旦高度写死,父元素的高度将不能自动适应子元素的高度,所以这种方案是不推荐使用的。
根据W3C的标准,在页面中元素都有一个隐含的属性叫做Block Formatting Context 简称BFC,该属性可以设置打开或者关闭,默认是关闭的。
当开启元素的BFC以后,元素将会具有如下特性。
- 父元素的垂直外边距不会和子元素重叠
- 开启BFC的元素不会被浮动元素所覆盖
- 开启BFC的元素可以包含浮动的子元素
如何开启BFC
- 设置元素浮动
- 使用这种方式开启,虽然可以撑开父元素,但是会导致父元素的宽度丢失,而且使用这种方式也会导致下边的元素上移,不能解决问题。
- 设置元素绝对定位
- 设置严肃为inline-block
- 可以解决问题,但是会导致宽度丢失,不推荐使用这种方式
- 元素的overflow设置为一个非visible
推荐方式:将overflow设置为hidden是副作用最小的开启BFC的方式
最推荐的方式:
.box1 {
border: 2px solid red;
}
.box2 {
width: 200px;
height: 200px;
background-color: yellowgreen;
float: left;
}
.box1::after {
content: "";
display: block;
clear: both;
}
导航条
html文件
<body>
<ul class="nav">
<li><a href="#">首页</a></li>
<li><a href="#">新闻</a></li>
<li><a href="#">联系</a></li>
<li><a href="#">关于</a></li>
</ul>
</body>
CSS文件
* {
margin: 0px;
padding: 0px;
}
.nav {
list-style: none; /*去除项目符号*/
width: 1200px;
margin: 0 auto;
background-color: #6495ED;
overflow: auto; /*解决高度塌陷*/
margin-top: 300px;
}
.nav li {
float: left;
width: 25%;
}
.nav li a {
display: inline-block;
width: 100%;
text-align: center; /*文字居中*/
padding: 5px 0px;
text-decoration: none; /*去除下划线*/
color: white;
font-weight: bold;
}
.nav li a:hover {
background-color: #cc0000;
}