Material Design Icons (MDI) — это обширная библиотека пиктограмм, разработанная в рамках дизайн-системы Material Design. Иконки представляют собой векторные изображения, оптимизированные для интерфейсов веб-приложений и мобильных приложений. В экосистеме Vuetify данный набор используется по умолчанию и обеспечивает единый визуальный стиль компонентов интерфейса.
Иконки применяются для:
В библиотеке присутствуют тысячи пиктограмм, охватывающих широкий спектр задач: интерфейсные элементы, уведомления, медиа, навигацию, коммуникации, файлы, устройства, социальные сети и многое другое.
Vuetify может использовать несколько различных наборов иконок, однако Material Design Icons является стандартным вариантом. Для корректной работы иконок необходимо подключить соответствующий пакет.
Самый простой способ — добавить ссылку на таблицу стилей в HTML-документ:
<link href="https://cdn.jsdelivr.net/npm/@mdi/font@latest/css/materialdesignicons.min.css" rel="stylesheet">
После подключения иконки становятся доступными во всех компонентах Vuetify.
При использовании современных инструментов сборки предпочтительно устанавливать пакет через npm или yarn.
npm install @mdi/font
или
yarn add @mdi/font
Затем необходимо подключить стили:
import '@mdi/font/css/materialdesignicons.css'
v-iconДля отображения иконок во Vuetify используется компонент v-icon. Он обеспечивает удобную интеграцию с системой компонентов и автоматически наследует стили интерфейса.
<v-icon>mdi-home</v-icon>
Иконка определяется строкой, начинающейся с префикса mdi-.
<v-icon>mdi-account</v-icon>
<v-icon>mdi-menu</v-icon>
<v-icon>mdi-close</v-icon>
<v-icon>mdi-heart</v-icon>
<v-icon>mdi-email</v-icon>
Эти пиктограммы часто используются в интерфейсах:
| Иконка | Назначение |
|---|---|
mdi-menu |
открытие навигационного меню |
mdi-close |
закрытие окна |
mdi-account |
профиль пользователя |
mdi-heart |
отметка избранного |
mdi-email |
почта или сообщения |
Размер иконок регулируется через свойства компонента или через CSS.
<v-icon small>mdi-home</v-icon>
<v-icon>mdi-home</v-icon>
<v-icon large>mdi-home</v-icon>
<v-icon x-large>mdi-home</v-icon>
Предустановленные размеры соответствуют системе масштабирования Material Design.
Размер можно задать через CSS-класс или встроенный стиль:
<v-icon style="font-size: 48px">mdi-home</v-icon>
Иконки наследуют цвет текста, поэтому их внешний вид легко изменяется с помощью системы цветов Vuetify.
<v-icon color="primary">mdi-star</v-icon>
<v-icon color="red">mdi-alert</v-icon>
<v-icon color="green">mdi-check</v-icon>
Vuetify применяет цвета из своей палитры.
<v-icon class="custom-icon">mdi-heart</v-icon>
.custom-icon {
color: #ff4081;
}
Одним из ключевых преимуществ Vuetify является автоматическая интеграция иконок с большинством компонентов.
<v-btn icon>
<v-icon>mdi-magnify</v-icon>
</v-btn>
Кнопка превращается в компактный элемент управления, содержащий только пиктограмму.
Иконки часто используются внутри форм.
<v-text-field
label="Поиск"
prepend-icon="mdi-magnify"
></v-text-field>
или
<v-text-field
label="Пароль"
append-icon="mdi-eye"
></v-text-field>
<v-app-bar-nav-icon>
<v-icon>mdi-menu</v-icon>
</v-app-bar-nav-icon>
Иконки применяются для обозначения навигационных элементов.
Иконка может служить самостоятельным интерактивным элементом.
<v-icon @click="deleteItem">mdi-delete</v-icon>
Однако более распространённой практикой является использование иконок внутри кнопок:
<v-btn color="red">
<v-icon left>mdi-delete</v-icon>
Удалить
</v-btn>
Иконки помогают визуально структурировать списки элементов.
<v-list>
<v-list-item>
<v-list-item-icon>
<v-icon>mdi-folder</v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title>Документы</v-list-item-title>
</v-list-item-content>
</v-list-item>
</v-list>
Такая структура часто используется в боковых меню и файловых менеджерах.
<v-alert type="success" icon="mdi-check-circle">
Операция успешно выполнена
</v-alert>
Vuetify автоматически подбирает соответствующие иконки для разных типов уведомлений:
Но при необходимости можно указать собственную пиктограмму.
Material Design Icons поддерживают анимации через CSS.
<v-icon class="mdi-spin">mdi-loading</v-icon>
Класс mdi-spin создаёт непрерывное вращение, которое
часто используется для индикаторов загрузки.
.icon-rotate {
animation: rotate 2s linear infinite;
}
@keyframes rotate {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
<v-icon class="icon-rotate">mdi-cog</v-icon>
Многие компоненты Vuetify используют слоты, позволяющие внедрять иконки в различные части интерфейса.
<v-chip close>
Тег
</v-chip>
По умолчанию используется иконка закрытия mdi-close.
Её можно заменить:
<v-chip close close-icon="mdi-delete">
Тег
</v-chip>
Vuetify поддерживает несколько библиотек иконок:
Конфигурация задаётся при инициализации Vuetify.
createVuetify({
icons: {
defaultSet: 'mdi'
}
})
Material Design Icons могут использоваться не только как шрифты, но и как SVG.
SVG-иконки имеют ряд преимуществ:
Пример регистрации SVG-иконок:
import { aliases, mdi } from 'vuetify/iconsets/mdi-svg'
createVuetify({
icons: {
defaultSet: 'mdi',
aliases,
sets: {
mdi
}
}
})
Vuetify предоставляет систему псевдонимов, позволяющую использовать короткие имена для часто используемых пиктограмм.
Пример:
aliases: {
close: 'mdi-close',
delete: 'mdi-delete',
success: 'mdi-check'
}
После этого иконки можно использовать так:
<v-icon>$close</v-icon>
Это повышает читаемость кода и облегчает изменение иконок в будущем.
При использовании большого количества иконок следует учитывать некоторые аспекты производительности.
SVG-иконки:
При сборке проекта можно подключать только используемые SVG-иконки, уменьшая размер бандла.
Иконки, подключённые через CDN, обычно кэшируются браузером, что снижает сетевую нагрузку при повторных посещениях приложения.
В крупных приложениях важно поддерживать единый подход к использованию иконок.
Распространённые практики:
1. Централизованный файл иконок
export const icons = {
add: 'mdi-plus',
edit: 'mdi-pencil',
delete: 'mdi-delete',
search: 'mdi-magnify'
}
Использование:
<v-icon>{{ icons.add }}</v-icon>
2. Семантические имена
Вместо конкретных названий иконок используются имена действий:
iconSave
iconDelete
iconEdit
Это облегчает замену визуального представления без изменения логики интерфейса.
3. Ограниченный набор
Большие интерфейсы могут содержать тысячи пиктограмм, но на практике рекомендуется использовать ограниченный и повторяющийся набор, чтобы интерфейс оставался визуально целостным.
Набор MDI включает десятки тематических категорий:
Интерфейс
Пользователь
Файлы
Медиа
Навигация
Такое разделение облегчает поиск нужной пиктограммы при разработке интерфейса.
В рамках Material Design сформированы несколько важных рекомендаций:
1. Иконка должна иметь понятный смысл
Пользователь должен мгновенно распознавать действие.
2. Избегать перегрузки
Слишком большое количество пиктограмм ухудшает читаемость интерфейса.
3. Сохранять единый стиль
Использование разных библиотек иконок может нарушить визуальную целостность.
4. Использовать подписи
Если значение иконки может быть неоднозначным, рядом размещается текст.
Material Design Icons активно используются в основных элементах интерфейса:
Благодаря тесной интеграции с компонентами Vuetify иконки становятся важным инструментом построения понятных, современных и визуально согласованных пользовательских интерфейсов.