CSSテーブルセルの等しい幅


147

テーブルコンテナー内のテーブルセル要素の数が不確定です。

<div style="display:table;">
  <div style="display:table-cell;"></div>
  <div style="display:table-cell;"></div>
</div>

異なるサイズのコンテンツが含まれている場合でも、テーブルセルの幅を等しくする純粋なCSS方法はありますか?

ありがとう。

編集:最大幅を持っていると、私が思うにいくつのセルを持っているかを知る必要がありますか?


列の数はどのように決定されますか:クライアント側またはサーバー側?
iambriansreed

いくつかの方法を試した後、複数の行を持ち、それらを同じ幅にしたい場合は、テーブルではなくflexboxを使用します
Eric

回答:


298

セルの数が不確定な作業フィドルは次のとおりです。http//jsfiddle.net/r9yrM/1/

各親divテーブル)の幅を固定できます。そうしないと、通常どおり100%になります。

コツは、table-layout: fixed;それをトリガーするために各セルの幅を使用することです。ここでは2%です。これにより、他のテーブルアルゴリズムがトリガーされます。これは、ブラウザが指定された寸法を尊重するように非常に努力しているものです。
Chrome(および必要に応じてIE8-)でテストしてください。最近のSafariでも問題ありませんが、このトリックとの互換性を思い出せません。

CSS(関連する手順):

div {
    display: table;
    width: 250px;
    table-layout: fixed;
}

div > div {
    display: table-cell;
    width: 2%; /* or 100% according to OP comment. See edit about Safari 6 below */
}

編集(2013):OS XのSafari 6に注意してください、それはtable-layout: fixed; 間違っています(または、おそらく異なるだけで、他のブラウザーとは非常に異なります。CSS2.1RECテーブルのレイアウトを校正しませんでした;))。さまざまな結果に備える。


1
おかげで、これは答えのようです。理由はわかりませんが、幅を2%に設定すると、実際には各列が2%に切り詰められます。しかし、100%はうまく機能しているようです。何が起こっているのでしょうか?
ハリー

3
テーブルセルで100%の幅を使用する必要があるという同じ問題に遭遇しました。これは、display:tableの親要素にclearfixが適用されたために発生していました。100%幅のセルはIE8では機能しないため、私にとっての修正はclearfixを削除することでした。うまくいけば、これは誰かを助けます。
Alex Barrett

これをさらに詳しく説明すると、これは単純なレイアウト(1x1、2x2、3x3など)で機能しますが、複雑なレイアウト(1x3x1、1x2x3x4など)では、一部のユーザーが期待するものではなく、行であるかのように使用する追加divのsが必要です。ここに例がありますdisplay:tabledisplay:tabl-row
filoxo 2014

2
100%幅はIE8(サプライズ)では機能しませんでしたが、2%の最初の提案は正しい結果を提供します。

1
100%幅もIE10では機能しませんでした。それはやった IE11で仕事を。また、幅が1%のMobile Safariでは、非常に狭い列が表示されます。そのため、IE9とIE10をターゲットとしたCSSハックを使用することになりまし.my-cell { width: 100%; }; @media screen and (min-width:0\0) { .my-cell { width: 1%; } }た。CSSハックはここからです:stackoverflow.com/a/24321386/6962
Henrik N

29

HTML

<div class="table">
    <div class="table_cell">Cell-1</div>
    <div class="table_cell">Cell-2 Cell-2 Cell-2 Cell-2Cell-2 Cell-2</div>
    <div class="table_cell">Cell-3Cell-3 Cell-3Cell-3 Cell-3Cell-3</div>
    <div class="table_cell">Cell-4Cell-4Cell-4 Cell-4Cell-4Cell-4 Cell-4Cell-4Cell-4Cell-4</div>
</div>

CSS

.table{
    display:table;
    width:100%;
    table-layout:fixed;
}
.table_cell{
    display:table-cell;
    width:100px;
    border:solid black 1px;
}

デモ。


フィドルはここでは機能しません。セルは常に25%です。
netAction、2014年

このソリューションは、クライアントによって制御されるサイトナビゲーションなど、動的なものに対してはあまりスケーラブルではありません。
エリックK

