整理的最全的css clearfix清除浮动的方法

css中经常使用clearfix清除浮动,作者列出了几个clearfix的不同的使用方法进行对比,需要的朋友可以参考下css clearfix清除浮动的方法.(css为什么要清除浮动(float)? 清除浮动的原理是什么)

一,什么是.clearfix

你只要到Google或者Baidu随便一搜”css清除浮动”,就会发现很多网站都讲到”盒子清除内部浮动时可以用到.clearfix”。

.clearfix:after {  content: " ";  display: block;  clear: both;  height: 0;}.clearfix {  zoom: 1;}

  

登录后复制

上面的代码就是.clearfix的定义和应用,简单的说下.clearfix的原理:

1、在IE6, 7下zoom: 1会触发hasLayout,从而使元素闭合内部的浮动。

立即学习“前端免费学习笔记(深入)”;

2、在标准浏览器下,.clearfix:after这个伪类会在应用到.clearfix的元素后面插入一个clear: both的块级元素,从而达到清除浮动的作用。

  

登录后复制

二,.clearfix的弊端

在上面的代码中可以看到,抛开IE6, 7不谈,.clearfix在标准浏览器下插入了一个clear: both的元素,这样很可能清除掉不必要的浮动。举例来说明:

nbsp;html>  Demo      html, body { padding: 0; margin: 0; }    ul { margin: 0; padding: 0; }       .clearfix:after {      content: " ";      display: block;      clear: both;      height: 0;    }    .clearfix {      zoom: 1;    }      .left-col {      background: red;      float: left;      width: 100px;      height: 300px;    }    .right-col {      margin-left: 100px;    }    .menu {      border: 1px solid #000;    }    .menu li {      float: left;      display: block;      padding: 0 1em;      margin: 0 1em 0 0;      background: #ccc;    }    .placeholder {      background: yellow;      height: 400px;    }    

  

  

    

登录后复制      Menu Item      Menu Item      Menu Item      Menu Item      Menu Item      Menu Item        

  

上面的代码构成一个两列布局的页面。注意.menu这个菜单设置了边框,但是由于.menu的li元素是左浮动的,导致.menu没有高度,于是可以用.clearfix来清除.menu内部的浮动。代码如下:


登录后复制  Menu Item  Menu Item  Menu Item  Menu Item  Menu Item  Menu Item

但是应用完.clearfix后,在标准浏览器下页面变得很乱,这是因为.clearfix:after把.left-col的浮动也给清除掉了。

三,重构.clearfix

在遭遇到上面的错误之后,分析一下除了.clearfix:after这种方式之外还有没有别的方法清除元素内部的浮动。答案是有的,在白话Block Formatting Contexts这篇文章中提到过构成Block Formatting Context的元素可以清除内部元素的浮动。那么只要使.clearfix形成Block Formatting Context就好了。构成Block Formatting Context的方法有下面几种:

float的值不为none。

overflow的值不为visible。

display的值为table-cell, table-caption, inline-block中的任何一个。

position的值不为relative和static。

很明显,float和position不合适我们的需求。那只能从overflow或者display中选取一个。因为是应用了.clearfix和.menu的菜单极有可能是多级的,所以overflow: hidden或overflow: auto也不满足需求(会把下拉的菜单隐藏掉或者出滚动条),那么只能从display下手。

我们可以将.clearfix的display值设为table-cell, table-caption, inline-block中的任何一个,但是display: inline-block会产生多余空白,所以也排除掉。剩下的只有table-cell, table-caption,为了保证兼容可以用display: table来使.clearfix形成一个Block Formatting Context,因为display: table会产生一些匿名盒子,这些匿名盒子的其中一个(display值为table-cell)会形成Block Formatting Context。这样我们新的.clearfix就会闭合内部元素的浮动。下面是重构之后的.clearfix。

.clearfix {  zoom: 1;  display: table;  width: 100%;}

登录后复制

四,总结

在IE6, 7下面只要是触发了hasLayout的元素就可以清除内部浮动了。而在标准浏览器下面清除元素内部浮动的方法有很多,除了.clearfix:after这种方式,其余的方法无非就是产生新的Block Formatting Context以达到目的。如果可以做到在什么条件下用哪种方法,我认为这样就足够了……

更多关于css clearfix清除浮动的方法的相关文章,请关注【创想鸟】

相关文章:

css为什么要清除浮动(float)? 清除浮动的原理是什么

css为什么要清除浮动(float)? 清除浮动的原理是什么

css为什么要清除浮动(float)? 清除浮动的原理是什么

css为什么要清除浮动(float)? 清除浮动的原理是什么

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2906602.html

(0)
上一篇 2025年3月11日 02:45:53
下一篇 2025年3月11日 02:46:05

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 利用CSS伪元素创建带三角形的提示框的实现技巧

    下面小编就为大家带来一篇利用css伪元素创建带三角形的提示框的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧 CSS伪元素非常有用,它提供了一种无需多余的DOM元素来实现一些常见的功能的方法,以下利用…

    编程技术 2025年3月11日
    200
  • CSS使用盒模型实例讲解分析

    盒子是css中的基础概念,我们需要使用它来配置元素的外观以及文档的整体布局。 1. 为元素应用内边距 应用内边距会在元素内容和边距之间添加空白。我们可以为内容盒的每个边界单独设置内边距,或者使用 padding 简写属性在一条声明中设置所有…

    2025年3月11日 编程技术
    200
  • 浅谈CSS浮动的方法介绍

    元素的水平方向浮动,意味着元素只能左右移动而不能上下移动。 一个浮动元素会尽量向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。 浮动元素之后的元素将围绕它。 浮动元素之前的元素将不会受到影响。   立即学习“前端免费学习笔…

    2025年3月11日 编程技术
    200
  • 浅谈css中的clip裁剪用法介绍

    clip 属性是用来设置元素的形状。用来剪裁绝对定位元素(absolute or fixed)。 clip有三种取值:auto |inherit|rect。inherit是继承,ie不支持这个属性, auto是默认  前两个基本属于打酱油的…

    2025年3月11日
    200
  • 详解css优先级计算方法

    主要的css选择器有id,class,tag,[],:,::等,而通常需要对其优先级进行判断的有id,class,tag,另外内联样式和!important也和css的优先级有关系。 如果将这五种不同情况的优先级以数字的形式来表示的话,其对…

    编程技术 2025年3月11日
    200
  • 浅谈css中margin的重叠

    父子元素margin重叠 解决办法: 给子元素添加浮动属性,相应父元素添加必要的清浮动属性; 给父元素添加边缘属性,如padding、border; 同级元素margin反向重叠 立即学习“前端免费学习笔记(深入)”; 同级元素margin…

    编程技术 2025年3月11日
    200
  • css中float的用法详细介绍

    关于float很早就接触了,下面结合一个小demo谈谈。 1:在页面布局中,假设有两个p,需求是两个p在同一排上;其中解决办法之一就是利用浮动, eg: 登录后复制                     职位简介             …

    编程技术 2025年3月11日
    200
  • css动画和照片清晰度动画的实现方法介绍

    实例如下: 源代码: nbsp;html>donghua.beijing{ border: 1px solid black; width: 100%; height: 800px; background: black; } .a1 i…

    2025年3月11日
    200
  • css样式的巧妙方法进行总结

    针对之前遇到过的一些特殊样式的实现,我今天做个总结,目的有二:一是将这些方法记录下来,以便将来需要用到时查找使用。二为将这些大神们智慧的结晶发扬光大,让广大前端程序猿们能够少走弯路。此贴为更新帖,以后若有好的css样式技巧,小哥我会不定期更…

    编程技术 2025年3月11日
    200
  • CSS实现进度条和订单进度条的方法

    简单地效果图如下:     CSS实现进度条: html结构:       70%   登录后复制 css样式: 立即学习“前端免费学习笔记(深入)”; #progress{       width: 50%;        height:…

    2025年3月11日
    200

发表回复

登录后才能评论