当前位置: 首页 > article >正文

CSS浮动详解

1. 浮动的简介

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

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

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

<!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.解决浮动产生的影响(清除浮动)

<!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一样 

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

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

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

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

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

但是父元素的高度塌陷了

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

添加的只能是块级元素 

总结:

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

 .mafa{
            /* 清除mafa之前所有产生浮动元素的影响 */
            clear:both;
        }

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

 /* ::after 在元素最后的位置,创建一个子元素(必须用 content 属性指定内容)。
        在父元素最后的位置创建一个子元素
         */
        .outer::after{
            content: '';
            display:block;
            clear:both;
        }

完整代码

<!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.浮动练习

<!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>


http://www.kler.cn/a/567424.html

相关文章:

  • [密码学实战]Java实现SM2数字信封(结合SM4对称加密)生成与解析
  • 前后端常用正则
  • Ruby基础
  • QT异步编程之QtConcurrent
  • C语言(17)------------>数组的练习
  • 【练习】【贪心】力扣134. 加油站
  • 人工智能销售客服app开发,OpenAI宣布GPT-5免费使用?Deepseek让AI巨头全跪了
  • 【 实战案例篇三】【某金融信息系统项目管理案例分析】
  • leetcode28 找出字符串第一个匹配值的下标 KMP算法
  • Python 的守护线程
  • 奇异值分解(SVD)的原理与应用
  • 每日一题之屏蔽信号
  • Nginx 配置与常用命令速查手册
  • 计算机视觉|ViT详解:打破视觉与语言界限
  • 【弹性计算】弹性裸金属服务器和神龙虚拟化(一):功能特点
  • PHP缓存技术优化:提升网站性能的关键
  • c++ std::forward_list使用笔记
  • 利用three.js在Vue项目中展示重构的stl模型文件
  • Java进阶——注解一文全懂
  • AIP-156 单例资源