对于 body 的子节点绝对定位问题,我们一般设置 top 属性,即假设浏览器窗口左上角是 0,0 坐标,根据这一原则来进行计算合适的top值,使绝对定位元素定位到合适位置。
但是 如果用到 bottom 属性,浏览器的表现就有差异了。
假设
bottom 属性为 0
,这时就要明确到底哪个是绝对定位元素的初始包含块,根据 w3c 规范以及css权威指南,这个初始包含块由用户代理浏览器指定,那么各个浏览果然就出现了不一致的地方。
对于没有滚动条的情况,ie,firefox 都一样,都定位在页面底部。
当页面出现滚动条时,如果初始就显示绝对定位的div,那么 ie,firefox 都一样,都定位在页面底部。下一步将滚动条拉到底部,按钮隐藏掉绝对定位的div,再按钮显示,则
1.firefox ie8
,7
下面绝对定位的div仍出现在原来位置(滚动条上面),故现在看不到了
2.ie6 下绝对定位的div 出现在当前的页面底部,可以看到
应该是 IE6 的 bug
:(090622)
ie6 回到了混杂模式,虽然我申明页面为标准模式 。
混杂模式下 body 下的绝对定位以 body 为定位块,所以定位到了页面底部。
标准模式下 一般都定位以第一屏viewport视窗为定位块,所以定位到了第一屏窗口底部。(为什么第一屏?我也不知道,期待您的答案
)
|
则可见运用 bottom 还是很不适应多平台的,那么有两个解决方法可以使得各个浏览器表现相同:
1.设置 html.body {margin:0;padding:0;},所有的垂直定位都用 top 参考浏览器顶边来做,即不考虑包含块的具体下边界。
2.body 上面设置 position:relative 显式指定以 body元素作为初始定位块。
附录:测试代码(打开页面,先点击隐藏按钮,再到页面底部点击显示按钮):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
<head>
<title>absolute测试</title>
</head>
<body>
<input type='button' id='b2' value='先点隐藏' />
<div id='p1' style='border:1px solid green;position:absolute;right:0;bottom:0;width:100px;height:100px;'>
</div>
1<br/>
1<br/>
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>v
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>v
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>1<br/>
<input type='button' id='b1' value='再点显示' />
</body>
<script type='text/javascript'>
document.getElementById('b2').onclick = function (evt) {
document.getElementById('p1').style.display = 'none';
};
document.getElementById('b1').onclick = function (evt) {
document.getElementById('p1').style.display = '';
};
</script>
</html>
参考阅读:
viewport w3c 定义
absolute position w3c 定义
Initial Containing Block w3c定义:UA决定
html 小于 viewport 的测试
各种情况的详细测试(包括rtl)
分享到:
相关推荐
绝对定位则脱离了正常的文档流,元素的位置基于最近的已定位祖先元素(如果存在的话),否则将相对于初始包含块(通常是body)。设置`position: absolute;`后,我们可以使用`top`、`right`、`bottom`和`left`属性来...
如果没有这样的祖先,元素将相对于浏览器窗口或视口(初始包含块)定位。 下面是一个简单的例子,展示了如何使用`absolute`定位元素: ```css #box_relative { position: absolute; left: 30px; top: 20px; } `...
程序实现单点绝对定位通常包括以下步骤: 1. **信号捕获**:接收器锁定卫星信号,并解析出卫星的发射时间和编码信息。 2. **载波相位跟踪**:使用循环移位器或锁相环等硬件设备,跟踪载波相位的变化,获取相位测量...
### CSS定位详解:绝对定位与相对定位 #### 相对定位(Relative Positioning) 相对定位是一种常见的CSS定位方式,它允许元素相对于其正常位置进行偏移。这种定位不会影响其他元素的位置。 - **定义**: 当元素...
其中,绝对定位是相对于最近的非静态定位祖先元素进行定位,如果没有这样的祖先,那么它将相对于初始包含块(通常是浏览器窗口)定位。绝对定位允许我们将元素精确地放置在页面上的任何位置,不受其他元素的影响。 ...
当设置一个元素的`position`属性为`absolute`时,该元素将从正常文档流中移除,然后相对于最近的已定位祖先元素(如果存在)或相对于初始包含块(通常是浏览器窗口)进行定位。通过调整`top`、`bottom`、`left`和`...
FB库专为QD75/LD75系列定位模块设计,包含了一系列用于控制定位模块的功能块。 2. **FB库功能内容**:详细列出了FB库中提供的各种功能块及其用途,包括但不限于: - `M+D75_SetBPARAM1`:用于设置基本参数1; - `...
这种定位方式会根据最近的非静态定位祖先元素(如果没有这样的祖先,则相对于初始包含块,通常是浏览器窗口)来定位元素。然而,在早期的浏览器,如Internet Explorer 6 (IE6),对这一特性支持并不完美,特别是对于`...
如果找不到已定位的祖先,它将相对于初始包含块(通常是浏览器窗口)定位。使用 `position: absolute` 及相应的偏移属性,可以精确地将元素放置在页面上的任何位置。绝对定位在创建弹出窗口、导航菜单或其他需要精确...
)时,它会脱离正常的文档流,并相对于最近的已定位的祖先元素进行定位,如果不存在这样的祖先元素,那么它将相对于初始包含块定位,通常是浏览器窗口。这种定位方式使得元素可以自由地放置在页面的任何位置。而当...
- **Absolute**:绝对定位,元素相对于最近的已定位祖先元素进行定位,若无已定位的祖先元素,则相对于初始包含块定位。元素从正常文档流中移除,不影响其他元素布局。 - **Fixed**:固定定位,与绝对定位类似,但...
### GPS测码伪距绝对定位的算法探讨 #### 引言 全球定位系统(GPS)在现代社会中的应用无处不在,从汽车导航到精准农业,再到军事应用,其精确的位置和时间信息至关重要。其中,GPS测码伪距单点定位技术因其快速...
如果找不到这样的祖先,它将相对于初始包含块(通常是视口)定位。 在模拟昵图网首页的过程中,可能使用绝对定位来精确控制某些元素如导航栏、浮动元素或侧边栏的位置。同时,结合使用`z-index`属性,可以调整元素...
例如,一个相对定位的容器内可以包含多个绝对定位的子元素,这样子元素可以根据容器的位置进行布局,同时保持其相互间的堆叠关系。 理解并熟练掌握相对定位和绝对定位是成为CSS布局高手的关键步骤。通过实践和实验...
绝对定位则是相对于最近的非静态定位祖先元素进行定位,如果找不到这样的祖先,那么它会相对于初始包含块(通常是浏览器窗口)定位。固定定位则让元素始终相对于浏览器窗口定位,即使页面滚动,元素位置依然不变。 ...
- 绝对定位的包含块是最近的非`static`定位的祖先元素,否则是初始包含块。 - 固定定位的包含块始终是视口。 4. **浮动(Floating)** - **浮动** 是通过`float`属性实现的,允许元素向左或向右浮动,脱离文档流...
绝对定位将元素相对于最近的非静态定位祖先元素进行定位,如果没有这样的祖先,则相对于初始包含块(通常是body)。固定定位使元素相对于浏览器窗口定位,即使页面滚动也不会改变位置。粘性定位则结合了相对定位和...
本文详细介绍了GPS绝对定位的基本原理和解算方法,并通过主成分法有效解决了病态方程组的问题。这种方法能够提高GPS定位的精度,对于手持式GPS接收机在矿产资源勘察定位测量中的应用具有重要意义。未来的研究方向...
永磁同步直线电机是现代工业自动化领域中极为重要的一种驱动设备,其特点包括行程长、推力大和响应速度快,使其在精密定位和高速运动控制中得到广泛应用。在伺服控制系统中,准确的初始位置检测对于直线电机的正常...
标题中的“Delphi实现的网页绝对定位打印控件(自用)”表明这是一个使用Delphi编程语言开发的控件,主要用于网页内容的打印,并且具备在打印时进行精确的绝对定位功能。Delphi是一款面向对象的可视化集成开发环境...