清除浮动的几种方式?各自的优缺点?

简介: 清除浮动的几种方式?各自的优缺点?

1、父级div定义伪类:after和zoom

  • 原理:IE8以上和非IE浏览器才支持:after,原理和方法2有点类似,zoom(IE转有属性)可解决ie6,ie7浮动问题。
  • 优点:浏览器支持好,不容易出现怪问题(目前:大型网站都有使用,如:腾迅,网易,新浪等等)。
  • 缺点:代码多,不少初学者不理解原理,要两句代码结合使用,才能让主流浏览器都支持。
  • 建议:推荐使用,建议定义公共类,以减少CSS代码。
 <style type="text/css">
        .div1 {
            background: pink;
            border: 2px solid skyblue;
        }
        .div2 {
            background: purple;
            border: 2px solid skyblue;
            height: 100px;
            margin-top: 10px;
        }
        .left {
            float: left;
            width: 20%;
            height: 200px;
            background: #ccc;
        }
        .right {
            float: right;
            width: 30%;
            height: 80px;
            background: #ccc;
        }
        /*清除浮动代码*/
        .clearfloat:after {
            display: block;
            clear: both;
            content: "";
            visibility: hidden;
            height: 0;
        }
        .clearfloat {
            zoom: 1;
        }
    </style>
    <div class="div1 clearfloat">
        <div class="left">Left</div>
        <div class="right">Right</div>
    </div>
    <div class="div2">
        div2
    </div

2、父级div定义overflow:hidden

  • 原理:必须定义widthzoom:1,同时不能定义height,使用overflow:hidden时,浏览器会自动检查浮动区域的高度。
  • 优点:简单,代码少,浏览器支持好。
  • 缺点:不能和position配合使用,因为超出的尺寸的会被隐藏。
  • 建议:只推荐没有使用position或对overflow:hidden理解比较深的朋友使用。
 <style type="text/css">
        .div1 {
            background: pink;
            border: 2px solid skyblue;
            /*解决代码*/
            width: 98%;
            overflow: hidden;
        }
        .div2 {
            background: purple;
            border: 2px solid skyblue;
            height: 100px;
            margin-top: 10px;
            width: 98%
        }
        .left {
            float: left;
            width: 20%;
            height: 200px;
            background: #ccc;
        }
        .right {
            float: right;
            width: 30%;
            height: 80px;
            background: #ccc;
        }
    </style>
    <div class="div1">
        <div class="left">Left</div>
        <div class="right">Right</div>
    </div>
    <div class="div2">
        div2
    </div>

3、结尾处加空div标签clear:both

  • 原理:添加一个空div,利用css提高的clear:both清除浮动,让父级div能自动获取到高度。
  • 优点:简单,代码少,浏览器支持好,不容易出现怪问题。
  • 缺点:不少初学者不理解原理;如果页面浮动布局多,就要增加很多空div,让人感觉很不爽。
  • 建议:不推荐使用,但此方法是以前主要使用的一种清除浮动方法。
 <style type="text/css">
        .div1 {
            background: pink;
            border: 2px solid skyblue;
        }
        .div2 {
            background: purple;
            border: 2px solid skyblue;
            height: 100px;
            margin-top: 10px;
        }
        .left {
            float: left;
            width: 20%;
            height: 200px;
            background: #ccc;
        }
        .right {
            float: right;
            width: 30%;
            height: 80px;
            background: #ccc;
        }
        /*清除浮动代码*/
        .clearfloat {
            clear: both;
        }
    </style>
    <div class="div1">
        <div class="left">Left</div>
        <div class="right">Right</div>
        <div class="clearfloat"></div>
    </div>
    <div class="div2">
        div2
    </div>

4、父级div定义height

  • 原理:父级div手动定义height,就解决了父级div无法自动获取到高度的问题。
  • 优点:简单,代码少,容易掌握。
  • 缺点:只适合高度固定的布局,要给出精确的高度,如果高度和父级div不一样时,会产生问题。
  • 建议:不推荐使用,只建议高度固定的布局时使用。
  <style type="text/css">
        .div1 {
            background: pink;
            border: 2px solid skyblue;
            /*解决代码*/
            height: 200px;
        }
        .div2 {
            background: purple;
            border: 2px solid skyblue;
            height: 100px;
            margin-top: 10px;
        }
        .left {
            float: left;
            width: 20%;
            height: 200px;
            background: #ccc;
        }
        .right {
            float: right;
            width: 30%;
            height: 80px;
            background: #ccc;
        }
    </style>
    <div class="div1">
        <div class="left">Left</div>
        <div class="right">Right</div>
    </div>
    <div class="div2">
        div2
    </div>

