セル内のテキストの量に関係なく、テーブルの列幅を一定に設定しますか?


535

テーブルで、列の最初のセルの幅をに設定しました100px
ただし、この列のいずれかのセルのテキストが長すぎる場合、列の幅はを超え100pxます。この拡張を無効にするにはどうすればよいですか?


5
stackoverflow.com/questions/1258416/word-wrap-in-a-html-tableが正しい方向を示すのに役立つかもしれません
justinl

2
私の場合、拡張は行われませんでしたが、反対です:明示的な幅宣言にもかかわらず、幅の不要な縮小。ばかげた!
Csaba Toth 2014

これに対する唯一の正しい解決策は、colsを含むcolgroupを使用して、colsの幅を設定することです。
MightyPork 2015年

table-layout:fixed;解決策です
emfi 2015

回答:


607

私はそれを理解するのに苦労したので、少し遊んだ。

セルの幅を設定する必要があります(どちらかthまたはtd機能table-layoutfixedます。両方を設定します)ANDをに設定します。何らかの理由で、セルの幅はテーブルの幅も設定されている場合にのみ固定されているように見えます(私はそれはばかげていると思いますが、whatev)。

また、overflowプロパティをに設定して、hidden余分なテキストがテーブルから出ないようにすると便利です。

また、CSSの境界とサイズもすべて残しておく必要があります。

わかりましたので、ここに私が持っているものがあります:

table {
  border: 1px solid black;
  table-layout: fixed;
  width: 200px;
}

th,
td {
  border: 1px solid black;
  width: 100px;
  overflow: hidden;
}
<table>
  <tr>
    <th>header 1</th>
    <th>header 234567895678657</th>
  </tr>
  <tr>
    <td>data asdfasdfasdfasdfasdf</td>
    <td>data 2</td>
  </tr>
</table>

ここではJSFiddleにあります

この男にも同様の問題がありました:表のセル幅-幅の修正、長い単語の折り返し/切り捨て


77
これに注意することが重要です:「ブラウザは、テーブルの最初の行のセルの幅に基づいて列幅を設定します」、stackoverflow.com
questions / 570154 /…

12
テーブルの幅が固定されていない場合に機能します。jsfiddle.net/lavinski/CGCFW/3残りのスペースを使用するには、動的な行が必要です。
Daniel Little

2
@DanielLittleまたは、テーブルの幅を1pxに設定できます。overflow: visible長いセルのサイズが固定され、オーバーフローが表示されているようなテーブル自体のサイズは、実際の細胞よりも大きいまたは小さい場合、動的サイズのテーブルのため、それは問題ではありません。
Mahn、2015

tdに "width = 30%;"がある場合、どうすればよいですか?
2015

オーバーフローを追加してください:非表示の@ RokoC.Buljan
Alex Grande

178

参照:http : //www.html5-tutorials.org/tables/changing-column-width/

tableタグの後に、col要素を使用します。終了タグは必要ありません。

たとえば、3つの列がある場合:

<table>
  <colgroup>
    <col style="width:40%">
    <col style="width:30%">
    <col style="width:30%">
  </colgroup>  
  <tbody>
    ...
  </tbody>
</table>

26
この!これはHTML5の答えであり、私が愚かなフープを飛び越えなくても、おかしく機能します。さらに、代わりに<col class = "someClassName">を使用して、CSSで幅を維持し、スタイル情報でHTMLを汚染しないようにすることができます。
John Munsch 14

2
@Sam CSS、インラインスタイル、または不適切なdoctypeなど、これをオーバーライドする他の問題が発生した可能性があります。これは間違いなく機能し、列スタイルを設定する標準的な方法です。
Sameer Alibhai、2015年

これが「HTML5の方法」なのかどうか、私にはよくわかりません。html5のcolgroup / colは実際にはスパンのマーキングにのみ使用されているようです。MDNは、(グローバル属性から継承することを除いて)colタグでのスタイル属性の使用については言及せず、bgcolorについてのみ述べています。developer.mozilla.org/en-US/docs/Web/HTML/Element/col
スティーブンパンツァー

5
テーブルスタイルで私のために働いたtable-layout: fixed; width: 100%;。ありがとう!
nrodic '18年

それはすべてではない/決定的なものではありませんが、w3schools colはこのための使用についても言及していません。これは、CSSをa <td>(または<th>)に適用することを示唆しています-w3schools.com/tags/att_td_width.asp
Don Cheadle

128

<div>内部にタグを追加する<td><th>、内部で幅を定義するだけ<div>です。これはあなたを助けます。他には何も機能しません。

例えば。

<td><div style="width: 50px" >...............</div></td>

2
安全のために、このソリューションを同じピクセル幅の最小幅/最大幅を指定することと組み合わせました。最後にそれは働いています。なぜこれらの追加ラウンドをすべて実行しなければならないのかわからないのですが、それを本当に修正し、ばかげています...
Csaba Toth

1
これを同じCSS style="width: 50px"に設定するよりも良い方法がわからない<td>
Don Cheadle

2
@mmcrae動作するためより良いですが、幅をオンに設定すると動作し<td>ません。
Madbreaks 2017年

66

