CSS 去除浮动的方法

随笔记一下 一个浮动的元素 如果没有设置宽高 将会自动收缩为文字的宽高 脱标 贴边 字围 收缩

浮动有开始 就要有清除

<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>
    <style type="text/css">
        li {
            float: left;
            width: 100px;
            height: 40px;
            background-color: gold;
        }
    </style>
</head>
<body>
    <div>
            <ul>
            <li>HTML</li>
            <li>CSS</li>
            <li>JS</li>
            <li>HTML5</li>
            <li>OC</li>
        </ul>
    </div>
    <div>
        <ul>
            <li>swift</li>
            <li>java</li>
            <li>PHP</li>
        </ul>
    </div>
    
</body>
</html>

效果

可以看到div作为一个块级元素 竟然没有两行显示 第二个div中的li去贴第一个div的边了

可以看到浮动和浮动之间还是有关系的(第二个div中的li去贴第一个div的边了)

原因就是div没有设置高度 不能给自己浮动的‘孩子们’一个容器

所以一个元素要浮动 那么他的父亲一定要有高度.

那么可以知道,清除浮动的第一个方法就是 盒子有高度(可以清除浮动与浮动之间的影响) 即给浮动的元素的祖先加高度

只要浮动在一个有高度的盒子中,那么这个浮动就不会影响后面的浮动元素

网页制作中,高度height很少出现,因为能被内容撑高!

清除浮动方法二

clear both 分为 clear:left clear:right

<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>
    <style type="text/css">
        li {
            float: left;
            width: 100px;
            height: 40px;
            background-color: gold;
            list-style: none;
        }
        .box1 {
            clear: both;
        }
    </style>
</head>
<body>
    <div>
            <ul>
            <li>HTML</li>
            <li>CSS</li>
            <li>JS</li>
            <li>HTML5</li>
            <li>OC</li>
        </ul>
    </div>
    <div class="box1">
        <ul>
            <li>swift</li>
            <li>java</li>
            <li>PHP</li>
        </ul>
    </div>
    
</body>
</html>

效果 

可以看到清除了浮动(两个浮动之间的影响被清除了)

但是这个方法有一个致命的缺陷 margin在视觉上失效了

清除浮动方法三

隔墙法(外墙)

也是使用clear both 但是位置有变化

<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>
        <style type="text/css">
       * {
          margin:0px;
          padding:0px;
       }
li { float: left; width: 100px; height: 40px; background-color: gold; list-style: none; text-align: center; } .cl { clear: both; } /* .h { height: 0px; } */ </style> </head> <body> <div class="box1"> <ul> <li>HTML</li> <li>CSS</li> <li>JS</li> <li>HTML5</li> <li>OC</li> </ul> </div> <div class="cl h"></div> <div class="box2"> <ul> <li>swift</li> <li>java</li> <li>PHP</li> </ul> </div> </body> </html>

注意clear both的位置,.h可以控制间距

内墙法

<style type="text/css">
        * {
            margin: 0px;
            padding: 0px;
        }
        li {
            float: left;
            width: 100px;
            height: 40px;
            background-color: gold;
            list-style: none;
            text-align: center;
        }
        .cl {
            clear: both;
        }
        .h {
            height: 10px;
        }
       
 </style>

<body>
    <div class="box1">
        <ul>
            <li>HTML</li>
            <li>CSS</li>
            <li>JS</li>
            <li>HTML5</li>
            <li>OC</li>
        </ul>
        <div class="cl h"></div>
    </div>
    
    <div class="box2">
        <ul>
            <li>swift</li>
            <li>java</li>
            <li>PHP</li>
        </ul>
    </div>
    
</body>

一个父亲是不能被浮动的儿子撑出高度的

内墙法比外墙法的好处是 可以撑出父亲的高度 

overflow:hidden

<!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>Document</title>
    <style type="text/css">
        *{
            margin: 0;
            padding: 0;
        }
        div.news {
            width: 500px;
            height: 300px;
            border: 1px solid blue;
            margin: 100px;
        }
        ul {
            list-style: none;
        }
        li {
            border-bottom: 1px dashed gray;
            /* 和加内墙的效果一样 可取其中一种 */
            overflow: hidden;
        }
        .news ul li span.title {
            float: left;
        }
        .news ul li span.date {
            float: left;
            margin-left: 35px;
        }
        /* .cl {
            clear: both;
        }
        .h {
            height: 5px;
        } */


    </style>
</head>
<body>
    <div class="news">
        <ul>
            <li>
                <span class="title">嘻嘻嘻嘻嘻嘻嘻</span>
                <span class="date">2019-07-06</span>
                <!-- <div class="cl h"></div> -->
            </li>
            <li>
                <span class="title">嘻嘻嘻嘻嘻嘻嘻</span>
                <span class="date">2019-07-06</span>
                <!-- <div class="cl h"></div> -->
            </li>
            <li>
                <span class="title">嘻嘻嘻嘻嘻嘻嘻</span>
                <span class="date">2019-07-06</span>
            </li>
        </ul>
    </div>
    
</body>
</html>

https://www.jianshu.com/p/7e04ed3f4bea

总结

1 浮动的元素只能被有高度的盒子关注,也就是说,如果盒子内部有浮动,那么这个盒子有高,那么浮动不会相互影响。但是工作中我们绝不护给所有的饿盒子加高度,因为麻烦,并且不能适应页面的快速变化。

2.最简单的清除盒子的方法 给盒子添加 clear both 表示盒子内部的元素不受其他盒子的影响 但是margin 会失效 两个盒子之间会没有间隙

3.隔墙法(外墙) 和 (内墙)

内墙法的有点 不仅可以清除浮动间的影响,并且能撑出所在盒子的高度

4. overflow:hidden 这个属性的本意是将所有溢出盒子的内容隐藏掉,但是 我们发现这个东西可以用于浮动的清除,我们知道一个父亲不能被浮动的儿子撑出高度,但是加了这个属性,父亲就会被浮动的儿子撑出高度。能让margin生效

原文地址:https://www.cnblogs.com/huanying2000/p/11135910.html