问题 表格能做什么,CSS定位不能?


我知道有很多好的参数比基于表格的布局更喜欢CSS定位。我想知道的是CSS模型是否完整(假设一个相对现代的浏览器)相对于表的所有功能。表格是否可以实现CSS不可能或不切实际的布局?


7605
2018-04-01 16:51


起源



答案:


如果可以的话,我会切换到基于CSS的布局。讽刺论证是正确的,但有实际考虑。表格将:

  • 绝对防止'浮动换行',其中div将落到下一行,因为没有足够的空间
  • 给你相同高度的列
  • 允许动态布局,直到运行时才知道宽度和高度
  • 提供colspans和rowpans
  • 减少SO问题的数量,询问如何做没有表的东西:)

有css显示属性(table-cell等)模仿其中的一些,但我不相信支持已经足够广泛使用它们(除非你可以控制用户的浏览器选择)。

我工作的网站需要在布局中有竞争力的动态列宽。多个客户使用相同的网站模板,我不知道它们将放入菜单或页眉或内容单元格中。 (并且不知道他们会发现什么有吸引力,这是另一个问题...)使用单个外部表布置网站的主要部分允许我需要的灵活性,而不用担心稍微过宽的菜单会推动主内容框下移到下一行,或者背景颜色不会填充所需的高度。

在完美(对我而言)的世界里,我们会有 <table>用于表格数据,另一个用于布局的几乎相同的标签集 - 称之为 <layout> (以及相应的行和单元格标签)。或者,将“模式”属性添加到 <table> tag - 值为'data'和'layout',以便屏幕阅读器和搜索引擎知道该怎么做。也许在html 6 ...

编辑:我想补充说,关于'浮动包装'的事情 - 在SO上有一个当前的问题,答案非常有效 这里。它并不完美,而且我太复杂了,但在很多情况下它会解决问题。


5
2018-04-01 17:14



首先是+0,第二和第三是-1,第四和第五是+1。 :d - ANeves
@sr pt:我很高兴你给了我第一个+0而不是-0 ...说真的,我已经看到了大部分这些东西的部分解决方法,但从来没有真正的动态宽度(我的第3个)。你有东西给我吗? - Ray


答案:


如果可以的话,我会切换到基于CSS的布局。讽刺论证是正确的,但有实际考虑。表格将:

  • 绝对防止'浮动换行',其中div将落到下一行,因为没有足够的空间
  • 给你相同高度的列
  • 允许动态布局,直到运行时才知道宽度和高度
  • 提供colspans和rowpans
  • 减少SO问题的数量,询问如何做没有表的东西:)

有css显示属性(table-cell等)模仿其中的一些,但我不相信支持已经足够广泛使用它们(除非你可以控制用户的浏览器选择)。

我工作的网站需要在布局中有竞争力的动态列宽。多个客户使用相同的网站模板,我不知道它们将放入菜单或页眉或内容单元格中。 (并且不知道他们会发现什么有吸引力,这是另一个问题...)使用单个外部表布置网站的主要部分允许我需要的灵活性,而不用担心稍微过宽的菜单会推动主内容框下移到下一行,或者背景颜色不会填充所需的高度。

在完美(对我而言)的世界里,我们会有 <table>用于表格数据,另一个用于布局的几乎相同的标签集 - 称之为 <layout> (以及相应的行和单元格标签)。或者,将“模式”属性添加到 <table> tag - 值为'data'和'layout',以便屏幕阅读器和搜索引擎知道该怎么做。也许在html 6 ...

编辑:我想补充说,关于'浮动包装'的事情 - 在SO上有一个当前的问题,答案非常有效 这里。它并不完美,而且我太复杂了,但在很多情况下它会解决问题。


5
2018-04-01 17:14



首先是+0,第二和第三是-1,第四和第五是+1。 :d - ANeves
@sr pt:我很高兴你给了我第一个+0而不是-0 ...说真的,我已经看到了大部分这些东西的部分解决方法,但从来没有真正的动态宽度(我的第3个)。你有东西给我吗? - Ray


CSS没有很好的方法来处理真正表格的数据。如果您的数据本身是按行和列结构化的,那么 table 标签仍然是呈现它的最佳方式。虽然你可以在CSS中“伪造它”,但是由于没有真正的原因,它会导致复杂,难以维护的代码。

请注意,表格数据并不一定只是表示数字表。有时,表单和其他类型的交互式内容也可以是表格式,如果它们的字段在逻辑上将自己分组为列和行。关键是要问自己,“如果我在页面上写出来并且计算机与它无关,我会将数据视为行和列吗?”


6
2018-04-01 17:01



