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不会影响到元素的现有表现啊,人畜无害啊有木有!

你可能感兴趣的:(hasLayout)