float 布局快速入门


一、float概述

二、浮动初探

三、float坍塌问题

一、float概述

浮动(float)是CSS布局常用的一个属性。它可以左右移动,直至它的外边缘碰到包含框或另一个浮动框的外边框。

**float被设计出来的初衷是用于文字环绕效果。**如下代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body{
            margin:0px;
        }
 
        #div1{
            width:100px;
            height:100px;
            border:2px solid red;
            float:left;
        }
        #father{
            background-color:green;
        }
    </style>
</head>
<body>
    <div id="father">
        <div id="div1"><span>块1</span> 暂无float:left</div>
        <div id="div1"><span>块2</span> 暂无float:left</div>
        <div id="div1"><span>块3</span> 暂无float:left</div>
    </div>
</body>
</html>

效果如下:

float 布局快速入门

浮动会脱离文档流,当一个元素浮动之后,不会影响到块级元素的布局而只会影响内联元素(通常是文本)的排列,文档中的普通流就表现得如同浮动框不存在一样。

二、浮动初探

既然上面说到了元素浮动后会脱离文档流,那么就来看一下效果:

float 布局快速入门

float 布局快速入门

右图是浮动后的效果,设置div2浮动后,div3就会占用原来div2的位置。

三、float坍塌问题

这样一个场景:当div(father)里面包含其他几个div(child),且father没有设置高度,child没有浮动时,father的div是可以看到。但是,当child设置成float后,我们会发现father不见了,这就是坍塌问题。

float 布局快速入门

float 布局快速入门

右边是将child设置成float:left之后的效果。

代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        body{
            margin:0px;
        }
 
        #div1{
            width:100px;
            height:100px;
            border:2px solid red;
            float:left;
        }
        #father{
            background-color:green;
        }
    </style>
</head>
<body>
    <div id="father">
        <div id="div1"><span>块1</span> 暂无float:left</div>
        <div id="div1"><span>块2</span> 暂无float:left</div>
        <div id="div1"><span>块3</span> 暂无float:left</div>
    </div>
</body>
</html>

坍塌解决办法:

float 布局快速入门

1、添加一个child元素,并设置clear:both;

.clear{
           clear:both;
           }
 
<div id="father">
       <div id="div1"><span>块1</span> float:left</div>
       <div id="div1"><span>块2</span> float:left</div>
       <div id="div1"><span>块3</span> float:left</div>
       <div class="clear"></div>
   </div>

原理:

给空元素设置clear后,因为它的左右两边不能有任何浮动元素,所以空元素下移到浮动元素下方。而空元素又包含在父块中,相当于把父块撑开了,视觉上起到了父块包含浮动元素的效果。

优点:简单,代码少,浏览器兼容性好。

缺点:需要添加大量无语义的html元素,代码不够优雅,后期不容易维护。不推荐使用。

2、给father设置CSS样式:overflow:hidden;

#father{
            background-color:green;
             overflow:hidden;
        }

原理:

给浮动元素的容器添加overflow:hidden;或overflow:aoto;可以使浮动元素回到容器层内,清除浮动。

3、给浮动元素的容器添加浮动

#father{
           background-color:green;
            float:left;
       }

原理:

给浮动元素的容器(父元素)也添加上浮动属性即可清除浮动,但是这样会使下一个元素收到这个浮动元素的影响,影响整体布局,不推荐使用。

4、使用CSS的:after伪元素

.clearfix:after {
            content:"111";
            clear:both;
            display:block;
            visibility:hidden;
             height:0;
        }

:after伪元素(注意这不是伪类,而是伪元素,代表一个元素之后最近的元素)。

给浮动元素的容器添加一个clearfix的class,然后给这个class添加一个:after伪元素实现元素末尾添加一个看不见的块元素清理浮动。

原理:

1、通过伪元素添加一个块元素

2、伪元素设置clear:both后,类似于解决方法1,空元素下移到浮动元素下方。

3、但是新增的内容被hidden了,且高度设置为0,所以111时看不到的。


上一篇:基于并查集的六度分隔理论的验证与实现


下一篇:题解 P1197 【[JSOI2008]星球大战】