+1,尽管“没有真正的理由” - ANeves
@sr pt - 我不同意。最终结果是用户看到的内容。如果使用全部CSS设计让你感觉内心很好,但是你需要花费三倍的时间,那么除了花费你的公司时间和金钱之外你什么也没做。 - Nemi
丹是正确的 - '表格'的一个很好的定义是“在行和列中整齐排列的东西”。像大多数数据输入表单。像报纸式的专栏。像大多数网站的主要结构。 - Ray
我希望我能不止一次地赞成这个...... - Nemi
请注意,我仍然没有提倡使用表格进行主站点布局。 CSS对表模型提供了许多改进。但是站点内部有许多元素 - 例如具有多列的表单,其中字段需要按列对齐 - 是 结构性表格。这不仅仅是布局方便。 - Dan Story


表是指并且应该用于表格数据,而不是用于结构。我个人认为表格被用作一种简单的方法,我从未遇到过用CSS无法解决的情况。

对于垂直定位和全高度列,表格肯定更容易,但这也可以通过CSS克服。


4
2018-04-01 16:55



我不是一个提倡在编程中偷工减料的人,但有些情况下,“黑客”只比做一些“理想”的方式更好。 Html表工作。在每个浏览器中。总是。它们易于理解和维护。在布局div时,CSS与此相反。 - Nemi
@Nemi - 嘘!那么标准是什么? - Dustin Laine
+ -0我恭敬地不同意。那里 是 没有表或JavaScript无法处理的情况。 CSS标准的设计者在提供替代品方面表现不佳 table 用于布局 - 为什么,我不知道。至于“简单的出路”,我告诉你,当选择在五线之间时 <table> 构建,或80行CSS加上三个浏览器特定的黑客为IE6和7可能8,加上一块JavaScript,因为(Safari | Opera | xyz)不支持这个和那个伪类,“简单的出路“确实是正确的方式。 - Pekka 웃


我有一个!有些东西在我看来不可能用css,但可以用表格。我昨天刚问了一个问题并得到了答案。

如果在一行上有两个单独的元素,无论宽度如何,都必须使用表。也就是说,如果这两个元素是内联的或浮动的,如果它们是动态大小并且变得比容器宽,它们将分裂到下一行而不是溢出。如果你绝对要求它们保持在同一条线上,即使第二条线会溢出容器的宽度,那么它们也需要是表格行中的单元格。

编辑:一些测试显示这只适用于浮点数。如果您的元素以内联或内联方式显示,则可以进行设置 white-space:nowrap 在容器上。然而在这种情况下,似乎(无论如何在FF中)元素之间存在一个神秘的空间,这对于我昨天的目的而言应该是一个问题。


1
2018-04-01 17:00



我不确定这是真的。有一些方法可以控制CSS中的包装行为。 - jlew
昨天有人在我的问题上骗了我。如果我能找到它会删除。 - Tesserex
也许他们在某种有限的情况下是正确的。作为一般性陈述,我认为这不准确。 - jlew


看起来很糟糕?

但是说真的。没有。

人们使用表格的一个很好的例子是,它们以一种漂亮的方式呈现表单字段变得容易得多,但它完全混淆了页面的可访问性和语义含义。你可以用更多的CSS努力来实现同样的目标。


0
2018-04-01 16:56





你可以用CSS做同样的事情,但它通常不那么优雅。

表格很重要 表格数据 (即不是布局)。它们是逻辑的,语义的构造,应该这样使用。它们包含像列和行这样的概念,而CSS本身却没有。


0
2018-04-01 16:56



我不确定我是否购买了“他们是TABULAR”数据。你意识到http / html意味着STATIC内容,对吧?那些网络应用程序和会话中的保存状态是对此的歪曲,对吧?使用工具,因为它工作得很好,即使它最初不是为那个用途而制造也没有错。这很聪明。 - Nemi
使用你的逻辑Nemi,我们仍然应该使用在线FONT语句和间隔GIF。不仅技术发展了,而且关于如何使用这项技术的思考也是如此。当然你可以使用桌子进行布局,你也可以使用ROCK敲打钉子。 - Diodeus - James MacFarlane


表格能做什么,CSS定位不能?
从理论上讲,没什么,因为你可以使用 display: table;display: table-cell; 或其他此类值 显示

<ArgumentOnSemanticsUsabilityAndAcessibility />


0
2018-04-01 17:14



嗯,是。但这使它成为一个表格,所以我认为这超出了问题的精神。 - jlew
但除此之外 ensure [float'ed etc] elements don't spill 和 liquid col/row spans 我无法看到他们无法用CSS实现的任何功能。对于大多数情况,这个游戏中唯一可玩的牌是 save time。 - ANeves


save you time


-1
2018-04-01 16:58



在什么牺牲? - Dustin Laine
很高兴看到你同意我的回答 - Anurag


在标记中使用它们(表格)和你   不必为此而烦恼   定位或关于跨浏览器   兼容性。表几乎可以工作   跨浏览器的方式相同


-2
2018-05-17 10:25