おそらくあなたは正しいです、そしてそれはほぼ2歳のanser @QuantumDynamixです。何か良いことはありますか?アイデアを共有するだけでなく、世界にもっと良いことを知らせてください:-)
アルファ

15

要素で使用max-width: 0するだけでdisplay: table-cellうまくいきました:

.table {
  display: table;
  width: 100%;
}

.table-cell {
  display: table-cell;
  max-width: 0px;
  border: 1px solid gray;
}
<div class="table">
  <div class="table-cell">short</div>
  <div class="table-cell">loooooong</div>
  <div class="table-cell">Veeeeeeery loooooong</div>
</div>


1
ここでちょっとだけ0pxですが、有効なユニットではありません。それだけです0
Gavin

これは私にとってはうまくいきましたが、これがどのように働くのか説明できますか?
Emmanual

6

交換する

  <div style="display:table;">
    <div style="display:table-cell;"></div>
    <div style="display:table-cell;"></div>
  </div>

  <table>
    <tr><td>content cell1</td></tr>
    <tr><td>content cell1</td></tr>
  </table>

divをテーブルのように動作させることに関するすべての問題を確認してください。テーブルレイアウトを模倣するためにtable-xxxを追加する必要があった

テーブルはサポートされており、すべてのブラウザーで非常にうまく機能します。なぜそれらを捨てるのですか?彼らがそれらを模倣しなければならなかったという事実は、彼らが彼らの仕事をうまくやった証です。

私の意見では、ジョブに最適なツールを使用し、表形式のデータまたは表形式のデータテーブルに似たものが機能するかどうかを確認します。

非常に遅い返信私は知っていますが、発言する価値があります。


2
+1が機能するためと、CSSはまだ2014年にすべてのブラウザーで正しく機能しません。
Yuck

6
表形式のデータではないものに対して、テーブルのようなレイアウトが必要な場合があります。使用する必要があります例えばナビゲーション要素<nav><ul>など
ベン

1
レスポンシブには、divベースのレイアウトが理想的です。モバイルデバイスでテーブルを表示するのはお尻の痛みです。
Pablo Rincon

テーブルをエミュレートしようとすると、レスポンシブデザインができなくなります。レスポンシブデザインが必要な場合は同意します。テーブルは選択できません。
DeveloperChris、

2
表は、表形式のデータを表示するために作成されました。表形式のデータを表示するために使用するHTML要素ですが、なぜそれを捨てるのですか(その目的のために)。テーブルのレイアウトは模倣されていません。しばらくの間CSS2の推奨の一部であり、HTMLテーブルのデフォルトのレイアウトはdisplay: table-etc(当然のことながら)発生します。私は、divを模倣するリンクや、テーブル、スパン、または入力を模倣するリンクを作成することに日々を費やしていません。スタイル設定にCSSを使用しているだけです。最後に、IE9を使用して、displayプロパティの他の値をtable、tr、td要素に適用してください。
FelipeAls、2015

1

これはみんなのために働くでしょう

<table border="your val" cellspacing="your val" cellpadding="your val" role="grid" style="width=100%; table-layout=fixed">
<!-- set the table td element roll attr to gridcell -->
<tr>
<td roll="gridcell"></td>
</tr>
</table>

これは、反復によって作成されたテーブルデータでも機能します。


0

どうぞ:

http://jsfiddle.net/damsarabi/gwAdA/

表示はテーブルセルであるため、width:100pxは使用できません。ただし、Max-width:100pxを使用できます。その後、ボックスが100pxを超えることはありません。ただし、他のセルに出血しないように、overflow:hiddenを追加する必要があります。また、空白を追加することもできます。高さが増加しないようにするには、nowrapを使用します。


0

これを行うには、テーブルセルのスタイルをに設定しwidth: auto、コンテンツを空にします。列の幅は等しくなりましたが、コンテンツはありません。

セルにコンテンツを挿入するにはdiv、css付きのを追加します。

position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;

またposition: relative、セルに追加する必要があります。

これで、実際のコンテンツを上記のdivに入れることができます。

https://jsfiddle.net/vensdvvb/

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.