【发布时间】:2017-05-27 23:45:07
【问题描述】:
我知道有很多好的论据更喜欢 CSS 定位而不是基于表格的布局。我想知道的是 CSS 模型对于表的所有功能是否完整(假设是一个相对现代的浏览器)。是否有表格可以实现但使用 CSS 不可能或不切实际的布局?
【问题讨论】:
标签: html css html-table
我知道有很多好的论据更喜欢 CSS 定位而不是基于表格的布局。我想知道的是 CSS 模型对于表的所有功能是否完整(假设是一个相对现代的浏览器)。是否有表格可以实现但使用 CSS 不可能或不切实际的布局?
【问题讨论】:
标签: html css html-table
CSS 没有很好的方法来处理真正的表格数据。如果您的数据本身是按行和列结构化的,那么table 标签仍然是呈现它的最佳方式。虽然您可以在 CSS 中“伪造”它,但它会导致代码复杂且难以维护。
请注意,表格数据并不总是意味着数字表格。有时表单和其他类型的交互式内容也可以是表格的,如果它们的字段在逻辑上将它们自己分组为列和行。关键是要问自己,“如果我把数据写在一个页面上,而计算机与它无关,我会认为我的数据是行和列吗?”
【讨论】:
如果可以的话,我会切换到基于 css 的布局。语义论证是正确的,但有实际考虑。表格将:
有一些 css 显示属性(表格单元格等)可以模仿其中的一些,但我认为支持还不够广泛,无法使用它们(除非您可以控制用户的浏览器选择)。
我工作的网站在布局中需要完全动态的列宽。多个客户使用相同的站点模板,我不知道他们会在菜单或页眉或内容单元格中放入什么。 (而且不知道他们会发现什么吸引人,这是另一个问题......)主要内容框向下移动到下一行,否则背景颜色将无法填充所需的高度。
在一个完美的(对我而言)世界中,我们将有<table>s 用于表格数据,以及另一组几乎相同的布局标签 - 称之为<layout>(以及相应的行和单元格标签)。或者,将“模式”属性添加到<table> 标记 - 值将是“数据”和“布局”,以便屏幕阅读器和搜索引擎知道该做什么。也许在 html 6...
编辑:我应该补充一下,关于“浮动包装”的事情 - 目前有一个关于 SO 的问题,其答案非常有效here。它并不完美,我也太复杂了,但它在很多情况下都能解决问题。
【讨论】:
表格的意思是并且应该用于表格数据,而不是用于结构。就我个人而言,我认为表格被用作一种简单的出路,而且我从未遇到过 CSS 无法解决的情况。
对于垂直定位和全高列来说,表格肯定更容易,但这可以通过 CSS 来克服。
【讨论】:
table 的替代品用于布局方面做得很差——为什么,我不知道。 As for "the easy way out", I put it to you that when the choice is between a five-line <table> construct, or 80 lines of CSS plus three browser-specific hacks for IE6 and 7 and maybe 8, plus a JavaScript 块,因为 (Safari|Opera|xyz) 不支持这个那个伪类,“简单的出路”确实是正确的方法。
我有一个!在我看来,css 有一些东西是不可能的,但表格却是可能的。我昨天刚问了这个问题,得到了答案。
如果您想在一行中有两个单独的元素,无论宽度如何,您都必须使用表格。也就是说,如果这两个元素要么是内联的,要么是浮动的,如果它们是动态调整大小并变得比容器宽,它们将中断到下一行而不是溢出。如果您绝对要求它们保持在同一行,即使第二个会溢出容器的宽度,那么它们需要是表格行中的单元格。
edit:一些测试表明这仅适用于浮点数。如果您的元素是显示内联或内联的,那么您可以在容器上设置white-space:nowrap。然而,在这种情况下,似乎(无论如何在 FF 中)元素之间存在一个神秘的空间,对于我昨天的目的而言,这将是一个问题。
【讨论】:
看起来很糟糕?
说真的。没有。
人们使用表格的一个很好的例子是,表格字段以漂亮的方式呈现变得更加容易,但它完全混淆了页面的可访问性和语义含义。在 CSS 中稍加努力,您就可以达到同样的效果,而且效果更好。
【讨论】:
你可以用 CSS 做同样的事情,但它通常不那么优雅。
表格对于显示表格数据(即不是布局)很重要。它们是逻辑的、语义的结构,应该这样使用。它们包含列和行之类的概念,而单独的 CSS 不包含这些概念。
【讨论】:
表格可以做哪些 CSS 定位不能做的事情?
理论上,没什么,因为您可以使用display: table;、display: table-cell; 或其他类似的值作为display。
【讨论】:
ensure [float'ed etc] elements don't spill 和liquid col/row spans 之外,我看不到他们能做的任何事情,而你用CSS 做不到。在大多数情况下,此游戏中唯一可玩的牌是save time。
save you time
【讨论】:
在标记中使用它们(表格) 不必担心 定位或关于跨浏览器 兼容性。桌子几乎可以工作 跨浏览器的方式相同
【讨论】: