haslayout学习笔记

真是越学越发现自己啥都不会啊~…..关于这个haslayout是前天刚刚听咱们公司一牛人告诉我的,以前是一无所知….

在网上查阅了很多篇整理出来,下面是一些笔记,供自己与大家分享~

haslayout的重要性:

先不说这个haslayout是什么,我想让你知道haslayout的重要性。

我们经常遇到的一些IE渲染错误,都可以通过haslayout来解决。例如著名的双倍边距,3像素偏移等等。

好吧,我承认我是卖关子…..=。=

haslayout是什么:

haslayout是IE的特有属性,就是has(有)layout(布局样式)!

在IE浏览器中,有的元素是默认“has” layout(有布局样式的),而有的元素是没有layout,需要后期激发layout的。微软给出的主要原因是“性能和简洁”。如果所有的元素都默认有布局,会对性能和内存使用上产生有害的影响。

他们还认为元素都应该可以拥有一个“属性(property)”(这是面向对象编程中的一个概念),于是他们便使用了 has Layout,这种渲染特性生效时也就是将 hasLayout 设成了 true 之时。

“无layout”元素,是指 hasLayout 未被触发的元素,如一个未设定宽高尺寸的干净 div 元素就可以做为一个“无layout祖先”。

默认haslayout的元素:

<html>, <body> <table>, <tr>, <th>, <td> <img> <hr> <input>, <select>, <textarea>, <button> <iframe>, <embed>, <object>, <applet> <marquee>

CSS赋予元素layout的方式:

position: absolute

float: left/right

display: inline-block  内联元素使用

width/height:除auto以外任意值,height: 1% 就在 Holly Hack 中用到

zoom:除normal以外任意值

在IE6+中,overflow: hidden/scroll/auto和min/max 和 width/height等也可以触发haslayout

CSS hacks

1.Holly hacks

/* \*/  * html .gainlayout { height: 1%; }  /* */

支持 IE5+ ,除标准兼容模式 IE6 中的内联元素。 和 overflow: hidden 不相容,除非在 IE6 的标注兼容模式下(因为这时如果父元素没有定高,那么height: 1% 会被变回 height: auto)。

2.underscore hack

.gainlayout { _height: 0; }

3.条件注释方式

<!–[if lte IE 6]>
<style>
.gainlayout { height: 1px; }
</style>
<![endif]–>

4.外链CSS方式

<link rel=”stylesheet” href=”allbrowsers.css” type=”text/css” />
<!–[if lte IE 6]>
<link rel=”stylesheet” href=”iefix.css” type=”text/css” />
<![endif]–>

haslayout小结:

当遇到IE渲染错误时可以首页试着激活haslayout来看看是不是此原因。推荐方式是设定元素zoom:1;这是IE的特有属性,而且不会影响效果。Holly hack用在IE6-版本,IE6+更适合用min-height:0;

此篇文章查阅了:

前端观察

CSDN的萝卜技术专栏

蓝色理想 (06年,翻译自国外博客,已被和谐,大家自理。最推荐这个版本!)

Tags: ,

50 comments

  1. 好长啊,先找个沙发坐下来看。

    [回复]

    smigoo 回复:

    @SoleilNeon, 沙发党啊你~~

    [回复]

  2. 漂亮的flash首页!

    [回复]

    smigoo 回复:

    @Kada, 嘿嘿 是你楼上那位做的~

    [回复]

  3. 满复杂的,有空试试看。都是IE造的孽啊。

    [回复]

    smigoo 回复:

    @SoleilNeon, 是的….变态 期待IE9….是

    [回复]

  4. IE6这废品。。。赶紧淘汰。。

    [回复]

    smigoo 回复:

    @QiQiBoY, 我们早就把他淘汰啦,就是有些人还在用呢/…

    [回复]

  5. ie6垃圾。其实同意标准不就得了,搞得累死了

    [回复]

    smigoo 回复:

    @rusaer, ie6其实在那个年代还好啦 最关键的是现在很多人用着不是这个年代的东西….

    [回复]

  6. WEB标准才是王道

    [回复]

    smigoo 回复:

    @苏扬, 是是….

    [回复]

    苏扬 回复:

    @smigoo, SMI 你也太敷衍我了吧

    [回复]

  7. 看了你这个我发现我什么都不会- -

    [回复]

    smigoo 回复:

    @A.shun, ….其实我也不太懂…

    [回复]

  8. 看不懂!
    完了。我更加不会!

    [回复]

    smigoo 回复:

    @超人, 嗯 这个我相信~~

    [回复]

  9. 学习了,看来你的css代码不错!

    [回复]

    smigoo 回复:

    @北街, 呵呵 还行

    [回复]

  10. 学习了,看来你的css代码学的不错!

    [回复]

  11. 怎么说一句我不认识你就走了啊?

    [回复]

    smigoo 回复:

    @苏囧, 呜呜 你都不提我一句的~

    [回复]

  12. 请问smiMM,这是啥东西?

    [回复]

    smigoo 回复:

    @张三, 额 ….这个 ~…

    [回复]

  13. 做下来好好学习了….

    [回复]

    smigoo 回复:

    @hsforever, 嘿嘿~~

    [回复]

  14. 把IE都淘汰掉吧。

    [回复]

    smigoo 回复:

    @iBoluo, 我也想….=。=

    [回复]

    iBoluo 回复:

    @smigoo,
    那就 Just do it 啊。

    [回复]

  15. 我还不知道这东西呢。。。呵呵

    [回复]

    smigoo 回复:

    @Zenoven自由人, 呵呵 看看就知道啦~

    [回复]

  16. 火狐用的人也不少嗯。尤其是搞技术和设计的

    [回复]

    smigoo 回复:

    @卢松松, 是啊…可以想要兼容嘛…我自己都不想用IE了.

    [回复]

  17. 望天……完全搞不懂……

    [回复]

    smigoo 回复:

    @喵喵呜, 哈哈 陪你一起~

    [回复]

  18. 最近小邪写CSS 老忘记去Clear:both 一下 ~
    结果弄得自己好纠结 o(╯□╰)o

    [回复]

    smigoo 回复:

    @evlos, 嘿嘿 是的 我以前也老是忘记clear

    [回复]

  19. SM难道你对这些乱码也有兴趣?

    [回复]

    smigoo 回复:

    @平平, 额 我是做这个的…

    [回复]

  20. 学习中!!!

    [回复]

    smigoo 回复:

    @maomao, 哈哈 加油~

    [回复]

  21. 技术类,看不懂,模糊……

    [回复]

  22. 留言板 不要留言吗?呜呜~~

    想跟你说下的,你的 百度快照 怎么在 2009-01-24 呢?

    刚才看了下 ,很纳闷,曾经 被K过吗?

    [回复]

  23. 我好像没有听说过这个。

    [回复]

  24. 看不懂,不过还是来学习了

    [回复]

  25. 这就是术业有专攻啊。

    [回复]

  26. 过来学习CSS来了。。

    [回复]

  27. 有点看不懂!等待在像标准靠近的ie9

    [回复]

  28. 做的都是企业网站多。。主要还是向IE靠拢。哎。中国国情啊。
    杯具啊。
    看完 前端观察 的文章终于消化了
    上面这篇,我消化不鸟~~LOL~

    [回复]

Leave a comment