博客列表 >浮动,定位,文档流--2019年9月5号13点40分

浮动,定位,文档流--2019年9月5号13点40分

上善若水的博客
上善若水的博客原创
2019年09月05日 14:53:47626浏览

子元素浮动对父元素的影响以及如何消除这类浮动的影响

一个块级元素div里面嵌套一个div元素。子元素浮动时,父元素会塌陷 子元素没有浮动之前代码和实际浏览图如下

实例

<!DOCTYPE html>
<html lang="en">

<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>子元素浮动对父元素的影响</title>
    <!-- <link rel="stylesheet" href="static/css/demo2.css"> -->
    <style type="text/css">
        .main {
            width: 200px;
            border: 1px dashed green;
        }
        
        .box1 {
            width: inherit;
            height: 200px;
            background-color: lightblue;
        }
    </style>
</head>

<body>
    <div class="main">
        <div class="box1">
            子元素区块
        </div>
        <div class="clear"></div>
    </div>
</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

1567663182(1).jpg

子元素向左浮动,代码和浮动后实际情况

1567663253(1).jpg    1567663291(1).jpg

遇到这类问题不要慌,解决方法很多。方法如下:

一:给父元素添加 overflow:hidden; 此类方法简单有效,最常用,最直接。

隐藏溢出,当内容超过其父元素时,可以使用该属性和值将溢出的部分裁剪掉,使页面更加美观

清除浮动,当子元素浮动时,给父元素添加overflow:hidden,

按照它的第一个特性,应该将子元素超出的部分截掉,但是因为子元素有浮动,

无法裁剪,所有只能由父元素增加高度去包裹住子元素,使得父元素拥有了高度,

而这个高度是跟随子元素自适应的高度,这样就把浮动的子元素包含在父元素内了 

1567663624(1).jpg    1567663651(1).jpg

二:添加一个块级元素,并给此元素设置clear:both;清除浮动。

在很早之前用的就是这种解决办法,新建一个空的div,为这个div设置clear:both;

这样无疑是增加了无意义的标签,一个大型页面中,这种标签太多是不好的。 

<div class="clear"></div>
.clear{clear:both}

三:给父元素也添加float。这样让父元素与子元素一起脱离文档流浮动起来,保证子元素在父元素内,这样父元素就能自适应子元素的高度,但是此方法有一弊端,一定会影响父元素之后的元素排列,甚至影响布局。

四:给父元素一个固定高度,此方法适用于子元素高度已知并且固定的情况。

除了以上四种还有很多方法可以去除子元素的浮动对父元素的影响,比如说还有伪类。但是第一种方法是大家最为常用的们也是最有效的,最致命的,最简单的。

定位

定位:将元素在页面中重新排列

四大定位:1.静态定位,static,文档流定位,流动布局。

2.相对定位,relative,元素仍在文档流中,只是相对他原来的位置发生位移

3.绝对定位,absolute,元素脱离文档流,相对于离他最近的,具有定位属性的父级元素进行定位。

4.固定定位,fixed,始终相对于浏览器的窗口进行定位

使用绝对定位和浮动定位实现网页三列布局

1-1浮动定位

让左右两边部分浮动,脱离文档流后对中间部分使用margin来自适应

基本思路:

    1.左右两列采用浮动加上宽度

    2.间区域实际上margin挤出来的

    3.dom顺序不能乱,必须先写左右两列,然后书写中间主体部分

实例

<!DOCTYPE html>
<html lang="en">

<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>使用浮动实现三列布局</title>
    <style type="text/css">
        .left {
            height: 500px;
            width: 200px;
            background-color: #3fed;
            float: left;
        }
        
        .right {
            height: 500px;
            width: 200px;
            background-color: #7ace;
            float: right;
        }
        
        .main {
            background-color: pink;
            margin-left: 210px;
            margin-right: 210px;
            height: 500px;
        }
    </style>
</head>

<body>
    <!-- <h4>基本思路:</h4>
    <p>左右两列采用浮动加上宽度</p>
    <p>中间区域实际上margin挤出来的</p>
    <p>dom顺序不能乱,必须先写左右两列,然后书写中间主体部分</p> -->
    <div class="left">左侧</div>
    <div class="right">右侧</div>
    <div class="main">主体</div>
</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

1-2使用绝对定位是实现网页三列布局

左右两栏选择绝对定位,固定于页面的两侧,中间的主体选择用margin确定位置

实例

<!DOCTYPE html>
<html lang="en">

<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>三列布局使用绝对定位</title>
    <style type="text/css">
        .container {
            position: absolute;
            left: 0;
            right: 0;
        }
        
        .left {
            width: 200px;
            height: 600px;
            background-color: green;
            position: absolute;
            top: 0;
            left: 0;
        }
        
        .right {
            width: 200px;
            height: 600px;
            background-color: lightcoral;
            position: absolute;
            top: 0;
            right: 0;
        }
        
        .main {
            height: 600px;
            background-color: lightseagreen;
            margin-left: 210px;
            margin-right: 210px;
        }
    </style>
</head>

<body>

    <div class="container">
        <div class="left">左侧</div>
        <div class="right">右侧</div>
        <div class="main">主体</div>
    </div>
</body>

</html>

运行实例 »

点击 "运行实例" 按钮查看在线实例

总结:浮动和定位,看似简单,但是在实际运用中出现问题时还是很棘手的,。浮动和定位既是挑战有时助推器。浮动和定位在css中不可或缺。我们不仅要掌握他们,还要会合理运用。没事就要敲代码,多善用他们。








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