CSS浮动详解

**1.**浮动的简介

浮动是用来实现文字环绕图片效果的

2.元素浮动后会有哪些影响

对兄弟元素的影响: 后面的兄弟元素,会占据浮动元素之前的位置,在浮动元素的下面;对前面的兄弟 无影响。
对父元素的影响: 不能撑起父元素的高度,导致父元素高度塌陷;但父元素的宽度依然束缚浮动的元 素。

css 复制代码
<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>浮动产生的影响</title>
    <style>
        .outer{
            width: 500px;
            background-color: gray;
            border: 1px solid black;
        }
        .box{
            width: 100px;
            height: 100px;
            background-color: aqua;
            border: 1px solid black;
            margin: 5px;
        }

        /* 对父元素的影响: 不能撑起父元素的高度,
        导致父元素高度塌陷;但父元素的宽度依然束缚浮动的元
        素。 */
        .box1,.box2,.box3{
            float: left;
        }

    </style>
</head>
<body>
    <div class="outer">
            <!-- 对前面的兄弟无影响 -->
        <!-- <div class="box box0">0</div> -->
        <div class="box box1">1</div>
        <div class="box box1">2</div>
        <div class="box box1">3</div>
        <!-- 对后面的有影响 -->
         <!-- 123都浮动了,4在1后面,但是文字随图片浮动在下面 -->
        <!-- <div class="box box4">4</div> -->
    </div>
    
</body>
</html>

**对父元素的影响:**不能撑起父元素的高度,导致父元素高度塌陷;但父元素的宽度依然束缚浮动的元 素。

**对兄弟元素的影响:**后面的兄弟元素,会占据浮动元素之前的位置,在浮动元素的下面;对前面的兄弟无影响。

对后面的兄弟也影响

对前面的兄弟无影响

3.解决浮动产生的影响(清除浮动)

css 复制代码
<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>浮动产生的影响</title>
    <style>
        .outer{
            width: 500px;
            background-color: gray;
            border: 1px solid black;
            /* 1. 方案一: 给父元素指定高度 */
            height: 112px;
        }
        .box{
            width: 100px;
            height: 100px;
            background-color: aqua;
            border: 1px solid black;
            margin: 5px;
        }

 
        .box1,.box2,.box3{
            float: left;
        }

    </style>
</head>
<body>
    <div class="outer">
    
        <div class="box box1">1</div>
        <div class="box box1">2</div>
        <div class="box box1">3</div>

    </div>
    
</body>
</html>
  1. 方案一: 给父元素指定高度

但是子元素后面元素还是在浮动元素的后面

2. 方案二: 给父元素也设置浮动,带来其他影响。

效果跟方案1一样

  1. 方案三: 给父元素设置 overflow:hidden 。

子元素后面的元素消失了更严重

但是父元素的兄弟元素没有影响

  1. 方案四: 在所有浮动元素的最后面, 添加一个块级元素 ,并给该块级元素设置 clear:both 。

解决了 父元素的兄弟元素没有影响; 子元素后面的元素没有在浮动的元素后面

但是父元素的高度塌陷了

css 复制代码
    .box4{
            /* 清除box4之前所有产生浮动元素的影响 */
            clear:both;
        }

添加的只能是块级元素

总结:

在浮动元素后面添加一个没有高度文字块级标签,然后消除这个标签前面的所有浮动元素

css 复制代码
 .mafa{
            /* 清除mafa之前所有产生浮动元素的影响 */
            clear:both;
        }
  1. 方案五 : 给浮动元素的父元素,设置伪元素,通过伪元素清除浮动,原理与方案四相同。 ===> 推 荐使用
css 复制代码
 /* ::after 在元素最后的位置,创建一个子元素(必须用 content 属性指定内容)。
        在父元素最后的位置创建一个子元素
         */
        .outer::after{
            content: '';
            display:block;
            clear:both;
        }

完整代码

css 复制代码
<!DOCTYPE html>
<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>浮动产生的影响</title>
    <style>
        .outer{
            width: 500px;
            background-color: gray;
            border: 1px solid black;
            /* 1. 方案一: 给父元素指定高度 但是子元素后面还是在浮动元素的后面*/
            /* height: 112px; */
            /* 2. 方案二: 给父元素也设置浮动,
            带来其他影响。但是子元素后面还是在浮动元素的后面 */
            /* float: left; */

            /* 3. 方案三: 给父元素设置 overflow:hidden 。 */
            /* overflow:hidden; */

            /* 4. 方案四: 
            在所有浮动元素的最后面,添加一个块级元素,并给该块级元素设置 clear:both 。 */

            /* 5. 方案五: 给浮动元素的父元素,设置伪元素,
            通过伪元素清除浮动,原理与方案四相同。===> 推荐使用 */


        }
        .box{
            width: 100px;
            height: 100px;
            background-color: aqua;
            border: 1px solid black;
            margin: 5px;
        }

     
        .box1,.box2,.box3,.box4{
            float: left;
        }
       
        .mafa{
            /* 清除mafa之前所有产生浮动元素的影响 */
            clear:both;
        }
        /* ::after 在元素最后的位置,创建一个子元素(必须用 content 属性指定内容)。
        在父元素最后的位置创建一个子元素
         */
        .outer::after{
            content: '';
            display:block;
            clear:both;
        }


    </style>
