SideBar.vue 962 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. <script setup lang="ts">
  2. import NavLinks from './NavLinks.vue'
  3. import SideBarLinks from './SideBarLinks.vue'
  4. defineProps<{ open: boolean }>()
  5. </script>
  6. <template>
  7. <aside class="sidebar" :class="{ open }">
  8. <NavLinks class="nav" />
  9. <slot name="sidebar-top" />
  10. <SideBarLinks />
  11. <slot name="sidebar-bottom" />
  12. </aside>
  13. </template>
  14. <style scoped>
  15. .sidebar {
  16. position: fixed;
  17. top: var(--header-height);
  18. bottom: 0;
  19. left: 0;
  20. z-index: var(--z-index-sidebar);
  21. border-right: 1px solid var(--c-divider);
  22. width: 16.4rem;
  23. background-color: var(--c-bg);
  24. overflow-y: auto;
  25. transform: translateX(-100%);
  26. transition: transform 0.25s ease;
  27. }
  28. @media (min-width: 720px) {
  29. .sidebar {
  30. transform: translateX(0);
  31. }
  32. }
  33. @media (min-width: 960px) {
  34. .sidebar {
  35. width: 20rem;
  36. }
  37. }
  38. .sidebar.open {
  39. transform: translateX(0);
  40. }
  41. .nav {
  42. display: block;
  43. }
  44. @media (min-width: 720px) {
  45. .nav {
  46. display: none;
  47. }
  48. }
  49. </style>