RT8003: 'text-align' 特性在 IE6 IE7 IE8(Q) 中可以影响块级元素的对齐方式,并且在所有浏览器的混杂模式中均不能被 TABLE 元素继承
2011-12-28 14:04
567 查看
标准参考
根据 CSS 2.1 规范中的描述,'text-align' 特性描述了一个块的行内内容的对齐方式。'text-align' 特性具备继承性,可以应用于块级元素、表格单元格及行内块级元素。也就是说,'text-align' 可以应用到块级元素、表格单元格及行内块级元素上,但仅对它们的行内内容起作用。
但在更早版本的 CSS 1 规范中却规定,'text-align' 只能应用到块级元素,并且对它们所有的内容都起作用。
关于 'text-align' 特性的最初说明请参考 W3C CSS 1 规范:5.4.6 'text-align' 中的内容。
关于 'text-align' 特性的现行说明请参考 W3C CSS 2.1 规范:16.2 Alignment: the 'text-align' property 中的内容。
问题描述
'text-align' 特性在 IE6 IE7 IE8(Q) 中可以影响块级元素的对齐方式,并且在所有浏览器的混杂模式中均不能被 TABLE 元素继承,这是规范版本升级造成的历史遗留问题,最新的 CSS 2.1 规范已不允许 'text-align' 作用于非行内元素,并允许 TABLE 元素继承该特性。造成的影响
这个问题将造成页面整体或局部的对齐方式在不同浏览器中出现很大的差异。受影响的浏览器
IE6 IE7 IE8(Q) Firefox(Q) Chrome(Q) Safari(Q) Opera(Q) |
---|
问题分析
这是一个 CSS 规范变更导致的问题,较早发布的浏览器并未执行 CSS 2.1 规范,而是执行了 CSS 1 的规范,因此产生了兼容性问题。1. CSS 1 规范中的 'text-align' 特性
在 CSS 1 规范中说明 'text-align' 仅应用于块级元素,是可继承的。它描述了它所应用到的元素的内容的对齐方式。如下:Value: | left | right | center | justify |
---|---|
Initial: | UA specific |
Applies to: | block-level elements |
Inherited: | yes |
Percentage values: | N/A |
DIV.center { text-align: center }
那么应用上述规则的 DIV 内的所有内容都将居中对齐。
注:
1. “可以应用于”是指目标元素能够有该特性,在本文中,一个元素拥有特性 'text-align' 并不会影响其自身的水平对齐方式,而是会影响其中包含的内容。
2. “可以作用于”是指该特性可以影响到目标元素。
3. CSS 1 规范中没有提到 'text-align' 可以作用于表格,实际在目前仍执行 CSS 1 规范的浏览器中,表格不能继承 'text-align' 的设置,但可以单独为表格设置 'text-align'。
2. CSS 2.1 规范中的 'text-align' 特性
现行的 CSS 2.1 标准规范,对于 'text-align' 的定义更加清晰明确,其描述了一个块中行内内容的对齐方式。作用范围也从块级元素扩展到了表格的单元格及行内块级元素。如下:Value: | left | right | center | justify | inherit |
---|---|
Initial: | a nameless value that acts as 'left' if 'direction' is 'ltr', 'right' if 'direction' is 'rtl' |
Applies to: | block-level elements, table cells and inline blocks |
Inherited: | yes |
Percentage: | N/A |
Media: | visual |
Computed value: | the initial value or as specified |
DIV.center { text-align: center }
那么应用上述规则的 DIV 内的所有行内内容都将居中对齐。
3. 各浏览器中的差异:
分析以下代码:<div style="width:200px; margin:5px 0; background:lightgrey; text-align:center; font:14px Verdana;"> <span>text</span> <div style="width:150px; background:dimgray;"> <span>text</span> </div> <table style="width:100px; background:red; font:14px Verdana;"> <tr> <td>text</td> </tr> </table> </div>
以上代码最外层的 DIV 元素设置了 'text-align:center',其中嵌套了块级元素、行内元素和表格。并且其中的块级元素和表格都设置了小于最外层 DIV 的宽度。(如果它们的宽度不小于最外层 DIV 的宽度则不能直观的看出它们自身水平对齐的差异。)
在各浏览器中的表现如下:
IE(Q) | |
---|---|
Firefox(Q) Chrome(Q) Safari(Q) Opera(Q) | |
IE6(S) IE7(S) | |
IE8(S) Firefox(S) Chrome(S) Safari(S) Opera(S) |
在 IE6 IE7 IE8(Q) 中,'text-align' 特性可以影响块级元素内的所有内容,但在 IE(Q) 中,表格元素并不能继承 'text-align' 特性。
在 IE8(S) Firefox(S) Chrome(S) Safari(S) Opera(S) 中,'text-align' 特性仅影响块级元素的行内内容,但同样,在这些浏览器的混杂模式(Q)中,表格元素仍不能继承 'text-align' 特性。
可以总结出以下关于 'text-align' 特性在不同浏览器中的表现的表格:
浏览器 | 影响块级元素及表格元素 | 可被表格元素继承 |
---|---|---|
IE(Q) | 是 | 否 |
Firefox(Q) Chrome(Q) Safari(Q) Opera(Q) | 否 | 否 |
IE6(S) IE7(S) | 是 | 是 |
IE8(S) Firefox(S) Chrome(S) Safari(S) Opera(S) | 否 | 是 |
解决方案
1.避免在包含宽度比自身小的块级元素或表格的元素上设置 'text-align' 特性;2.'text-align' 仅应用于行内元素的水平对齐控制,需要控制块级元素的水平对齐时,建议使用 'margin:0 auto' 来设定块级元素居中对齐,对于 IE(Q) 不支持使用 'margin:0 auto' 来居中块级元素,可以使用 CSS 做单独的处理,居左或居右对齐可以分别使用 'float:left' 或 'float:right' 来实现。
IE(Q) 不支持使用 'margin:0 auto' 来居中块级元素,可以使用以下代码达到同样效果:
<div style="width:200px; border:1px solid black; text-align:center;"> <div style="width:100px; height:100px; background:lightgrey; text-align:left;">text</div> </div>
相关文章推荐
- IE6IE7IE8(Q) 中元素的 'padding-top' 遇到 'clear' 特性在某些情况下复制到 'padding-bottom'
- SJ9006: 在 IE6 IE7 IE8(Q) 中不能在 JSON 字符串或对象直接量的最后一个键值对后加 ','
- IE6 IE7 IE8(Q) 不支持 'outline' 特性
- 多图片上传+图片预览,兼容所有浏览器 IE5/IE6/IE7/IE8/IE9/Chrome/Safari/Firefox/Opera/
- 多图片上传+图片预览,兼容所有浏览器 IE5/IE6/IE7/IE8/IE9/Chrome/Safari/Firefox/Opera/
- HTML代码中,加这段声明 就可以 用IE7的方式 解析了,让IE8始终以IE7兼容模式运行网页
- IE6 IE7 IE8 未按预期方式处理 content-type 为 text/plain 的内容
- text-align 属性规定元素中的文本的水平对齐方式。
- IE7兼容模式可以解决IE8 FF浏览器下出现文字重叠问题
- 各浏览器中 IFRAME 元素的 scrolling 属性与其子页面 HTML 与 BODY 元素 'overflow' 特性的制约关系有差异
- Jquery 获取指定 table下 所有 type='text' 的 input
- ie6、ie7、ie8下支持js 使用vml style.addRule('v\\:line,v\\:stroken',"behavior:url(#default#VML);")
- 浏览器兼容 IE6、IE7、IE8、Firefox、Opera CSS hack区分
- Eigen库对齐问题:declspec(align('16')) 的形参将不被对齐
- 各种IE兼容模式代码,IE6,IE7,IE8,IE9,IE10
- 不会因不同浏览器区别IE6,IE7让布局崩溃的弹出"确认"对话框
- 区分IE6、IE7、IE8及标准浏览器的最佳方法
- 浏览器HTTP_USER_AGENT汇总——Firefox、Chrome、IE9、IE8、IE7、IE6
- 把数组所有元素,按照“参数=参数值”的模式用“&”字符拼接成字符串
- ie6 ie7 ie8 共存以及Firefox浏览器CSS兼容写法