</head>
<body>
    <div class="outer">
        
        <div class="box box1">1</div>
        <div class="box box1">2</div>
        <div class="box box1">3</div>
        <!-- 对后面的有影响 -->
        <div class="box box4">4</div>   
         <!-- <div class="mafa"></div>   -->
    </div>
    <div>Lorem ipsum dolor sit amet consectetur adipisicing elit. Commodi adipisci accusantium veniam quos sint repellat porro neque, ex nesciunt dignissimos praesentium magni maxime saepe veritatis atque cumque illo aut facere.</div> 
    
</body>
</html>

布局中的一个原则:设置浮动的时候,兄弟元素要么全都浮动,要么全都不浮动。

4.浮动练习

css 复制代码
<!DOCTYPE html>
<html lang="zh-cn">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

    <style>
        /* 清除默认样式 */
        * {
            padding: 0;
            margin: 0;
        }

        /* 左浮动 */
        .leftFD {
            float: left;
        }

        /* 左浮动 */
        .rightFD {
            float: right;
        }

        /* 清除浮动 */
        .clearFD::after {
            content: '';
            display: block;
            clear: both;
        }

        /* 设置盒子块水平居中 */
        .container {
            width: 960px;
            text-align: center;
            margin: 0 auto;
        }

        .logo,
        .banner1,
        .banner2 {
            height: 80px;
            background-color: aqua;
            line-height: 80px;
        }

        .logo {
            width: 200px;
        }

        .banner1 {
            width: 540px;
            margin: 0 10px;
        }

        .banner2 {
            width: 200px;
        }

        .menu {
            height: 30px;
            background-color: blueviolet;
            margin-top: 10px;
        }

        .content {
            margin-top: 10px;
        }

        .itme1,
        .itme2 {
            height: 198px;
            width: 368px;
            border: 1px solid black;
            margin-right: 10px;
            background-color: chocolate;
            line-height: 198px;
        }

        .item3,
        .item4,
        .item5,
        .item6 {
            height: 198px;
            width: 178px;
            border: 1px solid black;

            background-color: yellow;
            line-height: 198px;
            margin-right: 10px;
        }

        .bottom {
            margin-top: 10px;
        }

        .item7,
        .item8,
        .item9 {
            width: 198px;
            height: 128px;
            border: 1px solid 1px;
            line-height: 128px;
            margin-bottom: 10px;
            background-color: green;
        }
    </style>
</head>

<body>
    <!-- 盒子模块 -->
    <div class="container">
        <!-- 页面头部 -->
        <div class="page-header clearFD">
            <div class="logo leftFD">logo</div>
            <div class="banner1 leftFD">banner1</div>
            <div class="banner2 leftFD">banner2</div>
        </div>
        <!-- 设置菜单 -->
        <div class="menu">菜单</div>

        <!-- 设置内容区 -->
        <div class="content clearFD">
            <!-- 分左侧 -->
            <div class="left leftFD">
                <!-- 分上侧 -->
                <div class="top clearFD">
                    <div class="itme1 leftFD">栏目一</div>
                    <div class="itme2 leftFD">栏目二</div>
                </div>
                <!-- 分下侧 -->
                <div class="bottom clearFD">
                    <div class="item3 leftFD">栏目三</div>
                    <div class="item4 leftFD">栏目四</div>
                    <div class="item5 leftFD">栏目五</div>
                    <div class="item6 leftFD">栏目六</div>
                </div>
            </div>
            <!-- 分右侧 -->
            <div class="right rightFD">
                <div class="item7">栏目七</div>
                <div class="item8">栏目八</div>
                <div class="item9">栏目九</div>
            </div>
        </div>
    </div>
</body>
</html>
相关推荐
该用户已不存在1 天前
这6个网站一旦知道就离不开了
前端·后端·github
Ai行者心易1 天前
10天!前端用coze,后端用Trae IDE+Claude Code从0开始构建到平台上线
前端·后端
东东2331 天前
前端开发中如何取消Promise操作
前端·javascript·promise
掘金安东尼1 天前
官方:什么是 Vite+?
前端·javascript·vue.js
柒崽1 天前
ios移动端浏览器,vh高度和页面实际高度不匹配的解决方案
前端
渣哥1 天前
你以为 Bean 只是 new 出来?Spring BeanFactory 背后的秘密让人惊讶
javascript·后端·面试
烛阴1 天前
为什么游戏开发者都爱 Lua?零基础快速上手指南
前端·lua
大猫会长1 天前
tailwindcss出现could not determine executable to run
前端·tailwindcss
Moonbit1 天前
MoonBit Pearls Vol.10:prettyprinter:使用函数组合解决结构化数据打印问题
前端·后端·程序员
533_1 天前
[css] border 渐变
前端·css