图标
Vuetify 只能看出 Material Design Icons、Material Icons、Font Awesome 4 和 Font Awesome 5。 默认情况下,应用程序将默认使用 Material Design Icons。
用例
要更改你的字体库,需要在实例化过程中添加 iconfont
选项。
// src/plugins/vuetify.js
import Vue from 'vue'
import Vuetify from 'vuetify/lib'
Vue.use(Vuetify)
export default new Vuetify({
icons: {
iconfont: 'mdiSvg', // 'mdi' || 'mdiSvg' || 'md' || 'fa' || 'fa4' || 'faSvg'
},
})
使用预定义选项将根据所选的预置预填充默认值。这将覆盖默认的 icon 值。欲了解更多信息,请参阅 icon preset values。
安装 iconfonts
你需要包括指定的图标库(即使使用默认图标库)。这可以通过包含 CDN 链接或将图标库导入到你的应用程序中来完成。
安装 Material Design Icons
这是 Vuetify 的默认图标字体。您可以通过 CDN 包含它:
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@4.x/css/materialdesignicons.min.css" rel="stylesheet">
或者作为本地依赖:
$ yarn add @mdi/font -D
// OR
$ npm install @mdi/font -D
// src/plugins/vuetify.js
import '@mdi/font/css/materialdesignicons.css' // Ensure you are using css-loader
import Vue from 'vue'
import Vuetify from 'vuetify/lib'
Vue.use(Vuetify)
export default new Vuetify({
icons: {
iconfont: 'mdi', // default - only for display purposes
},
})
安装 Material Design Icons (JS SVG)
指定 SVG 路径的方式来使用 @mdi/js。在生产环境中优化你的应用程序时推荐安装。如果你计划使用多个默认图标,那么就 只 需要包含它。
$ yarn add @mdi/js -D
// OR
$ npm install @mdi/js -D
指定 mdiSvg iconfont:
// src/plugins/vuetify.js
import Vue from 'vue'
import Vuetify from 'vuetify/lib'
Vue.use(Vuetify)
export default new Vuetify({
icons: {
iconfont: 'mdiSvg',
},
})
你可以自定义仅导入你使用的图标,以授予更小的捆绑包大小。
<!-- Vue Component -->
<template>
<v-icon>{{ svgPath }}</v-icon>
</template>
<script>
import { mdiAccount } from '@mdi/js'
export default {
data: () => ({
svgPath: mdiAccount
}),
}
</script>
安装 Material Icons
安装步骤与上面相同。对于没有构建过程的项目,建议从 CDN 导入图标
<link href="https://fonts.googleapis.com/css?family=Material+Icons" rel="stylesheet">
或者,可以使用 yarn 或 npm 在本地安装。 请记住,这不是官方的 google 仓库,可能无法接收更新
$ yarn add material-design-icons-iconfont -D
// OR
$ npm install material-design-icons-iconfont -D
安装软件包后,将其导入到主目录的 js 文件中。通常是位于 src/
文件夹中的 main.js
, index.js
或 app.js
。如果您使用的是 SSR 应用程序,则可能在 client.js
或 entry-client.js
文件中。
// src/plugins/vuetify.js
import 'material-design-icons-iconfont/dist/material-design-icons.css' // Ensure you are using css-loader
import Vue from 'vue'
import Vuetify from 'vuetify/lib'
Vue.use(Vuetify)
export default new Vuetify({
icons: {
iconfont: 'md',
},
})
安装 Font Awesome 5 Icons
安装 FontAwesome 最简单的方法是使用 cdn。在你主要的 index.html
的头部里放置这个代码:
<link href="https://use.fontawesome.com/releases/v5.0.13/css/all.css" rel="stylesheet">
要在本地安装,你可以使用你喜欢的软件包管理器版本 Free 安装 FontAwesome:
$ yarn add @fortawesome/fontawesome-free -D
// OR
$ npm install @fortawesome/fontawesome-free -D
在你的主入口中,只需导入包中的 all.css。如果你正在操作一个 webpack 项目,你需要使用 webpack css loader 来设置对 .css
文件的支持。如果你已经在使用 Vue CLI,那么这些都会自动完成。
// src/plugins/vuetify.js
import '@fortawesome/fontawesome-free/css/all.css' // Ensure you are using css-loader
import Vue from 'vue'
import Vuetify from 'vuetify/lib'
Vue.use(Vuetify)
export default new Vuetify({
icons: {
iconfont: 'fa',
},
})
安装 Font Awesome 4 Icons
与上面相同。通过 cdn 安装 FontAwesome 在你的项目内是最简单方式:
<link href="https://cdn.jsdelivr.net/npm/font-awesome@4.x/css/font-awesome.min.css" rel="stylesheet">
安装 FontAwesome4 的方法与它的新版本相同,只是从一个不同的仓库安装。 你将看准是 font-awesome
而不是 @fortawesome
。
$ yarn add font-awesome@4.7.0 -D
// OR
$ npm install font-awesome@4.7.0 -D
不要忘记,你的项目需要识别 css。如果你正在使用 webpack,安装和设置 css loader。
// src/plugins/vuetify.js
import 'font-awesome/css/font-awesome.min.css' // Ensure you are using css-loader
import Vue from 'vue'
import Vuetify from 'vuetify/lib'
Vue.use(Vuetify)
export default new Vuetify({
icons: {
iconfont: 'fa4',
},
})
安装 Font Awesome SVG Icons
添加必需的依赖项。
$ yarn add @fortawesome/fontawesome-svg-core @fortawesome/vue-fontawesome @fortawesome/free-solid-svg-icons -D
// or
$ npm install @fortawesome/fontawesome-svg-core @fortawesome/vue-fontawesome @fortawesome/free-solid-svg-icons -D
然后在 Vuetify 配置中全局添加 font-awesome-icon
组件,并设置 faSvg
为图标字体。
// src/plugins/vuetify.js
import Vue from 'vue'
import Vuetify from 'vuetify/lib'
import { library } from '@fortawesome/fontawesome-svg-core'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import { fas } from '@fortawesome/free-solid-svg-icons'
Vue.component('font-awesome-icon', FontAwesomeIcon) // Register component globally
library.add(fas) // Include needed icons
Vue.use(Vuetify)
export default new Vuetify({
icons: {
iconfont: 'faSvg',
},
})
使用自定义图标
假设你的应用程序在 Vuetify 组件中调用自定义图标。你可以在全局级别配置它,而不是每次出现组件时都创建包装器组件或手动定义特定的图标。
// src/plugins/vuetify.js
import Vue from 'vue'
import Vuetify from 'vuetify/lib'
Vue.use(Vuetify)
export default new Vuetify({
icons: {
iconfont: 'fa',
values: {
cancel: 'fas fa-ban',
menu: 'fas fa-ellipsis-v',
},
},
})
假设你的应用程序在 Vuetify 组件中调用自定义图标。你可以在全局级别配置它,而不是每次出现组件时都创建包装器组件或手动定义特定的图标。
// src/plugins/vuetify.js
import Vue from 'vue'
import Vuetify from 'vuetify/lib'
const MY_ICONS = {
complete: '...',
cancel: '...',
close: '...',
delete: '...', // delete (e.g. v-chip close)
clear: '...',
success: '...',
info: '...',
warning: '...',
error: '...',
prev: '...',
next: '...',
checkboxOn: '...',
checkboxOff: '...',
checkboxIndeterminate: '...',
delimiter: '...', // for carousel
sort: '...',
expand: '...',
menu: '...',
subgroup: '...',
dropdown: '...',
radioOn: '...',
radioOff: '...',
edit: '...',
ratingEmpty: '...',
ratingFull: '...',
ratingHalf: '...',
loading: '...',
first: '...',
last: '...',
unfold: '...',
file: '...',
}
Vue.use(Vuetify)
export default new Vuetify({
icons: {
values: MY_ICONS,
},
})
可重复使用的自定义图标
Vuetify 会 自动 将提供的任何图标字符串合并到可用预设池中。这使你可以通过简单地引用 全局图标 来创建可用于应用程序中使用的自定义字符串。
// src/plugins/vuetify.js
import Vue from 'vue'
import Vuetify from 'vuetify/lib'
Vue.use(Vuetify)
export default new Vuetify({
icons: {
iconfont: 'mdi', // default
values: {
product: 'mdi-dropbox',
support: 'mdi-lifebuoy',
steam: 'mdi-steam-box',
pc: 'mdi-desktop-classic',
xbox: 'mdi-xbox',
playstation: 'mdi-playstation',
switch: 'mdi-nintendo-switch',
},
},
})
给定提供的字符串,这可以帮助确保你的应用程序始终使用特定的图标。这样有几种方法让你可以在此系统上使用 <v-icon>
。
<!-- Vue Component -->
<template>
<div>
<v-icon>$vuetify.icons.product</v-icon>
<v-icon>$product</v-icon>
<v-icon v-text="'$vuetify.icons.support'"></v-icon>
<v-icon v-text="'$support'"></v-icon>
<v-icon v-html="'$vuetify.icons.steam'"></v-icon>
<v-icon v-html="'$steam'"></v-icon>
<v-icon v-text="platform"></v-icon>
</div>
</template>
<script>
export default {
data: () => ({
user: {
name: 'John Leider',
platform: 'pc',
},
}),
computed: {
platform () {
return '$' + this.user.platform
}
}
}
</script>
自定义组件
你可以在自己的自定义组件中使用相同的图标字符串。每当通过 v-text, v-html 或作为文本传递 $vuetify.icons (or shortcut $) 时,<v-icon>
都会查找该指定值。这使你可以创建易于构建和管理的自定义解决方案。
<!-- Vue Component -->
<template>
<div class="my-component">
<v-icon v-text="icon"></v-icon>
<slot></slot>
</div>
</template>
<script>
export default {
props: {
icon: {
type: String,
default: '$cancel'
}
}
}
</script>
自定义 Font Awesome Pro Icons
你可以在 Font Awesome Pro 中使用组件图标来选择各个图标的权重:
// src/plugins/vuetify.js
import Vue from 'vue'
import Vuetify from 'vuetify/lib'
import { library } from '@fortawesome/fontawesome-svg-core'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import { faBars } from '@fortawesome/pro-light-svg-icons'
import { faVuejs } from '@fortawesome/free-brands-svg-icons'
Vue.component('font-awesome-icon', FontAwesomeIcon)
library.add(faBars, faVuejs)
Vue.use(Vuetify)
export default new Vuetify({
icons: {
values: {
// set menu to light (default is solid)
menu: {
component: FontAwesomeIcon,
props: {
icon: ['fal', 'bars'],
},
},
// reusable custom icon
vuejs: {
component: FontAwesomeIcon,
props: {
icon: ['fab', 'vuejs'],
},
},
},
},
})
组件图标
你可以使用自己的组件图标,而不是使用预设提供的图标字体。 你也可以在 Vuetify 组件中切换预设图标和你自己的图标。
// src/plugins/vuetify.js
import Vue from 'vue'
import Vuetify from 'vuetify/lib'
import IconComponent from './IconComponent.vue'
Vue.use(Vuetify)
export default new Vuetify({
icons: {
values: {
product: {
component: IconComponent, // you can use string here if component is registered globally
props: { // pass props to your component if needed
name: 'product',
},
},
},
},
})
如果你想要你的 SVG 图标继承颜色并正确缩放-请确保添加以下 CSS:
.your-svg-icon
fill: currentColor
使用缺失的 Material Icons
默认缺少一些 material icons,例如 person
和 person_outline
可用,但是 visibility_outline
不可用,而 visibility
可用。要使用这些缺失的 material icons,请在下面包含字体(如果已经注册,请删除另一个 material font)。
<link
rel="stylesheet"
href="https://fonts.googleapis.com/css?family=Material+Icons|Material+Icons+Outlined|Material+Icons+Two+Tone|Material+Icons+Round|Material+Icons+Sharp"
/>
你可以添加你的自定义组件。假定它是 @/components/MaterialIcon.vue。
<template>
<i :class="standardClass">{{ parsed.id }}</i>
</template>
<script>
export default {
props: {
name: {
type: String
}
},
computed: {
parsed() {
const check = (customSuffixes, standardSuffix) => {
for (let suffix of customSuffixes) {
suffix = `_${suffix}`
if (this.name.endsWith(suffix)) {
return {
suffix: standardSuffix,
id: this.name.substring(0, this.name.indexOf(suffix))
}
}
}
return false
}
return (
check(['fill', 'filled'], '') ||
check(['outline', 'outlined'], 'outlined') ||
check(['two-tone', 'two-toned'], 'two-tone') ||
check(['round', 'rounded'], 'round') ||
check(['sharp', 'shapened'], 'sharp') || {
suffix: '',
id: this.name
}
)
},
standardClass() {
if (this.parsed.suffix) {
return `material-icons-${this.parsed.suffix}`
}
return 'material-icons'
}
}
}
</script>
然后你需要确切注册你想要的 material icons。
import Vue from 'vue'
import Vuetify from 'vuetify/lib'
import MaterialIcon from '@/components/MaterialIcon'
function missingMaterialIcons(ids) {
const icons = {}
for (const id of ids) {
for (const suffix of ['fill', 'outline', 'two-tone', 'round', 'sharp']) {
const name = `${id}_${suffix}`
icons[name] = {
component: MaterialIcon,
props: {
name
}
}
}
}
return icons
}
Vue.use(Vuetify, {
// iconfont: 'md',
icons: {
...missingMaterialIcons(['visibility', 'visibility_off'])
// This will enable 'visibility_outline', 'visibility_off_round' and so on.
}
})
最后,你可以使用像这样的 material icons。
<!-- using as a prop. Be careful of double and single quotation. -->
<v-text-field
label="password"
:append-icon="
pwShow
? '$visibility_outline'
: '$visibility_off_outline'
"
@click:append="pwShow = !pwShow"
:type="pwShow ? 'text' : 'password'"
/>
<!-- using directly as an icon component -->
<v-icon>$visibility_outline</v-icon>