UNPKG

astro-vtbot

Version:

The 👜 Bag of Tricks ✨ for Astro's View Transitions

79 lines (73 loc) • 1.6 kB
/* Enable cross document view transitions */ @media (prefers-reduced-motion: no-preference) { @view-transition { navigation: auto; } } main { background-color: var(--sl-color-bg); } :active-view-transition-type(forward, backward) { /* Define view transition groups */ main { view-transition-name: main; } h1 { view-transition-name: title; width: fit-content; } nav.sidebar [aria-current='page'] { view-transition-name: current-page; } /* Fix stacking order */ header.header { view-transition-name: header; } mobile-starlight-toc nav { view-transition-name: mobile-starlight-toc-nav; } &::view-transition-new(header), &::view-transition-old(header), &::view-transition-new(mobile-starlight-toc-nav), &::view-transition-old(mobile-starlight-toc-nav) { animation-name: none; } /* Animate the page Title */ &::view-transition-old(title), &::view-transition-new(title) { height: 100%; width: auto; } &::view-transition-group(title) { overflow: clip; } &::view-transition-old(main), &::view-transition-new(main) { animation-name: none; } &::view-transition-group(main) { animation-timing-function: linear; } } :active-view-transition-type(forward)::view-transition-new(main) { animation-name: main-mask-forward; } :active-view-transition-type(backward)::view-transition-new(main) { animation-name: main-mask-backward; } @keyframes main-mask-forward { 0% { clip-path: inset(0 0 0 99.999%); } 100% { clip-path: inset(0); } } @keyframes main-mask-backward { 0% { clip-path: inset(0 99.999% 0 0); } 100% { clip-path: inset(0); } }