博客列表 >演示如何消除子元素浮动造成的父元素高度折叠与三列布局的实现2019-09-04

演示如何消除子元素浮动造成的父元素高度折叠与三列布局的实现2019-09-04

风吹的博客
风吹的博客原创
2019年09月09日 17:35:29727浏览

在写作业之前,先交代一下相关概念的理解。

不管是浮动还是绝对定位都是为了使html元素脱离文档流,从而达到控制元素布局的手段。元素一旦脱离文档流,就将此元素认作是块(想象是一个方块)。

文档流:html元素在浏览器中按一定顺序的排放。(从左到右,从上到下,先显示写在前面的元素,再展示后面的元素)

浮动只能控制元素在水平方向上的移动,在垂直方向上看,仍在文档流中、浮动一个元素,不会对此元素之前的元素产生影响,影响的是浮动元素之后的元素。简单理解就是,后面未浮动元素会占据已浮动元素之前的位置。

浮动:{flow:right或者left;}

  1. 演示子元素浮动对父级元素高度折叠的影响

代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link href="style6.css" rel="stylesheet">
    <title>Title</title>
</head>
<body>
<div class="box1">
<div class="box2">
</div>
</div>
</body>
</html>

css代码:

.box1{width: 200px;border: 5px dashed lightcoral;}
.box2{width: inherit; height: 300px; background: aqua;}

此时未设置浮动,效果如下:

未浮动.png

子元素刚好被父级元素给包裹

当设置浮动后:

css代码:

.box1{width: 200px;border: 5px dashed lightcoral;}
.box2{width: inherit; height: 300px; background: aqua;}
/*设置浮动*/
.box2{float: left;}

浮动.png

我们此时发现1.父级元素再也包裹不住子元素了,有些边框线没了。2.观察画圈部分发现子元素此时是压着父元素的,换句话说,此时浮动了的子元素,翅膀硬了,不仅不听父级元素话了,还站在了父级元素脸上。我们将这种不好的行为在此称作是:子元素浮动造成父级元素高度折叠(坍塌)。父级元素为了教化子元素,需要一段代码,来清除这种现象,就是 float: left

清除的css代码:

.box1{width: 200px;border: 5px dashed lightcoral;}
.box2{width: inherit; height: 300px; background: aqua;}
/*设置浮动*/
.box2{float: left;}
/*清除浮动*/
.box1{overflow: hidden;}

效果图:

清除浮动.png

注意:此刻子元素依旧浮动,只是没有造成父元素高度折叠。(翅膀依旧硬,但是没有站在脸上了)

接下来先来了解定位。定位分为四种:静态定位,相对定位,绝对定位,固定定位。

即将用到的绝对定位(absolute),不仅使元素脱离了文档流,还使元素可以在水平,垂直上进行移动。(浮动只能水平移动)

绝对定位使用前,必须确定一个参照物,对元素的移动都是参照 参照物的位置进行的。默认为body,可以设置父级元素进行参考。

2.演示三列布局的两种方法(绝对定位和浮动)

绝对定位:

html代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link href="style7.css" rel="stylesheet">
    <title>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代码

/*对每个块进行修饰*/
.container{width:1000px;margin:0 auto}
.header,.footer{height: 60px;background-color: aqua;}
.main{background: lightcoral;margin: 5px auto;}
.left{width: 200px;min-height:800px;background-color:cornflowerblue;}
.content{min-height: 800px;background-color: red;}
.right{width: 200px; min-height: 800px;background-color: chocolate;}
/*绝对定位的信息*/
.main{position: relative;}
.left{position: absolute;left: 0;top: 0;}
.right{position: absolute;right: 0;top: 0;}
.content{margin-left: 200px;margin-right: 200px;}

效果图:

三列布局之绝对定位.png

特别说明:我们只对left和right进行了绝对定位,内容区域的出现是因为设置了,margin-left和margin-right。

浮动:

html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <link href="style7.css" rel="stylesheet">
    <title>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:

/*对每个块进行修饰*/
.container{width:1000px;margin:0 auto}
.header,.footer{height: 60px;background-color: aqua;}
.main{background: lightcoral;margin: 5px auto;overflow: hidden;}
.left{width: 200px;min-height:800px;background-color:cornflowerblue;}
.content{min-height: 800px;background-color: red;}
.right{width: 200px; min-height: 800px;background-color: chocolate;}
/*浮动的信息*/
.left{float:left;}
.right{float:right;}
.content{float: left;width:600px;}

进行了浮动,记得要清除浮动对其他元素的影响、

浮动效果图.png


声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议