index.vue 807 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. <script setup lang="ts">
  2. const props = defineProps({
  3. iconClass: {
  4. type: String,
  5. required: true
  6. },
  7. className: {
  8. type: String,
  9. default: ''
  10. },
  11. color: {
  12. type: String,
  13. default: ''
  14. },
  15. })
  16. const iconName = computed(() => `#icon-${props.iconClass}`);
  17. const svgClass = computed(() => {
  18. if (props.className) {
  19. return `svg-icon ${props.className}`
  20. }
  21. return 'svg-icon'
  22. })
  23. </script>
  24. <template>
  25. <svg :class="svgClass" aria-hidden="true">
  26. <use :xlink:href="iconName" :fill="color" />
  27. </svg>
  28. </template>
  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>