index.vue 853 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <template>
  2. <svg :class="svgClass" aria-hidden="true">
  3. <use :xlink:href="iconName" :fill="color" />
  4. </svg>
  5. </template>
  6. <script setup lang="ts">
  7. const props = defineProps({
  8. iconClass: {
  9. type: String,
  10. required: true
  11. },
  12. className: {
  13. type: String,
  14. default: ''
  15. },
  16. color: {
  17. type: String,
  18. default: ''
  19. },
  20. })
  21. const iconName = computed(() => `#icon-${props.iconClass}`);
  22. const svgClass = computed(() => {
  23. if (props.className) {
  24. return `svg-icon ${props.className}`
  25. }
  26. return 'svg-icon'
  27. })
  28. </script>
  29. <style scope lang="scss">
  30. .sub-el-icon,
  31. .nav-icon {
  32. display: inline-block;
  33. font-size: 15px;
  34. margin-right: 12px;
  35. position: relative;
  36. }
  37. .svg-icon {
  38. width: 1em;
  39. height: 1em;
  40. position: relative;
  41. fill: currentColor;
  42. vertical-align: -2px;
  43. }
  44. </style>