Иконки — важный элемент визуальной коммуникации пользовательских интерфейсов. Они позволяют передавать смысл без текста, ускоряют восприятие информации и делают интерфейс более компактным. В UI-библиотеке Vuetify иконки интегрированы практически во все интерактивные компоненты: кнопки, поля ввода, карточки, списки, панели навигации и другие элементы.
Библиотека предоставляет удобный механизм работы с иконками, который включает:
Основным инструментом является компонент
v-icon, который выступает универсальной
оболочкой для отображения иконок из различных библиотек.
Vuetify не содержит собственный полноценный набор иконок, а использует сторонние библиотеки. Наиболее распространённые варианты:
Чаще всего применяется Material Design Icons, так как библиотека разрабатывается теми же принципами дизайна, что и Vuetify.
Пример подключения через CDN:
<link
href="https://cdn.jsdelivr.net/npm/@mdi/font@6.x/css/materialdesignicons.min.css"
rel="stylesheet"
/>
После подключения иконки становятся доступными через компонент
v-icon.
v-icon — универсальный компонент Vuetify для отображения
иконок.
Базовый пример:
<v-icon>mdi-home</v-icon>
Результатом будет отображение иконки «дом».
Структура использования:
<v-icon>имя_иконки</v-icon>
Особенности компонента:
Пример с динамическим значением:
<v-icon>{{ iconName }}</v-icon>
Размер иконок может изменяться с помощью встроенных свойств или CSS.
Vuetify предоставляет готовые модификаторы:
| Свойство | Описание |
|---|---|
| small | уменьшенный размер |
| large | увеличенный |
| x-large | очень крупный |
Пример:
<v-icon small>mdi-heart</v-icon>
<v-icon large>mdi-heart</v-icon>
<v-icon x-large>mdi-heart</v-icon>
Альтернативный вариант — управление размером через CSS:
<v-icon style="font-size: 40px">mdi-star</v-icon>
Иконки поддерживают систему цветов Vuetify. Цвет задаётся через
атрибут color.
Пример:
<v-icon color="red">mdi-alert</v-icon>
<v-icon color="primary">mdi-account</v-icon>
<v-icon color="green">mdi-check</v-icon>
Можно использовать:
primary,
secondary, success, error);red, blue,
amber);Одна из самых распространённых областей применения — кнопки.
Vuetify позволяет легко добавлять иконки внутрь компонента
v-btn.
<v-btn color="primary">
<v-icon left>mdi-plus</v-icon>
Добавить
</v-btn>
Модификатор left размещает иконку перед текстом.
<v-btn color="primary">
Сохранить
<v-icon right>mdi-content-save</v-icon>
</v-btn>
Иногда кнопка состоит только из иконки. Для этого используется
атрибут icon.
<v-btn icon>
<v-icon>mdi-heart</v-icon>
</v-btn>
Такой тип кнопок часто применяется в:
Компонент v-text-field поддерживает
встроенные иконки.
Доступны два основных атрибута:
| Атрибут | Назначение |
|---|---|
| prepend-icon | иконка слева |
| append-icon | иконка справа |
Пример:
<v-text-field
label="Поиск"
prepend-icon="mdi-magnify"
></v-text-field>
Иконка появляется перед полем ввода.
Иконка может реагировать на события.
Пример поля поиска с кнопкой очистки:
<v-text-field
v-model="search"
label="Поиск"
append-icon="mdi-close"
@click:append="search = ''"
></v-text-field>
Особенность Vuetify — возможность обрабатывать события иконок через специальный синтаксис:
@click:append
@click:prepend
Списки (v-list) часто используют иконки для обозначения
действий или категорий.
Пример:
<v-list>
<v-list-item>
<v-list-item-icon>
<v-icon>mdi-account</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-list-item
├─ v-list-item-icon
│ └─ v-icon
└─ v-list-item-content
Карточки (v-card) часто используют иконки в заголовках
или действиях.
Пример:
<v-card>
<v-card-title>
<v-icon class="mr-2">mdi-information</v-icon>
Информация
</v-card-title>
<v-card-actions>
<v-btn icon>
<v-icon>mdi-pencil</v-icon>
</v-btn>
<v-btn icon>
<v-icon>mdi-delete</v-icon>
</v-btn>
</v-card-actions>
</v-card>
Иконки помогают быстро обозначить действия:
Vuetify поддерживает использование SVG-иконок напрямую.
Пример:
<v-icon>
<svg viewBox="0 0 24 24">
<path d="..." />
</svg>
</v-icon>
SVG обеспечивает:
Иконка может изменяться в зависимости от состояния интерфейса.
Пример переключателя:
<v-btn icon @click="liked = !liked">
<v-icon>
{{ liked ? 'mdi-heart' : 'mdi-heart-outline' }}
</v-icon>
</v-btn>
При нажатии иконка меняется между:
mdi-heartmdi-heart-outlineЭтот приём часто используется для:
Навигация (v-navigation-drawer, v-app-bar)
активно использует иконки.
Пример меню:
<v-list-item>
<v-list-item-icon>
<v-icon>mdi-view-dashboard</v-icon>
</v-list-item-icon>
<v-list-item-title>
Панель управления
</v-list-item-title>
</v-list-item>
В интерфейсах админ-панелей иконки позволяют:
Многие компоненты Vuetify поддерживают слоты, позволяющие вставлять иконки в разные части интерфейса.
Пример кнопки с иконкой через слот:
<v-btn>
<template v-slot:prepend>
<v-icon>mdi-download</v-icon>
</template>
Скачать
</v-btn>
Слоты дают гибкость при сложных интерфейсах.
В большинстве приложений используются стандартные иконки Material Design:
| Иконка | Назначение |
|---|---|
| mdi-home | главная страница |
| mdi-account | профиль |
| mdi-settings | настройки |
| mdi-delete | удаление |
| mdi-pencil | редактирование |
| mdi-plus | добавление |
| mdi-magnify | поиск |
Использование знакомых символов повышает интуитивность интерфейса.
При работе с иконками важно учитывать несколько факторов.
1. Единый стиль
Нельзя смешивать разные наборы иконок (например Material и Font Awesome) без необходимости — это нарушает визуальную целостность интерфейса.
2. Минимизация
Иконки должны дополнять интерфейс, а не перегружать его.
3. Семантическое значение
Иконка должна однозначно передавать смысл действия.
Например:
4. Доступность
При использовании только иконок желательно добавлять
aria-label или всплывающие подсказки
(v-tooltip).
Пример:
<v-btn icon aria-label="Удалить">
<v-icon>mdi-delete</v-icon>
</v-btn>
Это улучшает доступность интерфейса для экранных считывателей.
Иконки можно дополнительно стилизовать через CSS.
Пример:
.custom-icon {
font-size: 32px;
color: purple;
}
Использование:
<v-icon class="custom-icon">mdi-star</v-icon>
Такой подход полезен при создании уникальных визуальных элементов интерфейса.
Vuetify поддерживает тёмную и светлую темы, и иконки автоматически адаптируются к ним.
Пример:
<v-icon color="primary">mdi-weather-night</v-icon>
Цвет будет соответствовать текущей теме приложения.
Использование темы позволяет:
Система иконок Vuetify построена на нескольких принципах:
Абстракция
Компонент v-icon скрывает детали конкретной библиотеки
иконок.
Гибкость
Можно легко заменить библиотеку иконок без переписывания компонентов.
Интеграция
Иконки встроены в большинство компонентов и поддерживают их свойства и события.
Такая архитектура делает систему иконок Vuetify простой в использовании и масштабируемой при разработке крупных интерфейсов.