かなり前にも、長い文章を省略して「…」に置き換える、という記事をいくつか投稿しましたが、今回はそれを HTML の <table> で実装する方法についてです。
<table> 内で行う場合だと、text-overflow: ellipsis; と white-space: nowrap; を追加するだけではダメなんですね…!
table内でtext-overflow ellipsisを使う | cly7796.net
http://cly7796.net/wp/css/use-text-overflow-ellipsis-in-table/
では、早速サンプルコードです。
まずは、HTML は下記のようなものを用意しました。
<table>
<tr><th id="th-id">ID</th><th id="th-name">名前</th></tr>
<tr><td>1</td><td class="td-name">田中 太郎</td></tr>
<tr><td>2</td><td class="td-name">じゅげむ じゅげむ ごこうのすりきれ かいじゃりすいぎょの すいぎょうまつ うんらいまつ ふうらいまつ くうねるところに すむところ やぶらこうじの ぶらこうじ パイポパイポ パイポのシューリンガン シューリンガンのグーリンダイ グーリンダイのポンポコピーのポンポコナーの ちょうきゅうめいのちょうすけ</td></tr>
</table>
長い文章が思い浮かばなかったので、とりあえず寿限無を…。
こちらの HTML は、CSS を何も適用しない状態だと、寿限無の欄は複数行に折り返されて表示されます。
今回は、この寿限無の欄を 1行で表示させ、尚且つ枠からはみ出した分は「…」で省略表示させます。
適用する CSS はこちら。
table {
table-layout: fixed;
width: 100%;
}
th#th-id {
width: 20%;
}
th#th-name {
width: 80%;
}
td.td-name {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
文字を折り返して表示させたい <th> には、通常の文字省略でも使用する overflow: hidden;、text-overflow: ellipsis;、white-space: nowrap; を追加します。
上記のコードでは、12〜14行目です。
が、これを追加しただけでは、文字省略の表示は適応されません。
正しくは、1行表示にはなるけれど、文字は省略されず、<table> が横に伸びてしまいます。
なので、 <table> に、table-layout: fixed; と width: 100%; を追加します。
上記では 2〜3行目で記述している部分です。
こちらを追加することで、文字の省略が有効になります。
ただし、table-layout: fixed; を追加すると、ID と名前の枠の横幅が一緒になってしまうので、それぞれに width で横幅を指定しました。
もちろん、こちらは任意の値を設定してもらって問題ありません。
追加するのは以上です!
サンプルコードからも分かる通り、<table> 内で文字の省略表示を行う時には、text-overflow と white-space だけでは実現できませんので、ご注意ください。
でも、追加する CSS はそこまで多くもなく複雑でもないので、そこまで苦労することはないかと思います。
以上、CSS で <table> 内の文字を省略表示する方法でした。
ご参考になれば幸いです。