标准参考
元素的包含块
W3C CSS2.1 规范中规定,绝对定位元素的包含块(containing block),由离它最近的 position 特性值是 "absolute"、"fixed"、"relative" 之一的祖先元素组成;如果这个祖先元素不存在,则包含块由根元素组成。
绝对定位元素的定位
绝对定位元素的定位,依赖于其包含块。也就是说,当绝对定位元素的 "top"、"left" 值被设置之后,绝对定位元素会根据这两个值,相对于包含块产生位移。
根元素
在文档树中,每一个节点都会有唯一的一个父节点,而根元素例外,它处于文档树的最顶端,没有父节点。
关于根元素的详细资料,请参考 CSS2.1 规范 http://www.w3.org/TR/CSS2/conform.html#root 中的内容。
关于包含块的详细资料,请参考 CSS2.1 规范 10.1 Definition of "containing block" 中的内容。
问题描述
Firefox 浏览器对 TABLE 中绝对定位元素包含块的判定有错误,可能会导致绝对定位元素位置跟其他浏览器中有差异。
造成的影响
1. 绝对定位元素的位置
根据 W3C 标准,绝对定位元素的位置跟它的包含块有关。所以,当它处于一个非 static 定位的 TABLE 元素中时,Firefox 和其他浏览器对元素包含块判定不同,因此,对于相同的 top 和 left 值,Firefox 与其他浏览器中绝对元素的位置可能会不同。
2. 绝对定位元素的宽度计算规则
根据 W3C 标准,如果绝对定位元素的宽度没有设置或被设置为 "auto",那么此元素的宽度计算应该采用 shrink-to-fit 的算法,在算法中,需要计算元素的 available width,而 available width 就是元素包含块的宽度,所以,Firefox 中,在这种情况下,会导致绝对定位元素宽度与其他浏览器中不同。
受影响的浏览器
Firefox 对 TABLE 中绝对定位元素包含块的判定有错误。
问题分析
在 Firefox 中,绝对定位元素的包含块的 'display' 特性是 'table' 且是绝对定位,则绝对定位元素对包含块判断的有错误。
分析以下代码:
<div id="Container" style="width:200px; height:200px; position:absolute; background-color:silver;">Container
<div id="A" style="display:table; position:absolute; width:100px; height:100px; top:100px; left:100px; background-color:green;">TABLE
<div id="AP" style=" position:absolute; width:50px; height:50px; top:50px; left:50px; background-color: gold;">
TEXT
</div>
</div>
</div>
Container 是 200px*200px 的绝对定位元素。
A 是一个绝对定位的 DIV 元素( 'display:table' ),top 和 left 都是 100px。
AP 是一个绝对定位的 DIV 元素,它的 top 和 left 都是 50px。
根据 W3C 标准, A 应该相对于 Container 向下向右位移 100px,A 本身的尺寸是100px*100px,所以 A 应该位于 Container 的右下角;同理,AP 应该相对于 A 向下向右位50px,位于 A 的右下角。
这段代码在不同的浏览器环境中表现如下:
Firefox IE Opera Safari Chrome
将 DIV 换成一个 TABLE 元素,或者,把 DIV 的 ’display' 属性设置成 'inline-table', 效果相同。
可见,在 Firefox 中,AP 并没有依赖 A 来定位,而是依赖的 Container。因此,可以得知 AP 的包含块不是 A,而是 Container,Firefox 在这种情况下,并没有遵循标准,导致包含块判断错误。
解决方案
这是 Firefox 的一个 bug,绝对定位元素无法根据 'display' 特性是 'table' 且是绝对定位的祖先元素定位。为达到相同的效果可以改变元素的 containing block 或者改变元素的定位方式。
为达到相同的效果,可以采用如下方式替代:
改变元素的 containing block:让绝对定位元素相对于 TABLE 元素的单元格定位,即,在 TD 上设置 'position:absolute' ;
改变元素的定位方式:把绝对定位元素的 'absolute' 改为 'relative' ,用相对定位。
目前我本人用的解决办法是给td标签添加background属性来解决的。background: #ff0000 url(/i/eg_bg_03.gif) no-repeat 100% 0;100% 0 即可让绚丽的图片右上角显示啦。
http://www.w3school.com.cn/tiy/t.asp?f=csse_background。可参考w3c测试地址自测。
相关推荐
在Firefox浏览器中,当涉及到CSS布局的绝对定位(absolute positioning)时,可能会遇到一个常见的问题:元素重叠导致某些元素变得不可点击。这个问题通常出现在有多个绝对定位元素且它们的位置相互覆盖时。本文将...
Firefox的用户界面是用户与浏览器交互的第一层,它包括地址栏、菜单、选项卡等元素。用户界面的设计需要考虑到易用性和美观性,同时也需要能够灵活地适应不同的操作系统环境。Firefox使用了XUL(XML User Interface ...
### 火狐Firefox浏览器安装Selenium IDE的详细步骤 #### 一、Selenium IDE简介 Selenium IDE是一款基于Firefox的集成开发环境工具,它允许用户通过简单的点击操作来记录和回放测试脚本,无需编写任何代码。这对于刚...
火狐Firefox浏览器驱动geckodriver是自动化测试领域中的一个重要工具,主要用于与Firefox浏览器进行交互,它是基于Selenium WebDriver标准的。Selenium WebDriver是一个用于Web应用程序自动化测试的接口,允许程序员...
首先,Selenium是一个开源的Web应用程序自动化测试框架,它支持多种浏览器,包括Firefox。Selenium WebDriver是Selenium的一部分,它允许通过编程语言直接控制浏览器,执行一系列用户操作,如点击按钮、填写表单、...
亲测 火狐Firefox浏览器的插件Video DownloadHelper 8.0 的合作应用VdhCoAppSetup2.0.11
Firefox是一款开源的网络浏览器,以其安全、可定制性以及对最新Web技术的支持而广受欢迎。 在使用WebDriver模拟火狐Firefox浏览器时,我们需要以下关键知识点: 1. Selenium WebDriver:Selenium是一个强大的Web...
firefox浏览器52.3 arm版本
这可能是由于IE6对定位计算的一种错误实现,导致在特定条件下无法识别绝对定位元素。 4. **CSS hack和兼容性解决方案**: 解决此类问题的一种策略是使用CSS hack,专门为IE6编写特殊的样式规则。例如,可以使用...
adguard_firefox浏览器插件 20230618
android 4.0 firefox 浏览器。支持最新版4.0
firefox浏览器插件firefox浏览器插件firefox浏览器插件firefox浏览器插件firefox浏览器插件firefox浏览器插件firefox浏览器插件
经过三天的苦战,查询无数的国外网站终于实现了对IE和FireFox浏览器的URl地址实时监控。利用API和DDE分别对IE和FireFox进行了浏览器地址获取,完整的源码程序,与大家分享学习。后期将完善,实现对IE,FireFox,360,...
本文将围绕Firefox浏览器与Internet Explorer(简称IE)之间关于JavaScript脚本的兼容性差异进行详细探讨,并通过具体的示例来帮助开发者更好地理解和解决实际开发过程中遇到的问题。 #### 二、关键知识点详解 ###...
创建BFC的常见方法包括浮动元素、绝对定位元素、`display: inline-block`、`table-cell`、`table-caption`以及设置`overflow`属性为非`visible`值的元素。 ##### `hasLayout`与`BFC`异同分析 1. **浮动元素的处理*...
本文将详细介绍如何在不同情况下恢复Firefox浏览器中的丢失书签,包括常规的本地恢复方法,以及一些可能不被广泛知晓的技巧。 #### 二、基础知识:了解书签存储位置 在深入讨论具体的恢复步骤之前,首先需要了解...
在进行自动化测试时,Firefox Geckodriver提供了一套丰富的API,可以用来定位和操作DOM元素,执行网络请求监控,以及处理各种浏览器特定的事件。这使得开发者能够对网页应用进行全面的测试,确保其在不同环境下的...