CSS学习-浮动及清除浮动

一、什么是浮动?

在了解什么是浮动之前我们先了解一下html元素在标准流排列方式。在标准流中,元素是按照它在 HTML 中出现的先后顺序自上而下依次排列布局的,在排列过程中所有的行内元素水平排列,直到当行被占满然后换行,块级元素则会被渲染为一整行。

常见标准流排版规则:

1. 块级元素:从上往下,垂直布局,独占一行
2. 行内元素:从左往右,水平布局,空间不够自动折行

二、浮动的作用

➢ 早期的作用:图文环绕

➢ 现在的作用:网页布局

场景:让垂直布局的盒子变成水平布局,如:一个在左,一个在右。

三、浮动的代码

➢ 属性名:float
➢ 属性值:

  • flaot:left;(左浮动)
  • flaot:right;(右浮动)

四、浮动的特点

1. 浮动元素会脱离标准流(简称:脱标),在标准流中不占位置
• 相当于从地面飘到了空中
2. 浮动元素比标准流高半个级别,可以覆盖标准流中的元素
3. 浮动找浮动,下一个浮动元素会在上一个浮动元素后面左右浮动
4. 浮动元素有特殊的显示效果
• 一行可以显示多个
• 可以设置宽高
➢ 注意点:
• 浮动的元素不能设置text-align:center或者margin:0 auto

五、清除浮动 - 使用 clear

原因:清除浮动主要是为了解决,父元素因为子级元素浮动引起的内部高度为0的问题(盒子塌陷)

1.例如:父盒子设置一个boder,内部放两个盒子一个big 一个small,未给big和small设置浮动,则他们会默认撑开父盒子。

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>浮动及清除浮动</title>
    <style>
        .contain{
            border: 2px solid red;
            width: 800px;
        }
        .big{
            width: 500px;
            height: 200px;
            background-color: aqua;
        }
        .small{
            width: 200px;
            height: 100px;
            background-color: blue;
        }

    </style>
</head>
<body>
	<div class="contain">
        <div class="big">大盒子</div>
        <div class="small">小盒子</div>
    </div>
</body>
</html>

2.当给里面的两个盒子都加浮动属性:父盒子因为没设置高度,变成一条线,big和small都左浮动并排显示。

 总结:

当父元素不给高度的时候,内部元素不浮动时会撑开,而浮动的时候,父元素变成一条线。

清除浮动的方法(最常用的4种):

1.额外标签法(在最后一个浮动标签后,新加一个标签,给其设置clear:both;)(不推荐)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>浮动及清除浮动</title>
    <style>
        .contain{
            border: 2px solid red;
            width: 800px;
        }
        .big{
            width: 500px;
            height: 200px;
            background-color: aqua;
            float: left;
        }
        .small{
            width: 200px;
            height: 100px;
            background-color: blue;
            float:left;
        }
        .clear{
            clear: both;
        }

    </style>
</head>
<body>
	<div class="contain">
        <div class="big">大盒子</div>
        <div class="small">小盒子</div>
        <div class="clear">额外标签方法进行清除浮动</div>
    </div>
</body>
</html>

优点:通俗易懂,方便。

缺点:添加无意义标签,语义化差。

2.父级添加overflow属性(父元素添加overflow:hidden)(不推荐)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>浮动及清除浮动</title>
    <style>
        .contain{
            border: 2px solid red;
            width: 800px;
            overflow: hidden;
        }
        .big{
            width: 500px;
            height: 200px;
            background-color: aqua;
            float: left;
        }
        .small{
            width: 200px;
            height: 100px;
            background-color: blue;
            float:left;
        }
        

    </style>
</head>
<body>
	<div class="contain">
        <div class="big">大盒子</div>
        <div class="small">小盒子</div>
    </div>
</body>
</html>

优点:代码简洁。

缺点:内容增多的时候容易造成不会自动换行导致内容被隐藏掉,无法显示要溢出的元素。

3.使用after伪元素清除浮动(推荐使用)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>浮动及清除浮动</title>
    <style>
        .contain{
            border: 2px solid red;
            width: 800px;
            overflow: hidden;
        }
        .clearfix:after{/*伪元素是行内元素 正常浏览器清除浮动方法*/
        content: "";
        display: block;
        height: 0;
        clear:both;
        visibility: hidden;
    }
        .clearfix{
            *zoom: 1;/*ie6清除浮动的方式 *号只有IE6-IE7执行,其他浏览器不执行*/
        }
        .big{
            width: 500px;
            height: 200px;
            background-color: aqua;
            float: left;
        }
        .small{
            width: 200px;
            height: 100px;
            background-color: blue;
            float:left;
        }
        

    </style>
</head>
<body>
	<div class="contain clearfix">
        <div class="big">大盒子</div>
        <div class="small">小盒子</div>
    </div>
</body>
</html>

优点:符合闭合浮动思想,结构语义化正确。

缺点:ie6-7不支持伪元素:after,使用zoom:1触发hasLayout。

4.使用before和after双伪元素清除浮动(强烈推荐)

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>浮动及清除浮动</title>
    <style>
        .contain{
            border: 2px solid red;
            width: 800px;
            overflow: hidden;
        }
        .clearfix:after,.clearfix:before{
        content: "";
        display: table;
    }
        .clearfix:after{
            clear: both;
        }
        .clearfix{
            *zoom: 1;
        }
        .big{
            width: 500px;
            height: 200px;
            background-color: aqua;
            float: left;
        }
        .small{
            width: 200px;
            height: 100px;
            background-color: blue;
            float:left;
        }
        

    </style>
</head>
<body>
	<div class="contain clearfix">
        <div class="big">大盒子</div>
        <div class="small">小盒子</div>
    </div>
</body>
</html>

优点:代码更简洁。

缺点:用zoom:1触发hasLayout。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wanglingli95

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值