css04 float


title: CSS04 FLOW
date: 2022-07-21 00:09:16
tags: Flow 浮动

浮动介绍和特性

基本特性

​ 1.浮动元素就是脱离了文档流,不再占据文档流的位置
​ 2.浮动元素有三个值 none left right none就是没脱离 left是向左,right是向右
​ 3.浮动元素永远不会从父元素中脱离
​ 4.水平方向浮动元素永远都会在它前面的元素的右面,不会超过前面元素
​ 5.垂直方向浮动元素也永远都不会超过,最多就是平齐
​ 6.浮动元素前面有块元素的时候,无法超过块元素

<!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>
        /* 1.浮动元素就是脱离了文档流,不再占据文档流的位置
           2.浮动元素有三个值 none left right none就是没脱离 left是向左,right是向右
           3.浮动元素永远不会从父元素中脱离
           4.水平方向浮动元素永远都会在它前面的元素的右面,不会超过前面元素
           5.垂直方向浮动元素也永远都不会超过,最多就是平齐
           6.浮动元素前面有块元素的时候,无法超过块元素
        */
        .box{
            height: 200px;
            width: 200px;
            background-color: brown;
            float: none;
        }
        .box1{
            height: 200px;
            width: 200px;
            background-color: bisque;
            float:left;
        }
        .box2{
            height: 200px;
            width: 200px;
            background-color: red;
            float:left;
        }
        .box3{
            height: 200px;
            width: 200px;
            background-color: black;
            float:left;
        }
    </style>
</head>
<body>
    <span>span</span>
    <div class="box"></div>
    <div class="box1"></div>
    <div class="box2"></div>
    <div class="box3"></div>

</body>
</html>

其他特性

1.浮动元素不会盖住文字,可以利用浮动来设置文字环绕图片的效果

2.浮动元素浮动脱离文档流之后,不再遵循文档流特性

​ 块元素:1.块元素不再独占页面的一行

​ 2.脱离之后块元素的高度和宽度撑开

​ 行内元素:脱离之后就和块元素性质一样了

