--- import { Icon } from 'astro-icon/components'; --- <!-- There can't be a filter on parent element, or it will break `fixed` --> <div class="back-to-top-wrapper hidden lg:block"> <div id="back-to-top-btn" class="back-to-top-btn hide flex items-center rounded-2xl overflow-hidden transition" onclick="backToTop()"> <button aria-label="Back to Top" class="btn-card h-[3.75rem] w-[3.75rem]"> <Icon name="material-symbols:keyboard-arrow-up-rounded" class="mx-auto"></Icon> </button> </div> </div> <style lang="stylus"> .back-to-top-wrapper width: 3.75rem height: 3.75rem position: absolute right: 0 top: 0 .back-to-top-btn color: var(--primary) font-size: 2.25rem font-weight: bold border: none position: fixed bottom: 15rem opacity: 1 cursor: pointer transform: translateX(5rem) i font-size: 1.75rem &.hide transform: translateX(5rem) scale(0.9) opacity: 0 pointer-events: none &:active transform: translateX(5rem) scale(0.9) </style> <script is:raw> function backToTop() { window.scroll({ top: 0, behavior: 'smooth' }); } function scrollFunction() { let btn = document.getElementById('back-to-top-btn'); if (document.body.scrollTop > 600 || document.documentElement.scrollTop > 600) { btn.classList.remove('hide') } else { btn.classList.add('hide') } } window.onscroll = scrollFunction </script>