2010-04-01 56 views
11

我知道有各種各樣的優秀論點喜歡CSS定位在基於表格的佈局。我想知道的是,CSS模型是否完整(假設一個相對較新的瀏覽器)與表的所有功能有關。表格可以實現的佈局是不可能的還是不切實際的CSS?表格可以做CSS定位不能做什麼?

回答

5

如果可以的話,我會切換到基於CSS的佈局。語篇論證是正確的,但有實際的考慮。表會:

  • 絕對防止「浮動包裹」,其中一個div將下降到下一行,因爲沒有它
  • 給你同樣的高度列
  • 允許動態佈局,其中寬度足夠的空間和高度不爲人所知,直到運行時
  • 提供colspans和rowspans
  • 減少SO問題問如何做的東西,而表:)
數3210

有一些模仿其中的一些CSS顯示屬性(表格單元格等),但我不相信這種支持已經足夠普及到使用它們(除非你可以控制用戶的瀏覽器選擇)。

我工作的網站需要在佈局中採用競爭性的動態列寬。多個客戶使用相同的網站模板,我不知道他們將放入菜單或頁面標題或內容單元中。 (並且不知道他們會發現什麼吸引人的,這是另一個問題......)使用一個外部表格來佈置網站的主要部分可以提供我所需要的靈活性,而不用擔心稍微太寬的菜單會推動主要內容框到下一行,或者背景顏色不會填充所需的高度。在一個完美的(對我來說)的世界裏,我們將有<table> s爲表格數據,另一個幾乎相同的一組佈局標籤 - 稱爲<layout>(以及相應的行和單元格標籤)。或者,爲<table>標籤添加一個「模式」屬性 - 這些值將是「數據」和「佈局」,以便屏幕閱讀器和搜索引擎知道該怎麼做。也許在HTML 6 ...

編輯:我應該添加,關於'浮動包裝'的事情 - 有一個當前的問題,以及一個工作得很好的答案here。這並不完美,太複雜了,但它在很多情況下都能解決問題。

+0

+0爲第一,-1爲第二和第三,+1爲第四和第五。 :D – ANeves 2010-04-01 17:16:59

+1

@sr pt:我很高興你給了我第一個+0,而不是-0 ......認真地說,我已經看到了大部分這些東西的部分解決方法,但從來沒有真正動態的寬度(我的第3個)。你有東西給我嗎? – Ray 2010-04-01 17:26:03

4

表意和應該用於表格數據,而不能用於結構。就我個人而言,我將桌子看作一個簡單的出路,而我從來沒有遇到過無法用CSS解決的情況。

表是垂直定位和全高度肯定列更容易,但是這同樣可以用CSS來克服。

+0

的 同樣的方式我不是一個誰主張切割編程角落,但存在以下情況:一個「黑客」只是比做事「理想」的方式更好。 Html表格工作。在每個瀏覽器中。總是。他們很容易理解和維護。在佈置div時,CSS與此相反。 – Nemi 2010-04-01 17:06:02

+0

@Nemi - Boo!那麼標準是什麼? – 2010-04-01 17:37:19

+0

+ -0我非常不同意。 *有*情況,如果沒有表或JavaScript,就無法處理。 CSS標準的設計者在提供用於佈局的'table'的替代方案方面做得不好,爲什麼,我不知道。至於「簡單的出路」,我向你們提出,當選擇介於五行「

」結構或80行CSS加上三種針對IE6和7的瀏覽器專用黑客之間,或者8以及一個因爲(Safari | Opera | xyz)不支持這個和那個僞類,所以「簡單的出路」確實是正確的方法。 – 2010-05-17 10:30:18

0

可怕的外觀?

儘管如此。第

的使用表的人一個很好的例子是,他們讓人們更方便呈現表單字段中一個很好看的方式,但它與前往的交通和頁面語義完全打亂。您可以通過在CSS中多花點功夫來獲得相同的效果。

0

你可以用CSS做同樣的事情,但它通常不會很優雅。

表格對於顯示表格數據(即,NOT LAYOUTS)很重要。它們是邏輯的,語義結構,應該這樣使用。它們包含像列和行這樣的概念,CSS本身不包含這些概念。

