1. 简介
原文出自:IE hasLayout
我平时写CSS相对较少,但是一些CSS的陷阱还是有所听说。今天在查阅一些CSS资料的时候,无意间遇到了这个haslayout的问题,于是就顺手整理了下。
注意:hasLayout这个属性,在IE8标准模式以及IE8以上版本的IE浏览器中,已经不生效。但在IE7兼容模式下,这个hasLayout属性依然发挥作用。
2. 为什么会有hasLayout?
旧版的IE浏览器中,比如IE5,IE6等,使用一个相当古老的HTML排版引擎(原文指出这个排版引擎是Mosaic,我上维基百科看了下,我想应该是真的。如果HTML的历史稍微有一些印象的话,应该会知道,在HTML成为标准之前,Mosaic是非常牛叉的一款浏览器)。
旧时代的WEB基本都是使用table进行布局的,这个时候一般是不会有内容overflow的问题产生。之后,微软在其IE浏览器中使用的Trident排版引擎引入了对CSS的支持。但是CSS改变了游戏规则,因为CSS允许HTML元素的内容超过元素的宽高,这种情况有可能发生在了float或者元素内容超出容器定义的宽高,也就是overflow。
3. hasLayout从何而来?
微软的工程师使用了一种比较奇葩的方式解决上面提到的问题——hasLayout属性诞生了。所有的HTML元素都有一个hasLayout属性,并且可以设置成true或者false。
如果hasLayout属性为true,那么这个元素就要花更多代价去渲染自己,它必须负责为自己和可能的子孙元素进行尺寸计算和定位。
如果hasLayout属性为false,那么这个元素就要依靠某个祖先元素来渲染它。
NOTE: 虽然是这么说的,但是有机会我还是应该去找几个DEMO看看,不然还是对这个问题不是很清楚。
hasLayout不是标准的CSS属性,这是微软的一个拓展属性,并且是只读属性——你无法通过CSS样式表,例如hasLayout: true;,或者是Javascript,el.currentStyle.hasLayout = true;去设置。一个元素是否hasLayout,关键就是hasLayout属性值是否是true。
4. 默认情况下,哪些HTML元素有hasLayout属性?
,
, | <iframe>, |
---|
茶杯头甜蜜终章dlc 官方手机版v1.0.0.3
下载火柴人传说暗影格斗内置菜单 最新版v3.0.1
下载荒野乱斗测试服 安卓版v61.10.3
下载荒野乱斗彩虹服 安卓版v61.10.3
下载寒霜启示录 安卓版v1.25.10
寒霜启示录是一款生存模拟游戏,不少玩家可能对于末日都有着自己
末日城堡免广告版 安卓最新版v0.7.1
末日城堡免广告版是一款非常好玩的模拟经营类游戏,内部可以不看
甜蜜人生模拟器 最新版v1.4.5
甜蜜人生模拟器是一款非常好玩的模拟恋爱手游,玩家在这里能够对
武器锻造师内置功能菜单 v10.4
武器锻造师内置菜单版是游戏的破解版本,在该版本中为玩家提供了
开放空间overfield 安卓版v1.0.5
开放空间Overfield是一款箱庭养成经营手游,让你在广阔