hasLayout

睡觉时间到,然而天马行空想到了zoom:1,于是手欠搜了谷歌,就引发了这桩事故...

看bootstrap源码的时候看到了*zoom:1,当时年少无知用了百度(莫名其妙黑),上面说“移动端可以不用zoom:1”...好哒!合上本子不去管了。。。
以上都是废话🙂。

这里面为什么用*zoom:1——为了让元素的hasLayout生效,变为true(可由objElement.currentStyle.hasLayout获取查看)。

what is hasLayout

hasLayout,仅限于Windows IE当中存在这个概念,它决定了元素如何对其内容定位和尺寸计算,以及与其他元素的关系和相互作用。
且看一个元素到底有没有"layout",有还是没有呢?

  • 有的话,元素生成了自己的一个“布局”,负责自己和子元素内容的尺寸和定位(翅膀硬了可以单飞了);
  • 没有的话,元素会靠它最近的有layout的祖先元素来控制自己的尺寸和定位(嫩的话还得靠爹)。

why exists

因为IE说了,元素都有layout的话开销大累得慌,所以默认只能给有资质的设置layout,那么谁有资质呢?

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

How to have the "layout"

表现好的话,也是可以有自己的layout的,怎么做才能表现好呢?

//IE6 / IE7
float: left或right
display: inline-block
position: absolute
width: 除auto外任何值
height: 除auto外任何值
zoom: 处normal外任何值
writing-mode: tb-rl

//IE7
min-height: 任意值
min-width: 任意值
max-height: 除none 外任意值
max-width: 除none 外任意值
overflow: 除visible外任意值,仅用于块级元素
overflow-x: 除visible 外任意值,仅用于块级元素
overflow-y: 除visible 外任意值,仅用于块级元素
position: fixed

所以在上面那一坨里面可以看到zoom的身影,但是为什么用zoom而不用其他?因为zoom:1不会影响到元素的现有表现啊,人畜无害啊有木有!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,862评论 1 92
  • 转载自Bubblings Blog原文地址:http://riny.net/2013/haslayout/ 1.什...
    foolgry阅读 363评论 0 0
  • 作为前端的好孩子,总会遇到一个经典不朽的问题:有几种闭合内部浮动的方法?哈哈,是不是想说这个能难得住我?马上能列出...
    Candy程阅读 228评论 0 0
  • 清理浮动两种方式 利用 clear属性,清除浮动 使父容器形成BFC 考虑下列情景: 希望是这样: 实际上却是这样...
    sdcV阅读 484评论 1 3
  • “这么说,你是真的决定要做一只粽子了?”粽子A问糯米兄弟。“是的,我从小时候就这么想,我可不要成为什么年糕,糍粑,...
    远方阅读 510评论 0 5