java selenium 操作浏览器实例分享

对于text-align 我们再熟悉不过了 , 可是它有个justify属性 , 平时很少用到 , 就鲜为人知了 。justify是一种文本靠两边布局方式 , 一般应用于书刊杂志排版;合理运用text-align:justify 有时会省去很多开发的时间 。
要想更好的理解 css , 尤其是 IE 下对 css 的渲染 , haslayout 是一个非常有必要彻底弄清楚的概念 。大多 IE
下的显示错误 , 就是源于 haslayout 。
什么是 haslayout ?
haslayout 是Windows Internet Explorer渲染引擎的一个内部组成部分 。在Internet Explorer中 , 一个元素要么自己对自身的内容进行计算大小和组织 , 要么依赖于父元素来计算尺寸和组织内容 。为了调节这两个不同的概念 , 渲染引擎采用了 hasLayout 的属性 , 属性值可以为true或false 。当一个元素的 hasLayout 属性值为true时 , 我们说这个元素有一个布局(layout)
当一个元素有一个布局时 , 它负责对自己和可能的子孙元素进行尺寸计算和定位 。简单来说 , 这意味着这个元素需要花更多的代价来维护自身和里面的内容 , 而不是依赖于祖先元素来完成这些工作 。因此 , 一些元素默认会有一个布局 。
当我们说一个元素“拥有layout”或“得到layout” , 或者说一个元素“has layout” 的时候 , 我们的意思是指它的微软专有属性 hasLayout 被设为了 true。
一个“layout元素”可以是一个默认就拥有 layout 的元素或者是一个通过设置某些 CSS 属性得到 layout 的元素 。通过 IE Developer Toolbar 可以查看 IE 下 HTML 元素是否拥有haslayout , 在 IE Developer Toolbar 下 , 拥有 haslayout 的元素 , 通常显示为“haslayout = -1” 。
特别注意的是 , hasLayout 在 IE 8 及之后的 IE 版本中已经被抛弃 , 所以在实际开发中只需针对 IE 8 以下的浏览器为某些元素触发 hasLayout。
一个元素触发 hasLayout 会影响一个元素的尺寸和定位 , 这样会消耗更多的系统资源 , 因此 IE 设计者默认只为一部分的元素触发 hasLayout (即默认有部分元素会触发 hasLayout , 这与 BFC 基本完全由开发者通过特定 CSS 触发并不一样) , 这部分元素如下:

java selenium 操作浏览器实例分享


如何激发 haslayout?
大部分的 IE 显示错误 , 都可以通过激发元素的 haslayout 属性来修正 。可以通过设置 css 尺寸属性(width/height)等来激发元素的 haslayout , 使其“拥有布局” 。
如下所示 , 通过设置以下 css 属性即可 。
* display: inline-block
* height: (任何值除了auto)
* float: (left 或 right)
* position: absolute
* width: (任何值除了auto)
* writing-mode: tb-rl
* zoom: (除 normal 外任意值)
Internet Explorer 7 还有一些额外的属性(不完全列表):
* min-height: (任意值)
* max-height: (除 none 外任意值)
* min-width: (任意值)
* max-width: (除 none 外任意值)
* overflow: (除 visible 外任意值)
* overflow-x: (除 visible 外任意值)
* overflow-y: (除 visible 外任意值)
* position: fixed
其中 overflow-x 和 overflow-y 是 css3 盒模型中的属性 , 目前还未被浏览器广泛支持 。
对于内联元素(默认即为内联的元素 , 如 span , 或 display:inline; 的元素) ,
width 和 height 只在 IE5.x 下和 IE6 或更新版本的 quirks 模式下触发 hasLayout。而对于 IE6 , 如果浏览器运行于标准兼容模式下 , 内联元素会忽略 width 或 height 属性 , 所以设置 width 或 height 不能在此种情况下令该元素具有 layout 。
zoom 总是可以触发 hasLayout , 但是在 IE5.0 中不支持 。建议使用 zoom: 1 来触发元素的 hasLayout。
具有“layout” 的元素如果同时 display: inline , 那么它的行为就和标准中所说的 inline-block 很类似了:在段落中和普通文字一样在水平方向和连续排列 , 受 vertical-align 影响 , 并且大小可以根据内容自适应调整 。这也可以解释为什么单单在 IE/Win 中内联元素可以包含块级元素而少出问题 , 因为在别的浏览器中 display: inline 就是内联 , 不像 IE/Win 一旦内联元素拥有 layout 还会变成 inline-block 。

推荐阅读