Wie zu animieren Umschalten der Zeilen?
Möchte ich animieren, die erscheinen und verschwinden der Zeilen.
Zunächst versuchte ich mit einem CSS - übergang, aber es Tat nichts, aufgrund der änderung der display
Eigenschaft.
So, ich habe eine animation, die funktioniert wie erwartet.
Das problem ist, die volle Höhe der Zeile ist reserviert, wenn die animation beginnt. Siehe snippet unten für eine illustration des Problems: Zeile 3 nach unten, sofort, bevor die animation beginnt.
Wie kann ich animieren Sie die Höhe der Zeile schrittweise, so dass es dauert nur so viel Platz wie benötigt?
Und als bonus:
- es sollte nicht erforderlich, eine Feste Höhe für Zeilen
- es sollte angezeigt werden, wie eine übersetzung, sondern als eine Skalierung; es sollte so Aussehen, wie es Schiebe von unten die Zeile oben
- es sollte bidirektionale (das Gegenteil tun, wenn ich es ausblenden)
JS:
$('button').on('click', function() {
$('tr:nth-child(2)').toggleClass('active');
});
CSS:
@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;
}
HTML:
<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>
- Habe meine Antwort Ihnen geholfen? ... wenn Nein, kann ich etwas verbessern oder klären?
- Sorry für die nicht feedback geben, früher war ich warten um zu sehen, wenn andere Menschen kommen mit alternativen Lösungen. Ich Schreibe meine Kommentare auf Ihre Antwort direkt.
- Möglich, Duplikat der CSS3 übergang auf die Tabelle Zeile mit height-Eigenschaft
Du musst angemeldet sein, um einen Kommentar abzugeben.
Als
table
row
/cell
nicht respektieren, eineheight
kleiner als der Inhalt, dann brauchen wir eine innerediv
können wir nicht animierendisplay
und wir können nicht animierenheight
eingestelltauto
, so dass ich hier eine Lösung mitmax-height
.Der trick ist, zu geben
max-height
einen Wert, der hoch genug, um den höchsten Gehalt.JS:
CSS:
HTML:
display
richtig zu verstecken, es einmal vollständig zusammengebrochen ist (nicht sicher, wie wichtig dies ist, aber ich habe Angst vor älteren Browsern und Semantik: mitheight:0
so blenden Sie ein element kann nicht sein, eine best practice); und die Tatsache, dass es schrumpft, statt zu schauen wie es ist und Schiebe von unten die Zeile oben, das wäre meine ideale Ziel!transition
Sie sind bereits ausgeschlossen. Das ideale Ziel, um "slide" unten getan werden könnte, wennheight: 0
war in der Lage zu sein setzen auf dietr
, wenn es nicht funktioniert, so dass, wenn Sie das wollen, müssen Sie löschen dietable
markup und verwendendiv
Reihen statt, und wenn man akzeptiert eine Feste Breite für jede Spalte (da die Verhalten sich nicht wie normale Zellen), die erreicht werden können.display:none
wenn Sie versteckt sind, und eine echte Gleit-Effekt?display: none
und indem Sie es, machen es der übergang nicht arbeiten, aber Ihre sorgen übermax-height: 0
in älteren browser, der es bis zum IE7, kann so nicht sehen, kein problem. Wenn es um die eigentliche slide-Effekt, müssen Sieabsolute position
, die nicht seine Eltern-die automatische Größenänderung zum Inhalt haben, benötigen Feste Höhe (oder ähnlich) ... also NÖ, kann nicht helfen mit, dass ... zu kommen über diese können Sie verwenden, jQuery, obwohl ältere browser-Unterstützung geben wird, Fragen gibt es auch.Wenn Sie die option zur Verwendung von CSS3 /Unterstützung von modernen Browsern könnten Sie mit einem
transform:translateY
übergangs-und ausblenden der überlauf mitoverflow:hidden
.Tun, beachten Sie, dass Edge /IE nicht unterstützen, die übersetzen, wandelt auf dem Tisch-Elemente. Chrome unterstützt es.