<!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>
        .box1{
            height:200px;
            width: 200px;
            background-color: bisque;
            float:left;
        }
        .box2{
            background-color: red;
            float:left;
            height:200px;
            width: 200px;
            
        }
        .box3{
            height:200px;
            background-color: #bfa;
        }
        span{
            width:200px;
            height:200px;
            background-color: #bfa;
            float:left;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <p>陌生的街

        鸽子的幽冥
        
        希伯来人如此称呼傍晚的开始
        
        此刻阴影尚未把脚步阻挡
        
        而黑夜的来临被察觉
        
        如期待中的一曲音乐,
        
        不是作为我们本质上无足轻重的一个象征。
        
        在那个光线微暗如沙的时辰
        
        我的脚步遇到一条不认识的街道,
        
        开向那高贵而宽阔的平台,
        
        在屋檐与墙亘间展现出
        
        温柔的色彩,仿佛那天空本身
        
        正在把背景震撼。
        
        一切——简朴房舍的真诚的平凡,
        
        矮柱和门环的戏谑,
        
        阳台上也许是一位少女的希望——
        
        深入我空虚的心
        
        有着一滴水的清澈。
        
        也许正是那唯一的时辰
        
        以魔力抬高了那条街道,
        
        赋予她温柔的特权,
        
        令它真实如一个传说或一行诗;
        
        无疑我感到了它远远地临近
        
        仿佛回忆,它精疲力尽
        
        只因是来自灵魂的深处。
        
        亲切而又刻骨铭心的
        
        是明朗街道的奇迹
        
        而只是在往后
        
        我才明白那地方与我无关,
        
        每一间房舍都是一台烛台
        
        芸芸众生在烛台上燃烧着孤单的火焰,
        
        而我们不假思索的每一步
        
        都在迈过别人的各各他。
        陌生的街

        鸽子的幽冥
        
        希伯来人如此称呼傍晚的开始
        
        此刻阴影尚未把脚步阻挡
        
        而黑夜的来临被察觉
        
        如期待中的一曲音乐,
        
        不是作为我们本质上无足轻重的一个象征。
        
        在那个光线微暗如沙的时辰
        
        我的脚步遇到一条不认识的街道,
        
        开向那高贵而宽阔的平台,
        
        在屋檐与墙亘间展现出
        
        温柔的色彩,仿佛那天空本身
        
        正在把背景震撼。
        
        一切——简朴房舍的真诚的平凡,
        
        矮柱和门环的戏谑,
        
        阳台上也许是一位少女的希望——
        
        深入我空虚的心
        
        有着一滴水的清澈。
        
        也许正是那唯一的时辰
        
        以魔力抬高了那条街道,
        
        赋予她温柔的特权,
        
        令它真实如一个传说或一行诗;
        
        无疑我感到了它远远地临近
        
        仿佛回忆,它精疲力尽
        
        只因是来自灵魂的深处。
        
        亲切而又刻骨铭心的
        
        是明朗街道的奇迹
        
        而只是在往后
        
        我才明白那地方与我无关,
        
        每一间房舍都是一台烛台
        
        芸芸众生在烛台上燃烧着孤单的火焰,
        
        而我们不假思索的每一步
        
        都在迈过别人的各各他。
        陌生的街

        鸽子的幽冥
        
        希伯来人如此称呼傍晚的开始
        
        此刻阴影尚未把脚步阻挡
        
        而黑夜的来临被察觉
        
        如期待中的一曲音乐,
        
        不是作为我们本质上无足轻重的一个象征。
        
        在那个光线微暗如沙的时辰
        
        我的脚步遇到一条不认识的街道,
        
        开向那高贵而宽阔的平台,
        
        在屋檐与墙亘间展现出
        
        温柔的色彩,仿佛那天空本身
        
        正在把背景震撼。
        
        一切——简朴房舍的真诚的平凡,
        
        矮柱和门环的戏谑,
        
        阳台上也许是一位少女的希望——
        
        深入我空虚的心
        
        有着一滴水的清澈。
        
        也许正是那唯一的时辰
        
        以魔力抬高了那条街道,
        
        赋予她温柔的特权,
        
        令它真实如一个传说或一行诗;
        
        无疑我感到了它远远地临近
        
        仿佛回忆,它精疲力尽
        
        只因是来自灵魂的深处。
        
        亲切而又刻骨铭心的
        
        是明朗街道的奇迹
        
        而只是在往后
        
        我才明白那地方与我无关,
        
        每一间房舍都是一台烛台
        
        芸芸众生在烛台上燃烧着孤单的火焰,
        
        而我们不假思索的每一步
        
        都在迈过别人的各各他。</p>
    <div class="box2"></div>
    <div class="box3">box3</div>
    <span>span</span>
</body>
</html>

高度塌陷问题的解决方案

高度塌陷的问题:

​ 在浮动布局中,父元素的高度默认是被子元素撑开的,但是子元素完全从文档流中脱离,导致父元素高度丢失。

​ 父元素高度丢失之后,下面的元素会自动上移,导致页面的布局混乱,所以高度塌陷是浮动布局中常见的问题,必须要处理。

BFC

基本特点

BFC(Border Flexing Context):当为元素设置BFC时,就可以理解为他们形成了一个独立的区块,BFC变成了一堵墙,隔离开了其他的各种元素。元素设置BFC时有三个特点:

  1. 元素设置BFC后,不会被浮动元素影响改变自己的布局
  2. 设置BFC后,父元素和子元素的外边距不再重合在一起,解决了父子元素的外间距折叠问题
  3. 设置BFC后,可以包含浮动元素

设置方式

BFC有三种设置方式:

  1. float:left 让父元素也一起浮动起来

    不建议使用,因为这样的话只是父元素可以被撑开而已,下面的元素还是会自动上移,而且父元素适配页面的宽度会丢失。

  2. display:inline-block 转换为行内块元素

    不建议使用,因为父元素适配页面的宽度会丢失

  3. overflow:hidden 设置一个除了visible以外的值

    建议使用

特点举例

三个特点分别举例:

特点1

开启之后不会被浮动元素覆盖

<!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>
        /*  1.开启之后不被浮动元素覆盖:box2原来会被box1覆盖,现在不会了  
        */
        .box1{
            height: 200px;
            width: 200px;
            background-color: antiquewhite;
            float: left;
        }
        .box2{
            height: 100px;
            width: 100px;
            background-color: aquamarine;
            overflow:hidden;
        }
    </style>
</head>
<body>
    <div class="box1"></div>
    <div class="box2"></div>
   
</body>
</html>
特点2

父元素和子元素的外边距不再重叠

<!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>
        /*  2.开启之后父元素和子元素的外边距不再重叠:box2原来设置margin,box1会跟着一起向下,现在不会了
        */
        .box1{
            height: 200px;
            width: 200px;
            background-color: antiquewhite;
            overflow:hidden;
        }
        .box2{
            height: 100px;
            width: 100px;
            background-color: aquamarine;
            margin:10px;
        }
    </style>
</head>
<body>
    <div class="box1">
    	<div class="box2"></div>
    </div>
</body>
</html>
特点3

可以包含浮动元素

<!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>
        /*  3.可以包含浮动元素:box1原来不会被box2撑开,现在会了,而且box1原本的width会被保留。
        */
        .box1{
            background-color: antiquewhite;
            overflow:hidden;
        }
        .box2{
            height: 100px;
            width: 100px;
            float:left;
            background-color: aquamarine;
        }
    </style>
</head>
<body>
    <div class="box1">
    	<div class="box2"></div>
    </div>
</body>
</html>

clear

基本特点

设置clear元素之后,可以让该块免受浮动元素的影响

三个属性:left,right,auto

left:减去左边浮动元素影响

right:减去左边浮动元素影响

auto:减去最大影响

原理

自动设置一个上外边距

高度塌陷最终解决方案

因为clear是自动设置一个上外边距,那么如果我们想要去除影响的话,可以给被影响高度塌陷的父元素最下面加一个块类子元素,再让该块类子元素不受之前所有浮动元素的影响,那么,该子元素就会增加一个上外边距,从而将高度塌陷的父元素撑开。

<!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>
        .box1{
            background-color: antiquewhite;
        }
        .box2{
            height: 100px;
            width: 100px;
            float:left;
            background-color: aquamarine;
        }
        /*  最下面加一个块类子元素,再让该块类子元素不受之前所有浮动元素的影响,那么,该子元素就会增加一个上外边距,从而将高度塌陷的父元素撑开。*/
        .box3{
            clear:both;
        }
    </style>
</head>
<body>
    <div class="box1">
    	<div class="box2"></div>
        <div class="box3"></div>
    </div>
</body>
</html>

但是,现在的问题是,我们在html中加入了一个新的div块,相当于改变了页面结构而非样式,这样就非常不健康。所以我们可以利用css中的伪元素::after,在父元素的最后一行加一个空内容,让这个空内容免受之前的影响。注意,伪元素是行内元素,需要转换为块。

<!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>
        .box1{
            background-color: antiquewhite;
        }
        .box2{
            height: 100px;
            width: 100px;
            float:left;
            background-color: aquamarine;
        }
         /*  利用css中的伪元素::after,在父元素的最后一行加一个空内容,让这个空内容免受之前的影响。注意,伪元素是行内元素,需要转换为块。*/
        .box1::after{
            content:'';
            display:block;
            clear:both;
        }
    </style>
</head>
<body>
    <div class="box1">
    	<div class="box2"></div>
        <div class="box3"></div>
    </div>
</body>
</html>

伪类解决父子外边距重叠问题

在父边距的第一行加个空table,隔开父元素和子元素

<!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>
        .box1{
            height: 200px;
            width: 200px;
            background-color: antiquewhite;
        }
        .box2{
            height: 100px;
            width: 100px;
            background-color: aquamarine;
            margin:20px;
        }
        .box1::before{
            content:'';
            display:table;
        }
    </style>
</head>
<body>
    <div class="box1">
    	<div class="box2"></div>
        <div class="box3"></div>
    </div>
</body>
</html>

添加clearfix类,用伪类同时解决父子外边距和高度塌陷问题

.clearfix::before, .clearfix::after{

​ content:" ";

​ display:table;

​ clear:both;

}

如果哪个父元素出现了高度塌陷和父子外边距问题,直接在类名中加上clearfix即可

<!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>
        .box1{
            background-color: antiquewhite;
        }
        .box2{
            height: 100px;
            width: 100px;
            background-color: aquamarine;
            margin:20px;
        }
        .box3{
            height: 200px;
            width: 200px;
            background-color: aquamarine;  
        }
        {
            content:'';
            display:table;
        }
          /* clearfix类 */
        .clearfix::before, .clearfix::after{
            content:"";
            display:table;
            clear:both;
}
    </style>
</head>
<body>
      /* box1加入clearfix */
    <div class="box1 clearfix">
    	<div class="box2"></div>
        <div class="box3"></div>
    </div>
</body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值