1つ以上の固定幅の列が必要で、他の列のサイズを変更する必要がある場合は、両方min-widthmax-width同じ値に設定してみてください。


これは私が明示的に幅を設定したときにtable-layout: fixed;うまくいきませんでした。
ジョーダンマック

聖なるたわごと!他の解決策はどれもうまくいかなかった、または不格好でした!これは完璧に機能しました!divも必要ありません。
NeilRoy

29

これを対応するCSS内に記述する必要があります

table-layout:fixed;

divタグとのより良いsorroundテーブルその後、内側のdiv利用オーバーフロー:自動
バイノス・クマール

列グループと組み合わせるとうまくいきました:<table style = "table-layout:fixed"> <colgroup> <col style = "width:50%"> <col style = "width:50%"> </ colgroup> <tbody> ... </ tbody> </ table>。
ラスベイトマン2015

このChris Coyerの記事はそれをうまく説明しています:css-tricks.com/fixing-tables-long-strings
cssyphus

24

私がしていることは:

  1. tdの幅を設定します。

    <td width="200" height="50"><!--blaBlaBla Contents here--></td>
  2. CSSでtdの幅を設定します。

    <td style="width:200px; height:50px;">
  3. CSSで幅を最大と最小に再度設定します。

    <td style="max-width:200px; min-width:200px; max-height:50px; min-height:50px; width:200px; height:50px;">

少し繰り返しのように聞こえますが、望ましい結果が得られます。これを非常に簡単に実現するには、CSS値をスタイルシートのクラスに配置する必要がある場合があります。

.td_size {    
  width:200px; 
  height:50px;
  max-width:200px;
  min-width:200px; 
  max-height:50px; 
  min-height:50px;
  **overflow:hidden;** /*(Optional)This might be useful for some overflow contents*/   
}

次に:

<td class="td_size">

クラス属性を任意に配置し<td>ます。


これは、余分な、望ましくない可能性のある制限を課すことなく、すべてのケースで機能するように思われた唯一のソリューションでした。
Sam

3

これを使った

.app_downloads_table tr td:first-child {
    width: 75%;
}

.app_downloads_table tr td:last-child {
    text-align: center;
}

ntch-child(2)(または3、4など)を忘れないでください

テーブルtd nth-child(n + 1){...}は、最初の列を除くすべてをカバーします
Ed Randall

2

固定レイアウトが不要な場合は、列のクラスを適切なサイズに指定します。

CSS:

.special_column { width: 120px; }

HTML:

<td class="special_column">...</td>

2

また、width:autoを使用して、最後の「フィラーセル」を配置することもできます。これにより残りのスペースが占有され、他のすべての寸法は指定されたままになります。


2

固定幅よりも小さい場合、受け入れられた回答が小さな画面に応答するようにします。

HTML:

<table>
  <tr>
    <th>header 1</th>
    <th>header 234567895678657</th>
  </tr>
  <tr>
    <td>data asdfasdfasdfasdfasdf</td>
    <td>data 2</td>
  </tr>
</table>

CSS

table{
    border: 1px solid black;
    table-layout: fixed;
    max-width: 600px;
    width: 100%;
}

th, td {
    border: 1px solid black;
    overflow: hidden;
    max-width: 300px;
    width: 100%;
}

JSフィドル

https://jsfiddle.net/w9s3ebzt/



1

KAsunは正しい考えを持っています。これが正しいコードです...

<style type="text/css">
  th.first-col > div, 
  td.first-col > div {
    overflow:hidden;
    white-space:nowrap;
    width:100px
  }
</style>

<table>
  <thead><tr><th class="first-col"><div>really long header</div></th></tr></thead>
  <tbody><tr><td class="first-col"><div>really long text</div></td></tr></tbody>
</table>

1

ここでの私の回答に従って、テーブルヘッド(空の場合もあります)を使用して、各テーブルヘッドセルに相対的な幅を適用することもできます。テーブル本体のすべてのセルの幅は、列見出しの幅に一致します。例:

HTML

<table>
  <thead>
    <tr>
      <th width="5%"></th>
      <th width="70%"></th>
      <th width="15%"></th>
      <th width="10%"></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Some text...</td>
      <td>May 2018</td>
      <td>Edit</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Another text...</td>
      <td>April 2018</td>
      <td>Edit</td>
    </tr>
  </tbody>
</table>

CSS

table {
  width: 600px;
  border-collapse: collapse;
}

td {
  border: 1px solid #999999;
}

結果を見る

または、colgroupHyathinの回答で提案されているとおりに使用します。


0

次のように、存在するテキストに関係なく最小幅を設定するセルで:: after要素を使用します。

.cell::after {
    content: "";
    width: 20px;
    display: block;
}

テーブルの親に幅を設定したり、テーブルレイアウトを使用したりする必要はありません。


-4

私はKAsunの答えが次のようにpxの代わりにvwを使用するとうまく機能することを発見しました:

<td><div style="width: 10vw" >...............</div></td>

これは、列の幅を調整するために必要な唯一のスタイリングでした


-5

"fixed"設定する必要はありません- overflow:hidden列の幅が設定されているので、必要なのは設定だけです。


3
これはセルの境界線の後ろにコンテンツを隠します、良い考えではありません。
mystrdat
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.