table-layout:fixedとdisplay:blockの違い
<td>
要素でoverflow:hidden
プロパティが効かない理由は、table
要素のレイアウト方式が影響しています。デフォルトではtable-layout
プロパティがauto
に設定されており、コンテンツに合わせてtable
要素が自動的に伸縮するため、overflow:hidden
が無効化されます。
解決策
overflow:hidden
を<td>
要素で有効にするには、以下の2つの方法があります。
table-layout:fixed を設定する
table
要素にtable-layout:fixed
プロパティを設定することで、table
要素の幅が固定され、overflow:hidden
が有効になります。
<table style="table-layout: fixed; width: 400px;">
<tr>
<td>
<div style="overflow: hidden;">
長いテキスト...
</div>
</td>
</tr>
</table>
display: block を設定する
<td>
要素にdisplay: block
プロパティを設定することで、<td>
要素がブロック要素になり、overflow:hidden
が有効になります。
<table>
<tr>
<td style="display: block; width: 400px;">
<div style="overflow: hidden;">
長いテキスト...
</div>
</td>
</tr>
</table>
注意点
table-layout:fixed
を設定すると、table
要素の幅が固定されるため、画面幅によっては横スクロールが発生する可能性があります。display: block
を設定すると、<td>
要素の縦方向の余白が消えるため、デザインが崩れる可能性があります。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>overflow:hidden サンプル</title>
<style>
table {
width: 400px;
border-collapse: collapse;
}
th, td {
border: 1px solid #ddd;
padding: 5px;
}
</style>
</head>
<body>
<h2>table-layout: auto</h2>
<table>
<tr>
<th>デフォルト</th>
<td>
<div style="overflow: hidden;">
長いテキストがここにあります。
</div>
</td>
</tr>
</table>
<h2>table-layout: fixed</h2>
<table>
<tr>
<th>table-layout: fixed</th>
<td>
<div style="overflow: hidden;">
長いテキストがここにあります。
</div>
</td>
</tr>
</table>
<h2>display: block</h2>
<table>
<tr>
<th>display: block</th>
<td>
<div style="overflow: hidden; width: 400px;">
長いテキストがここにあります。
</div>
</td>
</tr>
</table>
</body>
</html>
このサンプルコードでは、table-layout: auto
、table-layout: fixed
、display: block
の3つの方法を試して、<td>
要素でoverflow:hidden
プロパティをどのように有効にするかを示しています。
実行方法
- このコードをHTMLファイルとして保存します。
- ブラウザで開きます。
結果
table-layout: auto
の場合、overflow:hidden
プロパティは効かず、長いテキストは<td>
要素からはみ出します。
他の方法
white-space: nowrap を設定する
<td>
要素にwhite-space: nowrap
プロパティを設定することで、長いテキストが折り返されずに1行に表示されます。
<table>
<tr>
<td>
<div style="overflow: hidden; white-space: nowrap;">
長いテキストがここにあります。
</div>
</td>
</tr>
</table>
text-overflow: ellipsis を設定する
<td>
要素にtext-overflow: ellipsis
プロパティを設定することで、長いテキストが省略記号で表示されます。
<table>
<tr>
<td>
<div style="overflow: hidden; text-overflow: ellipsis;">
長いテキストがここにあります。
</div>
</td>
</tr>
</table>
word-break: break-all を設定する
<td>
要素にword-break: break-all
プロパティを設定することで、長い単語が途中で折り返されます。
<table>
<tr>
<td>
<div style="overflow: hidden; word-break: break-all;">
長い単語がここにあります。
</div>
</td>
</tr>
</table>
flexbox を使用する
<td>
要素にflexbox
レイアウトを使用することで、overflow:hidden
プロパティを有効にすることができます。
<table>
<tr>
<td>
<div style="display: flex; overflow: hidden;">
<div>長いテキストがここにあります。</div>
</div>
</td>
</tr>
</table>
これらの方法は、それぞれ異なる結果になります。どの方法を使用するかは、目的によって異なります。
html css