Skip to content

Icon 图标

Ksw vue icon 图标库是一个通过技术驱动矢量图标样式的图标库产品,可以实现根据单一SVG源文件导出为 Vue3 组件代码,打通 Design to Code 链路,实现产品、研发、设计师一站式对接,使用更高效。

⚠️ 注意

默认仅导入 base 基础图标库, 如发现无法使用某些图标请传入项目名称来使用项目图标。 2.5.0 版本后大部分项目图标已迁移至 base

使用方法

安装

使用图标组件,你需要安装 ksw-vue-icon 图标组件包:

sh
npm install -D ksw-vue-icon
sh
yarn add -D ksw-vue-icon
sh
pnpm install -D ksw-vue-icon
sh
bun add -D ksw-vue-icon

按需引用图标

从组件顶部的 ksw-vue-icon 导入一个图标,然后在模板标签中使用它:

js
// 引用
import { IconName } from 'ksw-vue-icon'


// 使用
<IconName :size="24" color="#333" />

引入样式

⚠️ 注意

2.6.0 版本会自动注入 CSS 不再需要导入样式, 并且不再提供 CSS 的导出

2.5 版本以下需要引入 CSS

导入图标样式(整个项目只需1次):

js
import 'ksw-vue-icon/styles/icon.css';

全局注册图标

我们建议按需加载图标,因为这样可以大大减少编译代码量。但是在一些类似远程加载菜单的场景下,直接引用所有图标可以减少开发成本。

js
import { KswIcon } from 'ksw-vue-icon'
app.use(KswIcon)

项目用法

TIP

2.3.0 版本起图标库支持 app.use 传入项目名称来使用项目图标

你可以在 app.use 方法传入项目名称来使用项目图标库扩充基本图标库。项目图标的优先级大于基本图标。

例如下方的示例使用广发 Guangfa 来扩充基本图标库

js
app.use(KswIcon, { projectName: 'Guangfa' });

按需引用项目图标只需要在 ksw-vue-icon 后添加上 projectName,例如:

js
import { IconName } from 'ksw-vue-icon/Guangfa';
projectName备注
Base基本图标库
Guangfa广发图标库

别名图标

TIP

2.4.0 版本起图标库支持为图标设置别名

有时候因为业务需求,我们可能需要一个图标对应多个名称。在 icons-config.json 中的 alias 添加你的别名:

json
{
  "alias": ["alias-1", "alias-2", "alias-3"]
}

支持 VUE 组件

支持使用 vue 组件制作复杂的动画图标插画等设计资产, 请将组件放置于 src/components 中,同样支持配置 icons-config.json

彩色图标暗黑模式

当我们需要在在暗黑模式下修改彩色图标的颜色可以使用 cssfilter 属性来实现

css
.ksw-icon {
  .dark & :deep(svg path) {
    filter: hue-rotate(170deg) invert(100%) contrast(150%) saturate(200%);
  }
}

代码演示

基本用法

从组件顶部的 ksw-vue-icon 导入一个图标,然后在模板标签中使用它,也可以通过设置 spin 属性来实现动画旋转效果。

js
import {
  IconSearch,
  IconSettingFill,
  IconRefresh,
  IconArrowTop,
  IconLoading
} from "ksw-vue-icon";


<IconSearch />
<IconSettingFill color="#3491FA" />
<IconArrowTop />
<IconRefresh :spin="true" />
<IconArrowTop :rotate="180" />
<IconLoading />

SVG Script

图标库支持 SVG 中的 script 脚本元素,因此可以通过 javascript 来修改 SVG 元素,来为图标设置动画或形状。

下方的示例演示了 SVG Script 标签的作用。在代码中,我们使用 JavaScript 改变 SVG <text> 元素的内容。这样我们就能获得一个始终显示当前日期的日历图标。

点我查看代码
html
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" fill="none" onload="init()" aria-hidden="true"
  viewBox="0 0 24 24">
  <script type="text/javascript">
    function init() {
      try {
          var time = new Date();
          var locale = "zh-cn";


var DD = time.getDate();
          var MMM = time.toLocaleString(locale, { month: "short" }).toUpperCase();


document.querySelectorAll("[data-id-feda7348='day']").forEach(function(elem) {
              elem.textContent = DD;
          });
          document.querySelectorAll("[data-id-feda7348='month']").forEach(function(elem) {
              elem.textContent = MMM;
          });
      } catch (error) {
          console.error("An error occurred:", error);
      }
    }
  </script>
  <defs>
    <linearGradient id="42e69816_master_svg1_732_94332" x1=".5" x2=".5" y1="0" y2="1">
      <stop offset="0%" stop-color="#FCFCFB"></stop>
      <stop offset="100%" stop-color="#F0EEE7"></stop>
    </linearGradient>
    <clipPath id="42e69816_master_svg0_732_92815">
      <rect width="24" height="24" rx="0"></rect>
    </clipPath>
  </defs>
  <path fill="#F53F3F" d="M2 5a3 3 0 0 1 3-3h14a3 3 0 0 1 3 3v3H2Z"></path>
  <path fill="url(#42e69816_master_svg1_732_94332)" d="M2 8h20v10a4 4 0 0 1-4 4H6a4 4 0 0 1-4-4Z"></path>
  <text x="50%" y="6.75" data-id-feda7348="month"
    style="font-size: 4px; font-weight: 600; fill: rgb(255, 255, 255); text-anchor: middle;">7月</text>
  <text x="50%" y="15.5" data-id-feda7348="day"
    style="font-size: 12px; fill: rgb(38, 38, 38); text-anchor: middle; dominant-baseline: middle;">5</text>
</svg>

图标列表

API

参数说明类型默认值
size图标的大小,宽高相同number | string1em
color图标的颜色,默认为当前颜色string | string[]currentColor
rotate图标旋转角度(IE9 无效)number-
spin给图标加旋转动画booleanfalse