animeer hoogte: 0 naar hoogte: auto met CSS

CSS-overgangen zijn een goede manier om interactiviteit te creëren., transition naar de begintoestand van een element en de browser animeert de overgang tussen de twee toestanden. Overgangen voor intrinsieke elementvariabelen zoals auto zijn al tientallen jaren een probleem voor webontwikkelaars en de enige optie was om de hoogte dynamisch te berekenen met JavaScript.


Een andere uitdaging is het starten van overgangen wanneer een element zijn eerste stijl krijgt - bijvoorbeeld wanneer het wordt toegevoegd aan het DOM of wanneer de display-waarde van none In dit artikel wordt uitgelegd hoe dit probleem kan worden opgelost met de nieuwe CSS-functies zoals calc-size(), interpolate-size, @starting-style en transition-behavior kan worden beheerst.

Oplossing met calc-size()

Als je een DOM-element hebt dat begint vanuit een gesloten toestand (height: 0) naar een open toestand (height: auto), wordt de animatie meestal niet uitgevoerd, hoewel de transition-Dit komt omdat browsers geen overgangen instellen naar intrinsieke variabelen zoals auto De nieuwe calc-size()-functie maakt berekeningen op deze intrinsieke variabelen mogelijk en dus ook overgangen:

f95f6dcb193aa903adc84ce47bc4a296

De calc-size()-functie is nog niet in alle browsers beschikbaar. Een fallback kan worden bereikt door de oorspronkelijke height: auto-verklaring.

Oplossing met interpolate-size

De interpolate-size-eigenschap kunt u het interpolatiegedrag van browsers definiëren en beslissen of ze moeten worden gebruikt tussen trefwoorden zoals auto Standaard vindt interpolatie alleen plaats tussen numerieke waarden. allow-keywords U kunt echter overgangen tussen trefwoorden activeren:

f95f6dcb193aa903adc84ce47bc4a296

Door interpolate-size: allow-keywords naar de :root-element, activeer je het nieuwe gedrag voor de hele pagina.

Overgang van display:none

Een ander probleem treedt op als een element van display:none naar een zichtbare staat. display geen animeerbare eigenschap is, is er geen animatie. De nieuwe CSS-functies helpen hierbij @starting-style en transition-behavior:

f95f6dcb193aa903adc84ce47bc4a296

Met transition-behavior: allow-discrete zorgt ervoor dat de animatie wordt uitgevoerd voordat de display-waarde van block op none Deze regels maken het mogelijk om overgangen uit te voeren, zelfs tijdens een initiële stijlupdate. @starting-style-regel zorgt ervoor dat de animatie correct wordt uitgevoerd tijdens de eerste stijlupdate.

Browserondersteuning

De nieuwe eigendommen worden momenteel calc-size() en interpolate-size In Chrome zijn ze beschikbaar achter een experimenteervlag, maar nog niet in Safari en Firefox. Ook ondersteuning voor transition-behavior in Chrome en Edge, maar niet in Safari en Firefox, wat hopelijk in de toekomst zal veranderen.

Terug