IconMenu.vue 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. <template>
  2. <svg
  3. :class="[
  4. 'icon-menu',
  5. openState ? 'open' : '',
  6. ]"
  7. viewBox="0 0 1024 1024"
  8. width="30"
  9. height="30"
  10. >
  11. <path class="line1" d="M133.310936 296.552327l757.206115 0c19.781623 0 35.950949-16.169326 35.950949-35.950949 0-19.781623-15.997312-35.950949-35.950949-35.950949L133.310936 224.650428c-19.781623 0-35.950949 16.169326-35.950949 35.950949C97.359987 280.383 113.529313 296.552327 133.310936 296.552327z" fill="currentColor"></path>
  12. <path class="line2" d="M890.51705 476.135058 133.310936 476.135058c-19.781623 0-35.950949 16.169326-35.950949 35.950949 0 19.781623 16.169326 35.950949 35.950949 35.950949l757.206115 0c19.781623 0 35.950949-16.169326 35.950949-35.950949C926.467999 492.304384 910.298673 476.135058 890.51705 476.135058z" fill="currentColor"></path>
  13. <path class="line3" d="M890.51705 727.447673 133.310936 727.447673c-19.781623 0-35.950949 15.997312-35.950949 35.950949s16.169326 35.950949 35.950949 35.950949l757.206115 0c19.781623 0 35.950949-15.997312 35.950949-35.950949S910.298673 727.447673 890.51705 727.447673z" fill="currentColor"></path>
  14. </svg>
  15. </template>
  16. <script setup lang="ts">
  17. defineProps({
  18. openState: Boolean
  19. })
  20. </script>
  21. <style lang="scss">
  22. @use '@/assets/scss/colors.scss' as *;
  23. .icon-menu {
  24. path {
  25. transition: all 0.3s;
  26. }
  27. &.open {
  28. color: $primary-color;
  29. .line1 {
  30. transform: rotate(45deg) translate(25%, -25%);
  31. }
  32. .line2 {
  33. opacity: 0;
  34. }
  35. .line3 {
  36. transform: rotate(-45deg) translate(-50%, 0%);
  37. }
  38. }
  39. }
  40. </style>