animuj height: 0 do height: auto za pomocą CSS

Przejścia CSS to dobry sposób na stworzenie interaktywności., transition do stanu początkowego elementu, a przeglądarka animuje przejście między tymi dwoma stanami. Przejścia dla wewnętrznych zmiennych elementu, takich jak auto stanowiły problem dla twórców stron internetowych od dziesięcioleci, a jedyną opcją było dynamiczne obliczanie wysokości za pomocą JavaScript.


Innym wyzwaniem jest rozpoczęcie przejść, gdy element otrzyma swój pierwszy styl - na przykład, gdy zostanie dodany do DOM lub gdy display-wartość none Ten artykuł wyjaśnia, jak można rozwiązać ten problem za pomocą nowych funkcji CSS, takich jak calc-size(), interpolate-size, @starting-style oraz transition-behavior można opanować.

Rozwiązanie z calc-size()

Jeśli masz element DOM, który rozpoczyna się od stanu zamkniętego (height: 0) do stanu otwartego (height: auto), animacja zazwyczaj nie jest wykonywana, chociaż transition-Dzieje się tak, ponieważ przeglądarki nie ustawiają przejść do zmiennych wewnętrznych, takich jak auto Nowy calc-size()-funkcja umożliwia obliczenia na tych zmiennych wewnętrznych, a tym samym również przejścia:

f95f6dcb193aa903adc84ce47bc4a296

The calc-size()-nie jest jeszcze dostępna we wszystkich przeglądarkach. Rozwiązanie awaryjne można uzyskać, zachowując oryginalną funkcję height: auto-deklaracja.

Rozwiązanie z interpolate-size

The interpolate-size-właściwość pozwala zdefiniować zachowanie interpolacji przeglądarek i zdecydować, czy powinny one być używane między słowami kluczowymi, takimi jak auto Domyślnie interpolacja odbywa się tylko między wartościami liczbowymi. allow-keywords Można jednak aktywować przejścia między słowami kluczowymi:

f95f6dcb193aa903adc84ce47bc4a296

Przez interpolate-size: allow-keywords do :root-element, aktywujesz nowe zachowanie dla całej strony.

Przejście od display:none

Inny problem pojawia się, gdy element display:none do widocznego stanu. display nie jest właściwością animowalną, nie ma animacji. Nowe funkcje CSS pomagają tutaj @starting-style oraz transition-behavior:

f95f6dcb193aa903adc84ce47bc4a296

Z transition-behavior: allow-discrete zapewnia, że animacja zostanie wykonana przed display-wartość block na none Reguły te umożliwiają wykonywanie przejść nawet podczas początkowej aktualizacji stylu. @starting-style-gwarantuje, że animacja zostanie wykonana poprawnie podczas pierwszej aktualizacji stylu.

Obsługa przeglądarki

Nowe nieruchomości są obecnie calc-size() oraz interpolate-size nie są jeszcze obsługiwane przez wszystkie przeglądarki. W Chrome są one dostępne za flagą eksperymentu, ale jeszcze nie w Safari i Firefox. Wsparcie dla transition-behavior w Chrome i Edge, ale nie w Safari i Firefox, co miejmy nadzieję zmieni się w przyszłości.

Plecy