• css之清除浮动


    这几天先整理下清除浮动的方法;

    产生问题的原因:在一个容器中,有多个浮动的子元素,会造成显示结果意想不到的问题。
    在CSS规范中,浮动定位不属于正常的文档流,而是独立定位的。
    浮动元素在文档流空出的位置,由后续的(非浮动)元素填充上去:块级元素直接填充上去,若跟浮动元素的范围发生重叠,浮动元素覆盖块级元素。内联元素:有空隙就插入。这个定位是不同的。
    关于css的定位机制:普通流,浮动,绝对定位(position:fixed是position:absolute的一个子类)。浮动的框可以左右移动,直到碰到另一个浮动元素或父元素内容区的边界(不包括padding);
    所以才说浮动定位不属于正常的页面流。文档中的普通流就会表现得和浮动框不存在一样,当浮动框高度超出包含框的时候,就会出现包含框不会自动伸缩高度类笔盒浮动元素。
    所以,只含有浮动元素的父容器在显示时不需要考虑子元素的位置,就造成显示父容器像空容器一样。

    解决方法:

    1.添加额外空标签

    优点:简单,代码少,浏览器兼容好;
    缺点:引入无意义标签,有违结构和表现的分离,很不利于后期维护;

         body,div,p{
            padding: 0;
            margin:0;
         }
         .div1{
            background-color: #6699A1;
            border: 1px solid black;
       }
         .left{
             200px;
            height: 200px;
            background-color: red;
            float: left;
         }
         .contant{
             200px;
            height: 250px;
            background-color: yellow;
            float: left;
         }
         .right{
             200px;
            height: 100px;
            background-color: #F8C3CD;
            float: left;
         }
         .clear{
            clear: both;
         }
    
        <div class="div1">
            <div class="left">left</div>
            <div class="contant">contant</div>
            <div class="right">right</div>
            <div class="clear"></div>
        </div>
        <div style='100px;background-color:#A6DCF0;'>这是一段测试余元</div>
    

    2.父元素设置 overflow:hidden

    优点:代码少,不存在结构和语义化的问题;
    缺点:内容增多时候容易造成不会自动换行导致内容被隐藏掉,无法显示需要溢出的元素;overflow:hidden会导致中键失效。

    原理:这里涉及到BFC,详细可参考张鑫旭的博客CSS深入理解流体特性和BFC特性下多栏自适应布局,以及梦想天空的前端精选文摘:BFC 神奇背后的原理
    当父元素设置以为overflow:hidden时,触发BFC,计算BFC的高度时,浮动元素也参与计算,所以父元素高度撑开。

    BFC布局规则:
    • 内部的Box会在垂直方向,一个接一个地放置。
    • Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠
    • 每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
    • BFC的区域不会与float box重叠。
    • BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
    • 计算BFC的高度时,浮动元素也参与计算
    以下元素会触发BFC:
    • 根元素
    • float属性不为none
    • position为absolute或fixed
    • display为inline-block, table-cell, table-caption, flex, inline-flex
    • overflow不为visible
         body,div,p{
            padding: 0;
            margin:0;
         }
         .div1{
            background-color: #6699A1;
            border: 1px solid black;
            overflow: hidden;
       }
         .left{
             200px;
            height: 200px;
            background-color: red;
            float: left;
         }
         .contant{
             200px;
            height: 250px;
            background-color: yellow;
            float: left;
         }
         .right{
             200px;
            height: 100px;
            background-color: #F8C3CD;
            float: left;
         }
    
        <div class="div1">
            <div class="left">left</div>
            <div class="contant">contant</div>
            <div class="right">right</div>
        </div>
        <p style='background-color:#A6DCF0;'>这是一段测试余元</p>
    

    3.使用:after伪元素

    优点:结构和语义化完全正确,代码量居中
    缺点:复用方式不当会造成代码量增加

         body,div,p{
            padding: 0;
            margin:0;
         }
         .div1{
            background-color: #6699A1;
            border: 1px solid black;
       }
        .clearfix:after{
            content: '.';
            display: block;
            visibility: hidden;
            height: 0;
            clear: both;
        }
        .clearfix{
            zoom:1;  //IE567
        }
         .left{
             200px;
            height: 200px;
            background-color: red;
            float: left;
         }
         .contant{
             200px;
            height: 250px;
            background-color: yellow;
            float: left;
         }
         .right{
             200px;
            height: 100px;
            background-color: #F8C3CD;
            float: left;
         }
    
        <div class="div1 clearfix">
            <div class="left">left</div>
            <div class="contant">contant</div>
            <div class="right">right</div>
        </div>
        <p style='background-color:#A6DCF0;'>这是一段测试余元</p>
    
  • 相关阅读:
    Visual Studio 2010 SP1 中文升级补丁ISO完整版下载 (含多国语言)
    通过修改Host实现chrome同步
    附加数据库出现 无法打开物理文件 操作系统错误 5:拒绝访问 SQL
    配置Oracle遇到问题<一>
    GDI+中发生一般性错误的解决办法(转载)
    当VS和Flash builder同时运行时
    抛弃jQuery 深入原生的JavaScript
    Android SDK下载和更新慢或失败的解决办法
    Android 学习笔记 文本文件的读写操作
    Android Camera相机功能实现 拍照并保存图片
  • 原文地址:https://www.cnblogs.com/wjx91/p/5597301.html
Copyright © 2020-2023  润新知