いろいろな方法があると思いますが、簡易的にCSSで表現する方法を紹介します。
html
1<table>
2<tbody>
3<tr><td>1</td><td>テキスト</td><td>テキスト</td></tr>
4<tr tabindex="-1"><td>2</td><td><div class="longtext">長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト長いテキスト</div></td><td>テキスト</td></tr>
5<tr><td>1</td><td>テキスト</td><td>テキスト</td></tr>
6</tbody>
7</table>
HTMLのポイント
- 固定した高さより高くなるであろうテキストを
<div class="longtext">~</div>
で囲う。
- ↑で囲ったテキストに対応する
<tr>
にtabindex="-1"
の属性を指定する。
css
1td:nth-child(2) {
2 width: 200px;
3}
4td {
5 height: 2em; /* 固定したい高さ */
6}
7.longtext {
8 max-height: 2em; /* ここにも固定したい高さ */
9 overflow: hidden;
10}
11tr:focus .longtext {
12 max-height: none;
13}
CSSのポイント
- 固定したい高さを2箇所に記述する。
td{}
への指定はセルそのものの高さを、tr:focus .longtext{}
への指定は長いテキストに対する高さの制御になる。
tr:focus .longtext {}
は、該当行をクリック(フォーカス)した時の.longtext
への指定を示す。max-height: none;
が指定されていることで、クリックしたときに長いテキストの高さの制限がなくなり、全体が表示される。
サンプル https://jsfiddle.net/x00fuov1/2/
今回はCSSでのサンプルにしましたが、もしJavaScriptで作成するとしても基本的には同じような流れ(中身の要素の高さを制限→クリックしたときにその制限を解除)になると思います。
参考にしてください。