5、父级div定义overflow:auto

  • 原理:必须定义widthzoom:1,同时不能定义height,使用overflow:auto时,浏览器会自动检查浮动区域的高度。
  • 优点:简单,代码少,浏览器支持好。
  • 缺点:内部宽高超过父级div时,会出现滚动条。
  • 建议:不推荐使用,如果你需要出现滚动条或者确保你的代码不会出现滚动条就使用吧。
<style type="text/css">
    .div1 {
        background: pink;
        border: 2px solid skyblue;
        /*解决代码*/
        width: 98%;
        overflow: auto
    }
    .div2 {
        background: purple;
        border: 2px solid skyblue;
        height: 100px;
        margin-top: 10px;
        width: 98%
    }
    .left {
        float: left;
        width: 20%;
        height: 200px;
        background: #ccc;
    }
    .right {
        float: right;
        width: 30%;
        height: 80px;
        background: #ccc;
    }
</style>
<div class="div1">
    <div class="left">Left</div>
    <div class="right">Right</div>
</div>
<div class="div2">
    div2
</div>


相关文章
|
存储 弹性计算 监控
ECS的基本操作教程
ECS的基本操作教程
488 7
|
NoSQL Java 关系型数据库
基于Java swing和mysql实现的学生选课管理系统(源码+数据库+运行指导视频)
基于Java swing和mysql实现的学生选课管理系统(源码+数据库+运行指导视频)
636 0
|
域名解析 缓存 网络协议
DNS协议 是什么?说说DNS 完整的查询过程? _
DNS是互联网的域名系统,它像翻译官一样将域名转换成IP地址。域名由点分隔的名字组成,如www.xxx.com,包含三级、二级和顶级域名。查询方式分为递归和迭代,递归是请求者必须得到答案,而迭代则是服务器指引请求者如何获取答案。域名解析过程中,会利用浏览器和操作系统的缓存,如果缓存未命中,本地域名服务器会通过递归或迭代方式向上级服务器查询,最终得到IP地址并返回给浏览器,同时在各级缓存中保存记录。
591 1
DNS协议 是什么?说说DNS 完整的查询过程? _
|
7月前
|
供应链 监控 数据可视化
优化酒店供应链结构:实现成本控制与效率提升
本文探讨了酒店行业在激烈竞争中如何通过成本控制和供应链优化提升运营效率。具体措施包括精细化预算管理、优化人力资源配置、节能减排、供应商管理、采购流程优化及库存管理。引入可视化管理工具如板栗看板,可进一步提高项目管理、数据分析和信息共享的效率,助力酒店在不牺牲服务质量的前提下降低运营成本,增强市场竞争力。
|
6月前
|
存储 Kubernetes 调度
|
监控 安全 数据可视化
如何使用这些上网行为管理软件一键管控员工网络
使用WorkWin、Hubstaff和Veriato等上网行为管理软件,企业可以有效监控和提升员工工作效率。这些工具提供实时员工监控、时间统计、移动部署、权限控制、远程管理及安全监控等功能,确保工作安全,优化时间分配,防止数据泄露,并通过任务追踪促进项目进展。通过生成报告和分析,企业能识别生产力瓶颈和安全风险,从而制定改进策略。
297 3
|
测试技术
软件测试用例设计之微信群抢红包经典用例
作者在浏览招聘网站时遇到为微信群发和抢红包设计测试用例的问题,作为软件测试新手,作者通过实际体验并撰写测试案例来加深对业务的理解,并分享了测试案例表格。需要注意的是,该用例未考虑添加银行卡支付、红包类型选择及红包描述。
334 5
软件测试用例设计之微信群抢红包经典用例
|
10月前
|
存储 弹性计算 固态存储
阿里云服务器ESSD Entry系统盘测评IOPS、IO读写和时延性能参数
ESSD Entry云盘是阿里云推出的新一代云盘,具备高IOPS、低延迟和企业级数据保护能力。适用于开发与测试场景,支持按量付费和包年包月计费模式。99元和199元的ECS经济型e实例和通用算力型u1实例均采用ESSD Entry系统盘,性价比高。详细性能参数和价格请参考阿里云官方页面。
432 0
|
机器学习/深度学习 数据采集 人工智能
预测知识 | 机器学习预测模型局限性
预测知识 | 机器学习预测模型局限性
|
自然语言处理
字符范围
字符范围
345 2