请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

Svg外部图标不显示问题

图片描述

老师您好,处理外部 svg 图标显示时无法正常显示,对于element-plus图标的问题已按照最新规范 npm install @element-plus/icons-vue 下载处理过,但是外部图标还是无法正常显示通过如下代码处理后

源码:
utils/validate.js

export function isExternal(path) {
  return /^(https?:|mailto:|tel:)/.test(path);
}

components/svgIcon/svgIcon.vue

<template>
  <!-- 展示外部图标 -->
  <div
    v-if="isExternal"
    :style="styleExternalIcon"
    class="svg-external-icon svg-icon"
    :class="className"
  />
  <!-- 展示内部图标 -->
  <svg v-else class="svg-icon" :class="className" aria-hidden="true">
    <use :xlink:href="iconName" />
  </svg>
</template>

<script setup>
import { computed } from "vue";
import { isExternal as external } from "@/utils/validate";

const props = defineProps({
  // icon 图标
  icon: {
    type: String,
    required: true
  },
  // 图标类名-便于处理样式
  className: {
    type: String,
    default: ""
  }
});

/**
 * 判断当前图标是否为外部图标
 */
const isExternal = computed(() => external(props.icon));

/**
 * 外部图标样式
 */
const styleExternalIcon = computed(() => ({
  // 通过遮罩或者裁切特定区域的图片
  // 的方式来隐藏一个元素的部分或者全部可见区域
  mask: `url(${props.icon}) no-repeat 50% 50%`,
  "-webkit-mask": `url(${props.icon}) no-repeat 50% 50%`
}));

/**
 * 内部图标
 */
const iconName = computed(() => `#icon-${props.icon}`);
</script>

<style lang="scss" scoped>
.svg-icon {
  width: 1em;
  height: 1em;
  vertical-align: -0.15em;
  fill: currentColor;
  overflow: hidden;
}

.svg-external-icon {
  background-color: currentColor;
  mask-size: cover !important;
  display: inline-block;
}
</style>

views/login/login.vue

<svgIcon icon="https://res.lgdsunday.club/user.svg"></svgIcon>

import svgIcon from "@/components/svgIcon/svgIcon.vue";

正在回答 回答被采纳积分+3

1回答

Sunday 2023-02-05 21:11:39

你好

这个应该是缓存的问题。之前有同学遇到过类似的问题。

0 回复 有任何疑惑可以回复我~
  • 这个今天我也遇到了,给mask-size添加-webkit-mask-size就好了。用的是最新版的chrome。
    我去https://caniuse.com/?search=mask-size 查了mask-size兼容性,说chrome支持加-webkit前缀的写法,不知道老师的代码为啥能显示出来。。。。
    回复 有任何疑惑可以回复我~ 2023-10-25 20:50:06

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信