Rumah  >  Artikel  >  hujung hadapan web  >  css float 清除浮动 haslayout

css float 清除浮动 haslayout

巴扎黑
巴扎黑asal
2017-06-28 10:38:041627semak imbas

1:float使得指定元素脱离普通的文档流而产生的特别的布局特性。它必需应用在块级元素之上,也就是说浮动并不应用于内联标签。当应用了float那么这个元素将被指定为块级元素。例如一个内联元素设定了float之后就可以给它设定宽高。

.clear:after{
content:" ";
display:block;
height:0;
clear:both;
visibility:hidden;
}

:after 伪元素在元素之后添加内容,这个伪元素允许创作人员在元素内容的最后面插入生成内容。默认地,这个伪元素是行内元素,不过可以使用属性 display 改变这一点。用after产生的内容是个空格,先display:block,然后高度为0,不让他影响布局,隐藏和height:0差不多就是不要影响布局。clear:both就是清除 浮动.不支持after的浏览器ie6、ie7就是加一个height:1%;就ok了,这样的话ie6,ie7就会拥有haslayout。

2:haslayput

其实haslayout 是Windows Internet Explorer7以下渲染引擎的一个内部组成部分,

在InternetExplorer7以下中,一个元素要么自己对自身的内容进行计算大小和组织,要 么依赖于父元素来计算尺寸和组织内容。为了调节这两个不同的概念,渲染引擎采用了 hasLayout 的属性,属性值可以为true或false。当一个元素的 hasLayout属性值为true时,我们说这个元素有一个布局(layout)。当一个元素有一个布局时,它负责对自己和可能的子孙元素进行尺寸计算 和定位。简单来说,而不是依赖于祖先元素来完成这些工作。通过 IE Developer Toolbar 可以查看 IE 下 HTML元素是否拥有haslayout,拥有 haslayout的元素,通常显示为“haslayout = -1”。

这里的has layout就是对自己和可能的子孙元素进行尺寸计算和定位来决定父元素的高度,也就是父元素适应了里面内容的高度,这回大家就明白为什么加入一个 height:1%的原因了,当然也可以加入其它的属性使其has layout,如width等。当然加float也可以(float也可以触发layout),但不推荐,不要用floa来清除浮动,这样float又会 产生一个浮动。

100db36a723c770d327fc0aef2ce13b1,6c04bd5ca3fcae76e30b72ad730ca86d,f5d188ed2c074f8b944552db028f98a1a34de1251f0d9fe1e645927f19a896e8b4d429308760b6c2d20d6300079ed38eb6c5a531a458a2e790c1fd6421739d1ca1f02c36ba31691bcfe87b2722de723bf32b48428a809b51f04d3228cdf461fad5fd7aea971a85678ba271703566ebfd, bb9345e55eb71822850ff156dfde57c8, 221f08282418e2996498697df914ce4e, 4750256ae76b6b9d804861d8f69e79d3, 2b5469ab79cf842344327415c3b3bb95, e911751791aa3ba95dc724e2fb905976d5ba1642137c3f32f4f4493ae923989c, d8e2720730be5ddc9c2a3782839e8eb6, 273238ce9338fbb04bee6997e5552b95, 082dedeb30a00d0e6e2cdb74a392fac3ed126914ed1419bab26abf7cf307b7b9


下列 CSS 属性和取值将会让一个元素获得 layout:

  • position: absolute
    绝对定位元素的包含区块(containing block)就会经常在这一方面出问题。

  • float: left|right
    由于 layout 元素的特性,浮动模型会有很多怪异的表现。

  • display: inline-block
    当一个内联级别的元素需要 layout 的时候往往就要用到它,这也可能也是这个 CSS 属性的唯一效果–让某个元素拥有 layout。”inline-block行为”在IE中是可以实现的,但是非常与众不同: IE/Win: inline-block and hasLayout 。

  • width: 除 “auto” 外的任意值
    很多人遇到 layout 相关问题发生时,一般都会先尝试用这个来修复。

  • height: 除 “auto” 外的任意值
    height: 1% 就在 Holly Hack 中用到。

  • zoom: 除 “normal” 外的任意值
    IE专有属性。不过 zoom: 1 可以临时用做调试。

  • writing-mode: tb-rl
    MS专有属性。

  • overflow: hidden|scroll|auto
    在 IE7 中,overflow 也变成了一个 layout 触发器,这个属性在之前版本 IE 中没有触发 layout 的功能。

  • overflow-x|-y: hidden|scroll|auto
    overflow-x 和 overflow-y 是 CSS3 盒模型中的属性,尚未得到浏览器的广泛支持。他们在之前版本IE中没有触发 layout 的功能。

  • 另外 IE7 的荧幕上又新添了几个 haslayout 的演员,如果只从 hasLayout 这个方面考虑,min/max 和 width/height 的表现类似,position 的 fixed 和 absolute 也是一模一样。

  • position: fixed

  • min-width: 任意值
    就算设为0也可以让该元素获得 layout。

  • max-width: 除 “none” 之外的任意值

  • min-height: 任意值
    即使设为0也可以让该元素的 haslayout=true

  • max-height: 除 “none” 之外的任意值

有关内联级别元素

对于内联元素(可以是默认即为内联的比如 span 元素,也可以是 display: inline 的元素)

  • width 和 height 只在 IE5.x 下和 IE6 或更新版本的 quirks 模式下触发 hasLayout 。而对于 IE6,如果浏览器运行于标准兼容模式下,内联元素会忽略 width 或 height 属性,所以设置 width 或 height 不能在此种情况下令该元素具有 layout。

  • zoom 总是可以触发 hasLayout,但是在 IE5.0 中不支持。

具有”layout” 的元素如果同时也 display: inline ,那么它的行为就和标准中所说的 inline-block 很类似了:在段落中和普通文字一样在水平方向和连续排列,受 vertical-align 影响,并且大小可以根据内容自适应调整。这也可以解释为什么单单在 IE/Win 中内联元素可以包含块级元素而少出问题,因为在别的浏览器中 display: inline 就是内联,不像 IE/Win 一旦内联元素拥有 layout 还会变成 inline-block。

重置 hasLayout

在另一条规则中重设以下属性为默认值将重置(或撤销)hasLayout,如果没有其他属性再添加 hasLayout 的话:

  • width, height (设为 “auto”)

  • max-width, max-height (设为 “none”)(在 IE 7 中)

  • position (设为 “static”)

  • float (设为 “none”)

  • overflow (设为 “visible”) (在 IE 7 中)

  • zoom (设为 “normal”)

  • writing-mode (从 “tb-rl” 设为 “lr-t)

display 属性的不同:当用”inline-block”设置了 haslayout = true 时,就算在一条独立的规则中覆盖这个属性为”block”或”inline”,haslayout 这个标志位也不会被重置为 false。

把 mid-width, mid-height 设为它们的默认值”0″仍然会赋予 hasLayout,但是 IE 7 却可以接受一个不合法的属性”auto”来重置 hasLayout。

Atas ialah kandungan terperinci css float 清除浮动 haslayout. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn