【发布时间】:2013-12-09 08:34:38
【问题描述】:
虽然这个问题通常很常见,但我还没有找到解决此版本中特定限制的答案。
我希望实现 the holy grail,但有一个重要警告:列必须保持从左到右的顺序,L(left),C(center ),R(right),不使用绝对定位。
除了上述主要要求外,兼容性也很高;请注意,我并不是要支持像 IE6 这样荒谬的东西;至少IE7会更好。 (是的,我认为这几天很荒谬)鉴于此,显而易见的calc() CSS 功能不适用。
在链接的文章中,A List Apart 引用“正确的源顺序”将其实现为 C-L-R,并且许多人都遵循这一趋势,认为 SEO 的好处是因为主页内容首先出现在源顺序中。此外,它在视觉上也有效。
不幸的是,SEO 和可访问性是两种不同的野兽。我注意到大多数 Web 可访问性工具(例如,JAWS)会以 DOM 顺序读取页面内容,这是可以理解的;自上而下,从左到右。
这是一些相当标准的 L-C-R 标记:
<div class="wrapper">
<div class="container">
<div class="column-l">
<div class="cell">Column L</div>
</div>
<div class="column-c">
<div class="cell">Column C</div>
</div>
<div class="column-r">
<div class="cell">Column R</div>
</div>
</div>
</div>
还有一个 CSS 的 sn-p 与之配套:
.wrapper {
width: 100%;
}
.container {
width: 90%;
margin-left: auto;
margin-right: auto;
}
.cell {
padding: 1em;
}
考虑到全宽 .wrapper 和 90% 宽度以边距为中心的 .container,我试图将 .column-l 和 .column-r 显示为固定宽度(比如说 300px ),以.column-c 作为流体。
通过为.column-l 赋予float: left; 属性,并将300px 中的margin-left 应用到.column-c,这两列就到位了:
.column-l {
width: 300px;
float: left;
}
.column-c {
margin-left: 300px;
}
问题是.column-r。它不想坐在我想要的地方。将float: right; 应用于.column-r 会将其置于其他两个之下(请注意,至少它在右侧)。即使我将margin-right: 300px; 应用于.column-c,也是如此。
【问题讨论】:
标签: html css accessibility multiple-columns