Иконки в компонентах

Иконки — важный элемент визуальной коммуникации пользовательских интерфейсов. Они позволяют передавать смысл без текста, ускоряют восприятие информации и делают интерфейс более компактным. В UI-библиотеке Vuetify иконки интегрированы практически во все интерактивные компоненты: кнопки, поля ввода, карточки, списки, панели навигации и другие элементы.

Библиотека предоставляет удобный механизм работы с иконками, который включает:

  • поддержку популярных иконочных наборов;
  • единый компонент для отображения иконок;
  • возможность использования иконок внутри других компонентов;
  • гибкую настройку размеров, цвета и положения.

Основным инструментом является компонент v-icon, который выступает универсальной оболочкой для отображения иконок из различных библиотек.


Подключение библиотек иконок

Vuetify не содержит собственный полноценный набор иконок, а использует сторонние библиотеки. Наиболее распространённые варианты:

  • Material Design Icons (MDI)
  • Material Icons
  • Font Awesome
  • собственные SVG-иконки

Чаще всего применяется 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

v-icon — универсальный компонент Vuetify для отображения иконок.

Базовый пример:

<v-icon>mdi-home</v-icon>

Результатом будет отображение иконки «дом».

Структура использования:

<v-icon>имя_иконки</v-icon>

Особенности компонента:

  • автоматически применяет стили Vuetify;
  • наследует цвет и размер от родительских компонентов;
  • поддерживает динамическое изменение иконок через реактивные данные.

Пример с динамическим значением:

<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>

Можно использовать:

  • стандартные цвета Vuetify (primary, secondary, success, error);
  • цвета Material Design (red, blue, amber);
  • собственные CSS-цвета.

Иконки внутри кнопок

Одна из самых распространённых областей применения — кнопки.

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>

Иконки помогают быстро обозначить действия:

  • редактирование
  • удаление
  • настройки
  • просмотр

Использование SVG-иконок

Vuetify поддерживает использование SVG-иконок напрямую.

Пример:

<v-icon>
  <svg viewBox="0 0 24 24">
    <path d="..." />
  </svg>
</v-icon>

SVG обеспечивает:

  • высокое качество при масштабировании;
  • возможность стилизации через CSS;
  • независимость от внешних библиотек.

Динамическая смена иконок

Иконка может изменяться в зависимости от состояния интерфейса.

Пример переключателя:

<v-btn icon @click="liked = !liked">
  <v-icon>
    {{ liked ? 'mdi-heart' : 'mdi-heart-outline' }}
  </v-icon>
</v-btn>

При нажатии иконка меняется между:

  • mdi-heart
  • mdi-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

Иконки можно дополнительно стилизовать через CSS.

Пример:

.custom-icon {
  font-size: 32px;
  color: purple;
}

Использование:

<v-icon class="custom-icon">mdi-star</v-icon>

Такой подход полезен при создании уникальных визуальных элементов интерфейса.


Интеграция иконок с системой тем Vuetify

Vuetify поддерживает тёмную и светлую темы, и иконки автоматически адаптируются к ним.

Пример:

<v-icon color="primary">mdi-weather-night</v-icon>

Цвет будет соответствовать текущей теме приложения.

Использование темы позволяет:

  • поддерживать единый стиль интерфейса;
  • быстро изменять внешний вид приложения;
  • автоматически адаптировать иконки к режиму dark/light.

Архитектурные особенности системы иконок Vuetify

Система иконок Vuetify построена на нескольких принципах:

Абстракция

Компонент v-icon скрывает детали конкретной библиотеки иконок.

Гибкость

Можно легко заменить библиотеку иконок без переписывания компонентов.

Интеграция

Иконки встроены в большинство компонентов и поддерживают их свойства и события.

Такая архитектура делает систему иконок Vuetify простой в использовании и масштабируемой при разработке крупных интерфейсов.