实例演示如何消除子元素浮动造成父元素高度折叠的影响
元素的水平方向浮动,意味着元素只能左右移动而不能上下移动。
一个浮动元素会尽量向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。
浮动元素之后的元素将围绕它。
浮动元素之前的元素将不会受到影响。
如果图像是右浮动,下面的文本流将环绕在它左边:
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <link rel="stylesheet" href="static/CSS/style.css"> </head> <body> <div class="box1"> <div class="box2">子元素</div> </div> </body> </html>
点击 "运行实例" 按钮查看在线实例
.box1 {
width: 300px;
border: 5px dashed red
}
.box2 {
width: inherit;
/*300px*/
height: 300px;
background-color: lightblue;
float: left;
}点击 "运行实例" 按钮查看在线实例
运行结果:

子元素脱离文档流,父元素无法包裹住子元素。
具体解决方法:
直接给父元素设定height属性
.box1 {
width: 300px;
height: 300px;
border: 5px dashed red
}
.box2 {
width: inherit;
/*300px*/
height: 300px;
background-color: lightblue;
float: left;
}点击 "运行实例" 按钮查看在线实例
运行结果:

2.父元素设置overflow属性值–auto|hidden
.box1 {
width: 300px;
overflow: hidden;
border: 5px dashed red
}
.box2 {
width: inherit;
/*300px*/
height: 300px;
background-color: lightblue;
float: left;
}点击 "运行实例" 按钮查看在线实例

BFC的布局规则
1、浮动的元素会被父级计算高度(父级触发了BFC)
2、非浮动元素不会覆盖浮动元素的位置(非浮动元素触发了BFC)
3、margin不会传递给父级(父级触发了BFC)
4、两个相邻的元素上下margin不会重叠(给其中一个元素添加一个单独的父级,然后让他的父级触发了BFC)
触发BFC的方式(以下任意一条就可以)
1、float的值不为none
2、overflow 除了 visible 以外的值(hidden,auto,scroll)
3、display的值为table-cell、table-caption和inline-block之一
4、绝对定位元素,position(absolute,fixed);
2. 实例演示三列布局的实现原理( 绝对定位实现, 浮动定位实现)
2.1绝对定位实现:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="static/css/style.css"> <title>三列布局: 绝对定位</title> </head> <body> <div class="container"> <div class="header">头部</div> <!-- 主体部分分三列布局--> <div class="main"> <div class="left">左侧</div> <div class="content">内容区</div> <div class="right">右侧</div> </div> <div class="footer">底部</div> </div> </body> </html>
点击 "运行实例" 按钮查看在线实例
/*页面容器*/
.container {
width: 1000px;
margin: 0 auto;
}
/*头部与底部共用样式*/
.header,
.footer {
height: 60px;
background-color: lightgrey;
}
/*主体*/
.main {
/*min-height: 800px;*/
margin: 5px auto;
background-color: lightblue;
}
/*主体三部分的基本样式*/
.left {
width: 200px;
/*设置最小高度,可以确保在没有内容的情况下,仍能显示出高度来*/
min-height: 800px;
background-color: lightgreen;
}
.content {
/*内容区宽度自适应*/
min-height: 800px;
background-color: lightseagreen;
}
.right {
width: 200px;
min-height: 800px;
background-color: lightpink;
}
/*方案1: 绝对定位*/
/*定位父级*/
.main {
position: relative;
}
.left {
position: absolute;
left: 0;
top: 0;
}
.right {
position: absolute;
right: 0;
top: 0;
}
/*用外边距margin,挤出中间内容区*/
.content {
margin-left: 210px;
margin-right: 210px;
}点击 "运行实例" 按钮查看在线实例
运行结果:

2.2 浮动
/*页面容器*/
.container {
width: 1000px;
margin: 0 auto;
}
/*头部与底部共用样式*/
.header,
.footer {
height: 60px;
background-color: lightgrey;
}
/*主体*/
.main {
/*min-height: 800px;*/
margin: 5px auto;
background-color: lightblue;
}
/*主体三部分的基本样式*/
.left {
width: 200px;
min-height: 800px;
background-color: lightgreen;
}
.content {
/*内容区宽度自适应*/
min-height: 800px;
background-color: lightseagreen;
}
.right {
width: 200px;
min-height: 800px;
background-color: lightpink;
}
/*方案2: 浮动*/
/*左侧左浮动*/
.left {
float: left;
}
/*右侧右浮动*/
.right {
float: right;
}
/*内容区设置*/
.content {
float: left;
width: 580px;
margin-left: 10px;
}
/*清除子元素浮动影响*/
.main {
overflow: hidden;
}点击 "运行实例" 按钮查看在线实例
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="static/css/style.css"> <title>三列布局: 绝对定位</title> </head> <body> <div class="container"> <div class="header">头部</div> <!-- 主体部分分三列布局--> <div class="main"> <div class="left">左侧</div> <div class="content">内容区</div> <div class="right">右侧</div> </div> <div class="footer">底部</div> </div> </body> </html>
点击 "运行实例" 按钮查看在线实例
运行结果:

CSS 选择器和布局还是不怎么熟练,希望在以后实战中多多实战下。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号