Компонент v-img в Vuetify используется
для отображения изображений с возможностью управления их размером,
масштабированием, положением и эффектами загрузки. Он обеспечивает
адаптивное отображение и корректную обработку ошибок при загрузке
изображений, что особенно важно для динамических интерфейсов.
Базовое использование выглядит следующим образом:
<v-img
src="https://example.com/image.jpg"
alt="Описание изображения"
></v-img>
src — путь к изображению, может быть
локальным или внешним URL.alt — альтернативный текст для
доступности и SEO.Компонент автоматически масштабирует изображение под контейнер, сохраняя пропорции.
v-img поддерживает фиксированные и адаптивные
размеры:
<v-img
src="https://example.com/image.jpg"
width="300"
height="200"
></v-img>
width и
height могут задаваться в пикселях,
процентах или с помощью CSS-классов Vuetify (ma-4,
pa-2, d-flex, и т.д.).contain и
cover через свойство contain
управляет способом заполнения контейнера:<v-img
src="https://example.com/image.jpg"
contain
width="400"
height="300"
></v-img>
contain сохраняет все изображение в
контейнере, может оставлять пустое пространство.cover,
изображение обрезается по краям, но полностью заполняет контейнер.v-img поддерживает плавную загрузку и обработку ошибок.
Для этого используются слоты:
placeholder — отображается до полной
загрузки изображения.error — отображается при невозможности
загрузки.Пример:
<v-img src="https://example.com/image.jpg">
<template #placeholder>
<v-row class="fill-height ma-0" align="center" justify="center">
<v-progress-circular indeterminate color="primary"></v-progress-circular>
</v-row>
</template>
<template #error>
<v-row class="fill-height ma-0" align="center" justify="center">
<v-icon color="red">mdi-alert-circle</v-icon>
</v-row>
</template>
</v-img>
placeholder может содержать любой
компонент Vuetify, например, индикатор загрузки.error позволяет показать
пользовательскую ошибку или альтернативное изображение.Компонент поддерживает выравнивание изображения внутри контейнера с
помощью свойства position. Оно принимает
CSS-подобные значения, например:
<v-img
src="https://example.com/image.jpg"
height="300"
position="top center"
></v-img>
top, bottom, center,
left, right управляют точкой привязки
изображения.cover изображение будет обрезаться
относительно указанной позиции.v-img можно использовать для создания визуально богатых
фонов с градиентами или наложением текста:
<v-img
src="https://example.com/image.jpg"
height="400"
>
<v-container fill-height>
<v-row align="center" justify="center">
<v-col class="text-center">
<div class="white--text font-weight-bold text-h4">Заголовок на изображении</div>
</v-col>
</v-row>
</v-container>
<template #gradient>
linear-gradient(to bottom, rgba(0,0,0,0.5), rgba(0,0,0,0.7))
</template>
</v-img>
#gradient позволяет наложить линейный
или радиальный градиент поверх изображения.v-img остаются
интерактивными, благодаря слоту содержимого.Компонент поддерживает ленивую загрузку через атрибут
lazy-src, что важно для производительности
при работе с большим количеством изображений:
<v-img
src="https://example.com/high-res.jpg"
lazy-src="https://example.com/low-res.jpg"
aspect-ratio="16/9"
></v-img>
lazy-src — предварительное изображение
низкого разрешения.aspect-ratio сохраняет пропорции
контейнера до полной загрузки изображения, предотвращая “прыжки”
контента.Свойство aspect-ratio позволяет задать
отношение ширины к высоте контейнера, независимо от размеров исходного
изображения:
<v-img
src="https://example.com/image.jpg"
aspect-ratio="4/3"
></v-img>
1.5 для 3:2).v-img часто используется внутри
v-card,
v-carousel или
v-sheet:
<v-card max-width="400">
<v-img
src="https://example.com/image.jpg"
height="200"
></v-img>
<v-card-title>Карточка с изображением</v-card-title>
<v-card-text>
Пример текста, который сопровождает изображение.
</v-card-text>
</v-card>
Можно делать изображения кликабельными или с эффектами наведения:
<v-img
src="https://example.com/image.jpg"
class="hover-scale-transition"
@click="handleClick"
></v-img>
hover-scale-transition,
elevation-3, rounded-lg) добавляют визуальные
эффекты.@click, @mouseenter)
делают компонент интерактивным.v-img является универсальным инструментом для работы с
изображениями в Vuetify, позволяя создавать адаптивные, интерактивные и
визуально привлекательные интерфейсы без сложных решений на чистом CSS и
JS.