设计不足的响应式表格

Avatar of Chris Coyier
Chris Coyier 发布

DigitalOcean 为您旅程的每个阶段提供云产品。 立即开始使用 200 美元的免费额度!

我第一次在 2011 年写了关于响应式数据表格的文章。 当响应式网页设计刚开始流行时,数据表格这类小问题就需要克服。 <table> 元素的本质是,它们根据所包含内容的最小宽度,而这个宽度很容易超过小型屏幕设备的宽度。

我当时制作的这张图片很好地说明了这个问题

但是…… 也许它们并没有那么糟糕。 如果左侧的图片是可滚动的,那么也许它并没有那么糟糕。 事实上,这正是我最近在 CSS-Tricks 上所做的。 我认为,当您不知道表格包含什么内容时,这是处理响应式表格最安全的方式。 这里的情况就是这样,我需要设置应用于所有博客文章的基本表格样式,这些文章可能包含表格。

可滚动表格的核心思想是将其包裹在一个 <div> 中,该 <div> 设置了 overflow: auto;。 这样,里面的 <table> 就可以超过父元素的宽度,但不会“撑破宽度”,而是会触发滚动条。 不过,这还不够,所以 这是 Adrian Roselli 的真实想法。 包裹的 <div> 需要是可聚焦的,并且要有标签,因此

<div role="region" aria-labelledby="Caption01" tabindex="0">
  <table>
    <caption id="Caption01">Appropriate caption</caption>
    <!-- ...  -->
  </table>
</div>

然后在您完成所有其他操作的情况下,应用滚动和聚焦样式

[role="region"][aria-labelledby][tabindex] {
  overflow: auto;
}

[role="region"][aria-labelledby][tabindex]:focus {
  outline: .1em solid rgba(0,0,0,.1);
}

如果您要进一步设计响应式表格,有 各种各样的选项。 一种经典的方法是对许多元素使用 display: block,这意味着同一行中的所有数据 (<tr>) 最终会堆叠在一起,形成一段内容,不太可能破坏父元素的宽度。 您可以使用伪元素正确地获得所有数据标签。 但是,这种方法只有在单独的每一行内容都能完全理解的情况下才有意义。 并非所有表格都是这种情况。 表格的目的可能是交叉引用数据,在这种情况下,您使用这种方法就破坏了这种目的。 所以,再次强调,当您知道表格的确切内容和用途时,响应式表格有很好的方法。 但是,当您 *不知道* 时,最好的响应式解决方案是确保它们可以滑动。

直接链接 →