二十多年前,表格是 HTML 中创建网页的主要方式。 它使网页构建者能够一致地控制使用某些“设计”构建页面。 网站不再只需要以线性方式从上到下排列——它们可以设置为具有左右和上下对齐的列。 当时,这被视为一项巨大的突破。
然而,表格从未被设计用于页面布局,事实上,当今天以这种方式使用时,它们存在各种各样的问题。 这是一个方便的技巧,但在当时,它非常受欢迎,特别是对于那些试图实现以前方法无法处理的超特定布局的人。
快进到今天,现在很明显表格布局方法存在大量问题。 可访问性是一个主要问题。<table>
、<th>
、<tr>
和 <td>
元素并非完全可访问,尤其是在它们嵌套多层时。 屏幕阅读器——读取网页内容并作为可访问性合规性衡量标准的设备——难以将其解析为连贯的内容块。 这并不是说表格不好;它们只是从未被设计为布局机制。
查看此表格布局。 随意通过 VoiceOver 或您可访问的任何屏幕阅读器软件运行它。
是的,此示例看起来非常像典型的网站布局,但它是仅使用表格制作的。 您可以看到,当我们开始将其用于表格数据以外的任何用途时,它变得多么臃肿且难以访问。
因此,在经历了 20 多年的考验之后,您可能会认为我们应该完全避免使用表格。 如果您从未发布过基于表格的布局,那么您无疑听过我们这些发布过的人讲的故事,而这些故事从来都不友好。 就好像我们已经将表格变成了“HTML 元素中的 Internet Explorer”。
但这并不完全公平,因为表格确实在网络上发挥着作用,并且在正确使用时确实可以访问。
表格旨在处理语义相关的并且最好以线性格式呈现的数据。 因此,是的,我们可以在 2020 年今天使用表格,并且在未来许多年里可能仍将如此。
这是一个用于显示其预期用途的表格:**表格数据**!
随着 21 世纪初对 Web 标准的推动,表格作为布局解决方案被推到了一边,转而采用其他方法,最值得注意的是 CSS float
属性。 设计师和开发人员都欢欣鼓舞,因为我们第一次有了真正的关注点分离,它可以让标记执行其需要执行的标记任务,而 CSS 执行其需要执行的可视化任务。 这使得代码既更简洁又更容易维护,因此,我们实际上可以专注于真正的标准,例如可访问性,甚至其他实践,例如 SEO。
看看(或者更确切地说听听)此示例中的区别?
我们中的许多人在过去都使用过浮动元素。 它们最初旨在允许内容围绕浮动到左侧或右侧的图像流动,并且仍然在文档流中。 现在我们已经获得了更新的布局功能——同样,例如网格和弹性盒——浮动元素也逐渐被淘汰,也许是因为有更好的方法来完成它们的工作,或者因为在被(滥)用很长时间后,它们也获得了与表格相同的坏名声。
但浮动元素仍然有用且相关! 事实上,我们必须使用它们才能使shape-outside
属性起作用。
一个合法的float
使用案例可能是为了围绕带样式的<blockquote>
包装内容。
网格、弹性盒和多列布局等 CSS 功能是我们如今可以使用的绝佳工具。 凭借更多布局可能性、更简洁和更易访问的代码,它们将在未来许多年内仍然是我们首选的布局方法。
在此弹性盒示例中,我们无需在本文中查看的相同布局中使用任何技巧或额外代码
因此,下次您考虑使用表格或浮动元素时,请充满信心地使用它们! 嗯,当您知道情况与它们的预期用途一致时。 我并不指望您离开这里后会对表格和浮动元素产生新的热情;只是,当正确使用时,它们是完全有效的技术,甚至仍然是我们整体工具集中不可或缺的一部分。
您只需在标记中使用表格并在 CSS 中将其设置为显示网格即可。 您可以获得具有良好样式功能的适当 HTML 标记。 您可能需要为 tbody、tfood 和 trs 使用 display: contents。
从技术上讲,这是可能的,但它可能会对当前浏览器产生可怕的可访问性影响:https://adrianroselli.com/2018/02/tables-css-display-properties-and-aria.html
可能错了,但如果您在表格元素上设置 display 属性,则会丢失语义值,并且表格可能不会像表格一样读出。 如果我没记错的话,表格还有一些其他的奇怪的 CSS 技巧,这些技巧会破坏屏幕阅读器按预期读取表格的能力。
但是您有很多不必要的包装标签:table 和 th。
使用 div,您可以拥有更少的包装器。
此外,您需要编写更多代码来禁用表格中的所有样式,div 默认情况下除了 display:block 之外没有任何内容
谢谢.. 这是一个可爱的过去回忆!
表格仍然非常有用,我认为对于电子邮件布局来说是必需的。
绞干机。就像您曾祖母的洗衣机。 她在将衣服晾干之前会先将其放入其中。
如其他评论中所述,CSS display 属性将破坏表格语义。 对于数据表来说,这是一个问题。 但是,如果您谈论的是布局表,那么您需要担心两件事
A. 您将使用错误的元素(尽管向
<table>
添加role="presentation"
可以避免出现WCAG SC 1.3.1 信息和关系错误);以及B. 当表格线性化时,阅读顺序可能会被打乱(WCAG SC 1.3.2 有意义的顺序),尽管对于上面的超级简单示例,它已经处于良好状态。
那些必须在电子邮件以及可访问性方面支持表格布局的人仍然在使用这些 20 世纪 90 年代和 2010 年代的修复方法。
另外,我推荐 Léonie Watson 的帖子和视频屏幕阅读器如何导航数据表,如果您之前没有经验。
在 2009 年写了一篇类似的文章(https://developer.cmzmedia.com/?p=71#more-71)。 我们需要意识到表格有其适当的预期用途。 感谢您为理性之声做出贡献。
这是一个简短的摘录
令我惊讶的是,在 2009 年,网络开发领域仍然有人不了解 HTML 表格的正确用法。
由于经济状况,我的自由职业网络开发工作很少,但仍然需要找到一份全职工作。 我联系了许多公司询问他们发布的职位,但很少收到任何回复。 几天前,我确实收到了一家公司的一封回复,这可能阐明了其他未回复的公司可能在想什么。 在这家公司在线查看我的简历后,他们回信说
他们并不在乎我的网站是否使用 HTML 表格进行页面布局,而只用于呈现表格数据。 对他们来说,唯一重要的是他们曾经听说过“表格不好”这个模糊的概念,并且他们接受了这个概念并付诸实践,却从未弄清事实真相。