テーブル行の出現と消滅をアニメーション化したい。
まず、CSStransitionを使用してみましたが、display
プロパティの変更により何もしませんでした。
そこで、animationを使用しましたが、これは期待どおりに機能します。
問題は、アニメーションの開始時に行の全高が予約されているです。問題の説明については、以下のスニペットを参照してください。アニメーションが開始される前に、行3がすぐに押し下げられます。
行の高さを徐々にアニメーション化して、必要なだけのスペースを取るようにするにはどうすればよいですか?
ボーナスとして:
$('button').on('click', function() {
$('tr:nth-child(2)').toggleClass('active');
});
@keyframes anim {
0% {
transform: scaleY(0);
}
100% {
transform: scaleY(1);
}
}
tr {
background: #eee;
border-bottom: 1px solid #ddd;
display: none;
transform-Origin: top;
}
tr.active {
display: table-row;
animation: anim 0.5s ease;
}
td {
padding: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<button type="button">Toggle</button>
<table>
<tbody>
<tr class="active">
<td>Row 1</td>
<td>...</td>
<td>...</td>
</tr>
<tr>
<td>Row 2</td>
<td>...</td>
<td>...</td>
</tr>
<tr class="active">
<td>Row 3</td>
<td>...</td>
<td>...</td>
</tr>
</tbody>
</table>
table
row
/cell
は、その内容よりも小さいheight
を尊重しないため、内部div
を使用する必要があります。 display
をアニメートしないで、height
に設定されたauto
をアニメートできないため、ここでmax-height
。
トリックは、max-height
最高のコンテンツを有効にするのに十分な値。
$('button').on('click', function() {
$('tr:nth-child(2)').toggleClass('active');
});
table {
border-collapse: collapse;
}
tr {
background: #eee;
border-bottom: 1px solid #fff;
}
tr, td {
padding: 0;
}
tr td div {
max-height: 0;
padding: 0 10px;
box-sizing: border-box;
overflow: hidden;
transition: max-height 0.3s, padding 0.3s;
}
tr.active td div {
max-height: 100px;
padding: 10px 10px;
transition: max-height 0.6s, padding 0.6s;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.2/jquery.min.js"></script>
<button type="button">Toggle</button>
<table>
<tbody>
<tr class="active">
<td><div>Row 1</div></td>
<td><div>...</div></td>
<td><div>...</div></td>
</tr>
<tr>
<td><div>Row 2</div></td>
<td><div>...</div></td>
<td><div>...</div></td>
</tr>
<tr class="active">
<td><div>Row 3</div></td>
<td><div>...</div></td>
<td><div>...</div></td>
</tr>
</tbody>
</table>
CSS3を使用し、最新のブラウザをサポートするオプションがある場合は、transform:translateY
トランジションの使用を検討し、overflow:hidden
でオーバーフローを隠すことができます。
Edge/IEはテーブル要素の変換変換をサポートしません。Chromeはサポートします。