CSS浮动

在了解什么是浮动之前,我们需要知道什么是标准流

标准流:又称文档流,是浏览器在渲染显示网页内容时默认采用的一套排版规则

常见的标准流排版规则:

  • 块级元素:从上到下,垂直分布,独占一行
  • 行内元素或行内块元素:从左往右,水平布局,空间不够自动换行

标准流浮动都是传统的网页布局方式,都是用来把盒子摆放到合适的位置

浮动的早期作用时图文环绕 现在则用于网页布局

浮动的特点

  1. 浮动元素会脱离标准流(简称:脱标),在标准流中不占位置(相当于从地面飘到了空中)
  2. 浮动元素比标准流高半个级别,可以覆盖标准流中的元素
  3. 浮动找浮动。下一个浮动会在上一个浮动上面
  4. 浮动元素有特殊的显示设置
  • 一行可以显示多个
  • 可以设置宽高

注意:浮动的元素不能使用text-align:center或者margin: 0 auto

下面我们来体验一下浮动的用法:

浮动的语法:

float:属性值;

float: none;   #无浮动
float: left;   #元素向左浮动
float: right;   #元素向右浮动

我们只使用标准流是无法实现块级元素无缝隙排列的

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            
            width: 100px;
            height: 200px;
            background-color: pink;
            display: inline-block;
        }
    </style>
</head>
<body>
    <div>1</div>
    <div>2</div>
    <div>3</div>
</body>
</html>

此时的块级元素中间会有间隙


        div {
            float: left; 
            width: 100px;
            height: 200px;
            background-color: pink;
            display: inline-block;
        }
 

 而当把盒子布局改为浮动时,此时的盒子排列形式是这样的

 当我们在使用浮动时,如果父级宽度不够 时,子级会自动换行

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        div {
            width: 200px;
            height: 100px;
            background-color: skyblue;
        }
        li {
            display: inline-block;
            width: 50px;
            height: 40px;
            background-color: greenyellow;
        }
    </style>
</head>
<body>
    <div class="fu">
       <li></li>
       <li></li>
       <li></li>
       <li></li>
       <li></li>
       <li></li>
    </div>
</body>
</html>

 盒子布局受浮动的影响

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .top {
            width: 1000px;
            background-color: pink;
        }
        .bottom {
            width: 1000px;
            height: 50px;
            background-color: green;
        }
        .right {
            float: right;
            width: 200px;
            height: 300px;
            background-color: #ccc;
        }
        .left {
            float: left;
            width: 790px;
            height: 300px;
            background-color: skyblue;
        }
    </style>
</head>
<body>
    <!-- 父子级标签,子级浮动,父级没有高度 ,后面的标准流盒子会受到影响-->
    <div class="top">
        <div class="right"></div>
        <div class="left"></div>
    </div>
    <div class="bottom"></div>
</body>
</html>

 

 此时粉色盒子消失不见,给父级盒子加高会规避浮动带来的影响,但是有些情况下时不能加高的

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .top {
            width: 1000px;
             /* 加高会规避问题的出现,但有的时候不能加高 */
            height: 300px;
            background-color: pink;
        }
        .bottom {
            width: 1000px;
            height: 50px;
            background-color: green;
        }
        .right {
            float: right;
            width: 200px;
            height: 300px;
            background-color: #ccc;
        }
        .left {
            float: left;
            width: 790px;
            height: 300px;
            background-color: skyblue;
        }
    </style>
</head>
<body>
    <!-- 父子级标签,子级浮动,父级没有高度 ,后面的标准流盒子会受到影响-->
    <div class="top">
        <div class="right"></div>
        <div class="left"></div>
    </div>
    <div class="bottom"></div>
</body>
</html>

 如此如果元素浮动了,此时子级元素不能撑开标准流的块级元素,之所以会出现这种状况是因为自己元素浮动后脱标(不占位置)

因此我们需要消除浮动的影响,即父级有高度,从而不影响其他网页元素的布局

清除浮动的方法

1.直接设置父级元素

优点:简单粗暴,方便

缺点:有些布局不能固定父级元素高度。如:新闻列表,京东推荐模块

2.额外标签法

 操作:

  1. 在父级元素内容的最后添加一个块级元素
  2. 给添加的块级元素设置chear:both

缺点:会在页面添加额外的标签,会让页面的HTML结构变得复杂

 

 .clearfix {
            /* 清楚左右浮动的影响 */
            clear: both;
        }
        /* 加clear后,父级的高会被撑回来 */

3.单伪元素清除法

 操作:基本写法

.clearfix::after{
    content: "";
    display:block;
    clear:both;
}

特点:

项目中使用,直接给标签加类即可消除浮动


        /* 单位元素清除浮动 和 额外标签法的原理是一样的 */
        .clearfix::after {
            content: "";
            /* 伪元素添加的标签是行内,需要改为块 */
            display:block;
            clear: both;
            /* 为了兼容性 */
            height: 0;
            visibility: hidden;
        }
    

 

 4.双伪元素清除法

操作:

        .clearfix::before,
        .clearfix::after {
            content: "";
            display: table;
        }

特点:

项目中使用,直接给标签加类即可清除浮动

 


        /* 清除浮动 */
        /* .clearfix::before,
        .clearfix::after 

        解决外边距塌陷问题
        外边距塌陷:父级级标签,都是块级,子级加margin会影响父级的位置*/
        .clearfix::before,
        .clearfix::after {
            content: "";
            display: table;
        }
        /* 真正清除标签 */
        .clearfix::after {
            clear: both;
        }
   

 5.给父级元素设置overflow:hidden

操作:

直接给父级标签设置overflow:hidden

 

.top {
            width: 1000px;
            /* 加高会规避问题的出现,但有的时候不能加高 */
            /* height: 300px; */
            background-color: pink;
            /* 给父级添加overflow:hidde */
            overflow: hidden; 
     }
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值