我从未在触摸设备上遇到position:absolute
的兼容性问题,您确定您没有将其与fixed
混淆吗?另外,padding
在所有浏览器中都表现出色,除非您将IE设置为怪异模式,您绝对不希望出现这种情况,因为有很多原因。
在您的布局中,我会使用position:absolute,因为您正在将所有东西挤在body内,而没有自然的滚动流。
绝对定位还具有一个巨大的优点;您可以进行以下操作:left:250px;right:0
,它将用250px的左边距扩展可用区域。我认为,这是在容器内编程流体布局的更合理方式,而不是使用浮动来进行负边距和其他hack技术。
另一个重要方面:使用绝对定位,您还可以将文章DIV移动到内容顺序中侧边栏之上。这是许多人忘记的事情,在大多数情况下,使屏幕阅读器和搜索引擎尽快到达内容是更有意义的。
它的缺点是IE6及以下版本不支持,但在
this article中有简单的解决方法(如您所见)。
使用浮动仍然是一种选择,但正如我所提到的,它可能会造成更多的麻烦,因为它们被设计为自然布局流的一部分。
我还会将
iframe
放在一个#article div内,这样与布局网格分开更有意义。
类似于
this
<div id="header">Head</div>
<div id="article">
<iframe src="http://cnn.com"></iframe>
</div>
<div id="sidebar">Sidebar</div>
还有CSS:
html,body {
width:100%;
overflow:hidden;
}
#header {
position:absolute;
left:0;
right:0;
height:49px;
border-bottom:1px solid #000;
}
#sidebar {
position:absolute;
top:50px;
bottom:0;
width:249px;
border-right:1px solid #000;
}
#article {
position:absolute;
top:50px;
left:250px;
right:0;
bottom:0;
}
#article iframe {
border:none;
width:100%;
height:100%;
}
最终,针对IE5和IE6的一些神奇技巧(如果您想走那么远):
<!--[if lt IE 7]>
<style>
body, #header { width:100% }
#sidebar, #article{ height: expression(document.body.clientHeight-50) }
#article{ width: expression(document.body.clientWidth-250) }
</style>
<![endif]-->
就兼容性而言,这应该是最兼容的。它可以在没有JavaScript的情况下工作,并且是流式的(或者现在称为“响应式”),因此应该适用于许多不同的屏幕尺寸。但是,根据您如何设置缩放默认值,您可能需要添加一些媒体查询来在最小屏幕上重新排列布局。
就速度而言,有一个关于渲染速度的大瓶颈,那就是使用JavaScript进行DOM操作。只需将其留出即可,然后您可以使用任何CSS技术。 (同意,IE5/6表达式不是可用的最快速度渲染方法,但它可以正常工作,我们正在谈论严重的遗留支持...)
有人可能会认为使用HTML5元素,例如HEADER
,ASIDE
和ARTICLE
是合适的,但您需要一个HTML5 shim脚本才能使其在某些IE版本中工作,然后您会失去一些没有安装JavaScript的兼容性。