+0

我不確定我是否購買了「他們是TABULAR」數據的參數。你意識到http/html是用於STATIC內容的,對嗎?而網絡應用程序和會話中的保存狀態就是一種變態,對吧?使用一種工具,因爲它工作的很好,即使它最初並不是爲了這種使用而設計的,也沒有錯。它很聰明。 – Nemi 2010-04-01 17:19:16

+0

用你的邏輯Nemi,我們仍然應該使用在線的FONT語句和間隔GIF。不僅技術發展了,而且思考如何使用這項技術也是如此。當然你可以使用表格進行佈局,你也可以用ROCK來敲釘子。 – 2010-04-01 17:29:11

-1

save you time

+0

在犧牲什麼? – 2010-04-01 16:59:21

+0

很高興看到你同意我的回答 – Anurag 2010-04-01 17:18:55

1

我得到了一個!有些東西在我看來不可能用CSS,但是可以用表格。我昨天剛剛問了一個問題,並得到了答案。

如果你想在同一行兩個獨立的元素,無論寬度,你必須使用一個表。也就是說,如果這兩個元素是內嵌的或浮動的,如果它們動態調整大小並變得比容器更寬,則它們將打破下一行而不是溢出。如果你絕對要求它們保持在同一行,即使第二個溢出容器的寬度,那麼它們需要是表格行中的單元格。

編輯:有點測試表明,這只是花車真。如果您的元素以內聯或內聯方式顯示,則可以在容器上設置white-space:nowrap。然而,在這種情況下,似乎(無論如何FF)在元素之間有一個神祕的空間,這對我昨天的目的來說是一個問題。

+0

我不確定這是否屬實。有很多方法可以控制CSS中的包裝行爲。 – jlew 2010-04-01 17:01:37

+0

然後有人在我昨天的問題中對我撒謊。將刪除,如果我能找到它。 – Tesserex 2010-04-01 17:02:44

+0

也許他們在某種有限的情況下是正確的。作爲一般性陳述,我不認爲這是準確的。 – jlew 2010-04-01 17:04:58

6

CSS沒有處理真正表格數據的好方法。如果您的數據本身是按行和列組織的,那麼table標籤仍然是展示它的最佳方式。雖然你可以在CSS中「僞造」它,但它會導致複雜且難以維護的代碼,而這並不是真正的原因。

注意表格數據並不一定總是意味着只是數字的表。有時,表單和其他類型的交互式內容也可以是表格,如果它們的字段在邏輯上將它們分組成列和行。關鍵是要問自己,「如果我在頁面上寫出數據並將其與計算機無關,我會將數據視爲行列嗎?」

+0

+1儘管「沒有真正的原因」 – ANeves 2010-04-01 17:19:48

+0

@sr pt - 我不同意。最終的結果是用戶看到的。如果使用全CSS設計讓你感覺良好,但需要三倍的時間才能完成,除了花費公司的時間和金錢外,你沒有什麼成就。 – Nemi 2010-04-01 17:24:26

+0

丹是正確的 - '表格'的一個很好的定義是'在行和列中整齊排列的東西'。像大多數數據輸入表單一樣像報紙風格的專欄一樣。就像大多數網站的主要結構一樣。 – Ray 2010-04-01 17:29:24

0

什麼能表做CSS定位不能?
理論上,沒有什麼,因爲您可以使用display: table;display: table-cell;或其他此類值爲display

< ArgumentOnSemanticsUsabilityAndAcessibility/>

+0

嗯,是的。但是,這使得它成爲一張桌子,所以我認爲這個問題的精神之外。 – jlew 2010-04-01 17:17:29

+0

但除''確保[float'ed etc]元素不會溢出''和'液體行/行跨度'我看不到任何他們可以做的事情,你無法用CSS實現。在這場比賽中,大多數情況下唯一可玩的牌是「節省時間」。 – ANeves 2010-04-01 17:26:54

-2

在標記使用它們(表),你 沒有打破你的頭約 定位或有關的跨瀏覽器兼容 。表工作幾乎跨瀏覽器