テキストデータが大きすぎて収まらないHTMLテーブルがいくつかあります。そのため、これに対応するためにセルを垂直方向に拡張します。したがって、オーバーフローのある行は、データ量の少ない行の2倍の高さになります。これは受け入れがたい。テーブルに1em
と同じ行の高さを強制するにはどうすればよいですか?
問題を再現するマークアップを次に示します。表の高さは1行のみで、オーバーフローしたテキストは非表示にしてください。
<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<style type="text/css">
table { width:250px; }
table tr { height:1em; overflow:hidden; }
</style>
</head>
<body>
<table border="1">
<tr>
<td>This is a test.</td>
<td>Do you see what I mean?</td>
<td>I hate this overflow.</td>
</tr>
</table>
</body>
</html>
table
のtable-layout:fixed
とセルのwhite-space:nowrap;
の2つの属性を指定する必要があります。 overflow:hidden;
もセルに移動する必要があります
table { width:250px;table-layout:fixed; }
table tr { height:1em; }
td { overflow:hidden;white-space:nowrap; }
デモはこちら Firefox 3.5.3およびIE 7でテスト済み
一般に、white-space: nowrap;
を使用している場合、どの列に折り返される(またはセルを引き伸ばす)コンテンツが含まれるのかを知っているからでしょう。これらの列については、通常、特定のspan
属性でclass
にセルのコンテンツをラップし、特定のwidth
を適用します。
例:
[〜#〜] html [〜#〜]:
<td><span class="description">My really long description</span></td>
[〜#〜] css [〜#〜]:
span.description {
display: inline-block;
overflow: hidden;
white-space: nowrap;
width: 150px;
}
最近のほとんどのブラウザでは、次を指定できるようになりました。
<table>
<colgroup>
<col width="100px" />
<col width="200px" />
<col width="145px" />
</colgroup>
<thead>
<tr>
<th>My 100px header</th>
<th>My 200px header</th>
<th>My 145px header</th>
</tr>
</thead>
<tbody>
<td>100px is all you get - anything more hides due to overflow.</td>
<td>200px is all you get - anything more hides due to overflow.</td>
<td>100px is all you get - anything more hides due to overflow.</td>
</tbody>
</table>
次に、上記の投稿のスタイルを次のように適用する場合:
table {
table-layout: fixed; /* This enforces the "col" widths. */
}
table th, table td {
overflow: hidden;
white-space: nowrap;
}
その結果、テーブル全体に隠れたオーバーフローがうまくできます。最新のChrome、Safari、Firefox、IEで動作します。私はIE 9より前ではテストしていません-しかし、私の推測では、それは7まで機能し、5.5または6のサポートを見るのに十分幸運になるかもしれません。;)
これが私が試したものです。基本的に、「柔軟な」コンテンツ(長すぎる行を含むtd)をdivコンテナーに配置します。このコンテナーは高さが1行で、オーバーフローが隠されています。次に、テキストを非表示にラップします。ただし、スムーズなカットオフではなく、ワードブレークでブレークが発生します。
table {
width: 100%;
}
.hideend {
white-space: normal;
overflow: hidden;
max-height: 1.2em;
min-width: 50px;
}
.showall {
white-space:nowrap;
}
<table>
<tr>
<td><div class="showall">Show all</div></td>
<td>
<div class="hideend">Be a bit flexible about hiding stuff in a long sentence</div>
</td>
<td>
<div class="showall">Show all this too</div>
</td>
</tr>
</table>
唯一の欠点は、テーブルのセル幅が同じであることです。これを回避する方法はありますか? –ジョシュ・ストドラ10月12日15時53分
テーブルの幅と各テーブルセルの幅を定義するだけです
何かのようなもの
table {border-collapse:collapse; table-layout:fixed; width:900px;}
th {background: yellow; }
td {overflow:hidden;white-space:nowrap; }
.cells1{width:300px;}
.cells2{width:500px;}
.cells3{width:200px;}
それは魅力のように動作します:o)
JavaScriptが回答として受け入れられた場合、この問題に対処するためにjQueryプラグインを作成しました(この問題の詳細については、 CSS:テーブルセルの切り捨て、ただしできるだけ適合 を参照してください)。
プラグインを使用するには、単に入力します
$('selector').tableoverflow();