高度塌陷
文档流中,父元素的高度默认是被子元素撑开的,也就是子元素多高,父元素就多高,但是当为子元素设置浮动时,子元素会完全脱离文档流,此时将会导致子元素无法撑起父元素的高度,导致父元素 高度坍塌,所以父元素的高度坍塌了,则父元素下的所有元素都会向上移,这样将会导致页面布局混乱,所以在开发中一定要避免出现高度坍塌的问题,我们可以将父元素写死,以避免坍塌的问题出现,但是一旦高度固定住了,父元素的高度降板自动适应子元素的高度,所以这种方案是不推荐使用的。
如下面的代码:
.box1{
border:10px red solid;
height:100px;
}
.box{
width:100px;
height:100px;
background-color:blue;
为子元素设置项左浮动
faloat:left;
}
<div class='box1'>
<div class='box2'></div>
</div>
<div class='box3'</div>
运行结果:
解决高度坍塌
根据W3C的标准,在页面中元素都一个隐含的属性叫做Block Formatting Context(块的格式化环境)简称BFC,该属性可以设置打开或者关闭,默认是关闭的
当开启元素的BFC以后,元素将会具有如下的特性:
1.父元素的垂直外边距不会和子元素重叠
2.开启BFC的元素不会被浮动元素所覆盖
3.开启BFC的元素可以包含浮动的子元素
如何开启元素的BFC
1.设置元素浮动
- 使用这种方式开启,虽然可以撑开父元素,但是会导致父元素的宽度丢失,而且使用这种方式也会导致下边的元素上移,不能解决问题
2.设置元素绝对定位
3.设置元素为inline-block
- 可以解决问题,但是会导致宽度丢失,不推荐使用这种方式
4.将元素的overflow设置为一个非visible的值
推荐方式:将overflow设置为hidden是副作用最小的开启BFC的方式
实现解决高度坍塌:
在代码中加入
overflow:hidden;
导航条
*{
margin:0;
padding:0;
}
设置ul
.nav{
list-style:none;
设置ul
.nav{
去除项目符号*
list-style:none;
为ul设置一个背景颜色
background-color:#6495ed;
设置一个宽度
在IE6中,如果为元素指定了一个宽度,则会默认开启hasLayout
width:1000px;
设置居中
margin:50px auto;
解决高度塌陷
overflow:hidden;
}
设置li
.nav li{
/*设置li向左浮动*/
float:left;
width:12.5%;
}
.nav a{
将a转换为块元素
display:block;
为a指定一个宽度
width:100%;
/*设置文字居中*/
text-align:center;
设置一个上下内边距
padding:5px 0;
去除下划线
text-decoration:none;
设置字体颜色
color:white;
设置加粗
font-weight:bold;
}
设置a的鼠标移入的效果
.nav a:hover{
background-color:#cc0000;
}
创建导航条的结构
<ul class='nav'>
<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>
运行结果:
清除浮动
清除浮动有三个可用的参数:
left:清除左侧浮动的元素
right:清除右侧浮动的元素
both:清除两侧浮动的元素
.box1{
width:100px;
height:100px;
background-color:yellow;
/*设置box1向左浮动*/
float:left;
清除box1浮动对box2的影响
float:right;
.box3{
width:300px;
height:300px;
background-color:skyblue;
clear:both;
}
<div class='box1'></div>
<div class='box2'></div>
<div class='box3'></div>
运行结果:
相对定位
定位分为四种,分别为:
static:默认值,元素没有开启定位
relative:开启元素的相对定位
absolute:开启元素的绝对定位
fixed:开启元素的固定定位(也是绝对定位的一种)
源代码:
.box1{
height:200px;
background-color:red;
position:relative;
}
.box2{
width:200px;
height:200px;
background-color:yellow;
position:relative;
left:100px;
top:200px;
}
.box3{
width:200px;
height:200px;
background-color:yellowgreen;
}
.s1{
position:relative;
width:200px;
height:200px;
background-color:yellow;
}
<div class='box1'></div>
<div class='box2'></div>
<div class='box3></div>
<span class='s1'>我是一个span</span>
代码实现:
网友评论