CSS:haslayout属性,兼容ie
时间:2015-03-19 17:32 来源:未知 作者:dabiaosheji  点击:次
			
			
		我们都知道浏览器有bug,而IE的bug似乎比大多数浏览器都多。IE的表现与其他浏览器不同的原因之一就是,显示引擎使用一个称为布局(layout)的内部概念。
	
		因为布局是专门针对显示引擎内部工作方式的概念,所以一般情况下不需要了解它。但是,布局问题是许多IE显示bug的根源,所以理解这个概念以及它如何影响CSS对修复bug是有帮助的。
	
			haslayout是Windows Internet Explorer渲染引擎的一个内部组成部分。在Internet Explorer中,使用布局概念来控制元素的尺寸和定位。在理想情况下,所有元素都控制自己的尺寸和定位。但是,这在IE中会导致很大的性能问题。因此,IE开发团队决定只将布局应用于实际需要它的那些元素,这样就可以充分地减少性能开销。
		
			拥有布局(have layout)的元素负责本身及其子元素的尺寸和定位。如果一个元素没有布局,那么它的尺寸和位置由最近的拥有布局的祖先元素控制。IE显示引擎利用布局概念减少它的处理开销。一个元素要么自己对自身的内容进行计算大小和组织,要么依赖于父元素来计算尺寸和组织内容。
		
			为了调节这两个不同的概念,渲染引擎采用了hasLayout的属性,属性值可以为true或false。当一个元素的 hasLayout属性值为true时,我们说这个元素有一个布局(layout),当一个元素有一个布局时,它负责对自己和可能的子孙元素进行尺寸计算和定位。简单来说,这意味着这个元素需要花更多的代价来维护自身和里面的内容,而不是依赖于祖先元素来完成这些工作。因此,一些元素默认会有一个布局。当我们说一个元素“拥有layout”或“得到layout”,或者说一个元素“has layout”的时候,我们的意思是指它的微软专有属性 hasLayout 被设为了true 。一个“layout元素”可以是一个默认就拥有layout的元素或者是一个通过设置某些CSS属性得到layout 的元素。如果某个HTML元素拥有haslayout属性,那么这个元素的 haslayout的值一定只有true,haslayout为只读属性一旦被触发,就不可逆转。通过IE Developer Toolbar可以查看IE下HTML元素是否拥有haslayout,在IE Developer Toolbar下,拥有haslayout的元素,通常显示为“haslayout = -1”。
		
				二、默认拥有haslayout属性
			
				<html>, <body>
			
				<table>, <tr>, <th>, <td>
			
				<img>
			
				<hr>
			
				<input>, <button>, <select>, <textarea>, <fieldset>, <legend>
			
				<iframe>, <embed>, <object>, <applet>
			
				<marquee>
			
				三、触发haslayout属性
			
				很多情况下,我们把 hasLayout的状态改成true 就可以解决很大部分ie下显示的bug。 
			
				hasLayout属性不能直接设定,你只能通过设定一些特定的css属性来触发并改变 hasLayout 状态。下面列出可以触发hasLayout的一些CSS属性值。
			
				display 
			
				启动haslayout的值:inline-block 
			
				取消hasLayout的值:其他值 
			
				-------------------------------------- 
			
				width/height 
			
				启动hasLayout的值:除了auto以外的值
			
				取消hasLayout的值:auto
			
				--------------------------------------- 
			
				position 
			
				启动hasLayout的值:absolute 
			
				取消hasLayout的值:static 
			
				---------------------------------------- 
			
				float 
			
				启动hasLayout的值:left或right 
			
				取消hasLayout的值:none 
			
				--------------------------------------- 
			
				zoom 
			
				启动hasLayout的值:有值 
			
				取消hasLayout的值:narmal或者空值 
			
				(又一个ie私有属性,不兼容标准。)
			
				ie7还有一些额外的属性可以触发该属性(不完全列表): 
			
				min-height: (任何值) 
			
				max-height: (任何值除了none) 
			
				min-width: (任何值) 
			
				max-width: (任何值除了none) 
			
				overflow: (任何值除了visible) 
			
				overflow-x: (任何值除了visible) 
			
				overflow-y: (任何值除了visible)
			
				position: fixed 
			
				四、发现及使用
			 ----------------------------------------------------------------------------------------------------------------------- 
		- 上一篇:用户体验设计师常用的20款应用
- 下一篇:印刷时对文件原稿有什么要求
 北京标志设计
北京标志设计






 
		

 
		
