1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
| <template>
| <svg
| aria-hidden="true"
| class="svg-icon"
| :style="'width:' + size + ';height:' + size"
| >
| <use :xlink:href="symbolId" :fill="color" />
| </svg>
| </template>
|
| <script setup lang="ts">
| const props = defineProps({
| prefix: {
| type: String,
| default: "icon",
| },
| iconClass: {
| type: String,
| required: false,
| default: "",
| },
| color: {
| type: String,
| default: "",
| },
| size: {
| type: String,
| default: "1em",
| },
| });
|
| const symbolId = computed(() => `#${props.prefix}-${props.iconClass}`);
| </script>
|
| <style scoped>
| .svg-icon {
| display: inline-block;
| width: 1em;
| height: 1em;
| overflow: hidden;
| vertical-align: -0.15em; /* 因icon大小被设置为和字体大小一致,而span等标签的下边缘会和字体的基线对齐,故需设置一个往下的偏移比例,来纠正视觉上的未对齐效果 */
| outline: none;
| fill: currentcolor; /* 定义元素的颜色,currentColor是一个变量,这个变量的值就表示当前元素的color值,如果当前元素未设置color值,则从父元素继承 */
| }
| </style>
|
|