Компоненты изображений BootstrapVue поддерживают округленные изображения, стили миниатюр, выравнивание и даже возможность создавать пустые изображения с дополнительным сплошным цветом фона. Поддержка отложенных изображений доступна через дополнительный компонент <b-img-lazy>
.
Разрешение изображения src
Свойство src
(и свойство blank-src
из <b-img-lazy>
), из коробки работает только с абсолютными или полностью определенными URL-адресами доменного имени. Если вы используете ресурсы проекта в качестве источников изображений, обратитесь к Component img src resolving для настройки vue-loader
, чтобы понять свойства пользовательских компонентов, которые определяют источники изображений.
Стилизация изображений
Для стилизации визуализированного элемента изображения доступно несколько свойств. В следующих подразделах рассматриваются различные варианты.
Адаптивные изображения
Изображения в BootstrapVue можно сделать адаптивными с помощью свойства fluid
(которое устанавливает max-width: 100%; height: auto;
через классы CSS), чтобы оно масштабировалось вместе с родительским элементом - до максимальной собственной ширины изображение.
<div>
<b-img src="https://picsum.photos/1024/400/?image=41" fluid alt="Адаптивное изображение"></b-img>
</div>
Чтобы создать плавное изображение, которое будет расти до ширины своего контейнера, используйте свойство fluid-grow
. Обратите внимание, что это может вызвать размытие небольших растровых изображений.
<div>
<h5>Маленькое изображение с <code>fluid</code>:</h5>
<b-img src="https://picsum.photos/300/150/?image=41" fluid alt="Изображение Fluid"></b-img>
<h5 class="my-3">Маленькое изображение с <code>fluid-grow</code>:</h5>
<b-img src="https://picsum.photos/300/150/?image=41" fluid-grow alt="Изображение Fluid-grow"></b-img>
</div>
Используйте свойство block
, чтобы изображение отображалось как блочный элемент, а не как встроенный в браузере элемент встроенного блока по умолчанию.
Примечание: В Internet Explorer 10, изображения SVG с fluid
имеют непропорционально большой размер. Чтобы исправить это, добавьте стиль width: 100% \9;
там, где это необходимо. Это исправление неправильно изменяет размер других форматов изображений, поэтому Bootstrap v4 не применяет его автоматически.
Эскизы изображений
Вы можете использовать свойство thumbnail
, чтобы придать изображению округлую светлую границу.
<b-container fluid class="p-4 bg-dark">
<b-row>
<b-col>
<b-img thumbnail fluid src="https://picsum.photos/250/250/?image=54" alt="Изображение 1"></b-img>
</b-col>
<b-col>
<b-img thumbnail fluid src="https://picsum.photos/250/250/?image=58" alt="Изображение 2"></b-img>
</b-col>
<b-col>
<b-img thumbnail fluid src="https://picsum.photos/250/250/?image=59" alt="Изображение 3"></b-img>
</b-col>
</b-row>
</b-container>
Закругленные углы
Вы можете контролировать, какие углы будут скруглены, установив для закругленной опоры одно из следующих значений:
true
(или свойство присутствует без значения): закруглить все углы false
(или свойство отсутствует): без явного закругления или углов (по умолчанию) 'top'
: закруглить верхние углы 'right'
: закруглить правые углы 'bottom'
: закруглить нижние углы 'left'
: закруглить левые углы 'circle'
: образует круг (если изображение квадратное) или овальную (если не квадратную) границу '0'
: явно отключить скругление углов
<template>
<div>
<b-img v-bind="mainProps" rounded alt="Закругленное изображение"></b-img>
<b-img v-bind="mainProps" rounded="top" alt="Закругленное сверху изображение"></b-img>
<b-img v-bind="mainProps" rounded="right" alt="Закругленное справа изображение"></b-img>
<b-img v-bind="mainProps" rounded="bottom" alt="Закругленное снизу изображение"></b-img>
<b-img v-bind="mainProps" rounded="left" alt="Закругленное слева изображение"></b-img>
<b-img v-bind="mainProps" rounded="circle" alt="Круглое изображение"></b-img>
<b-img v-bind="mainProps" rounded="0" alt="Не округленное изображение"></b-img>
</div>
</template>
<script>
export default {
data() {
return {
mainProps: { blank: true, blankColor: '#777', width: 75, height: 75, class: 'm1' }
}
}
}
</script>
Выравнивание изображений
Выровняйте изображения с помощью логических свойств left
(смещается влево) right
(смещается вправо) и center
(автоматически влево + правые поля). Вы также можете центрировать изображения, помещая их в контейнер с классом text-center
.
С выравниванием по левому и правому краю (с плавающей точкой):
<div class="clearfix">
<b-img left src="https://picsum.photos/125/125/?image=58" alt="Изображение слева"></b-img>
<b-img right src="https://picsum.photos/125/125/?image=58" alt="Изображение справа"></b-img>
</div>
По центру (блочное):
<div>
<b-img center src="https://picsum.photos/125/125/?image=58" alt="Изображение по центру"></b-img>
</div>
Примечание: left
имеет приоритет перед right
, которое имеет приоритет перед center
.
Пустые (или сплошные) изображения
<b-img>
обеспечивает встроенную поддержку для создания пустых изображений (по умолчанию прозрачных) любой ширины и высоты, путем установки свойства blank
и указания значений width
и height
(в пикселях). Вы можете применить любой из других свойств <b-img>
, чтобы изменить стиль/поведение сгенерированного изображения.
Используйте свойство blank-color
, чтобы установить цвет пустого изображения. Свойство blank-color
может принимать любое значение цвета CSS:
- Именованные цвета - например,
orange
или blue
- Шестнадцатеричные цвета - например,
#FF9E2C
- Цвета RGB и RGBa - например,
rgb(255, 158, 44)
и rgba(255, 158, 44, .5)
- Цвета HSL и HSLa - например,
hsl(32, 100%, 59%)
и hsla(32, 100%, 59%, .5)
По умолчанию blank-color
является transparent
.
<template>
<div>
<b-img v-bind="mainProps" alt="Прозрачное изображение"></b-img>
<b-img v-bind="mainProps" blank-color="#777" alt="Сокращенное цветное изображение HEX (#777)"></b-img>
<b-img v-bind="mainProps" blank-color="red" alt="Именованное цветное изображение (red)"></b-img>
<b-img v-bind="mainProps" blank-color="black" alt="Именованное цветное изображение (black)"></b-img>
<b-img v-bind="mainProps" blank-color="#338833" alt="Цветное изображение HEX"></b-img>
<b-img v-bind="mainProps" blank-color="rgba(128, 255, 255, 0.5)" alt="Цветное изображение RGBa"></b-img>
<b-img v-bind="mainProps" blank-color="#88f" alt="Сокращенный цвет HEX (#88f)"></b-img>
</div>
</template>
<script>
export default {
data() {
return {
mainProps: { blank: true, width: 75, height: 75, class: 'm1' }
}
}
}
</script>
Примечания:
- В режиме пустого изображения, если установлена только одна из ширины или высоты, для изображения будет установлено одинаковое значение для ширины и высоты.
- В режиме пустого изображения, если ширина и высота не заданы, ширина и высота будут внутренне установлены на 1.
- Свойство
blank
имеет приоритет перед свойством src
. Если вы установите оба параметра, а затем установите blank
в значение false
, тогда будет отображаться изображение, указанное в src
. - Пустые изображения отображаются с использованием URL-адресов данных изображения SVG.
- Свойства
width
и height
также будут применять атрибуты width
и height
к отображаемому тегу <img>
, даже если blank
не установлен.
Поддержка srcset
<b-img>
поддерживает атрибуты srcset
и sizes
на изображениях. Свойства принимают либо строковое значение, либо массив строк (массив строк будет преобразован в одну строку, разделенную запятыми).
Подробнее об использовании этих атрибутов смотрите в руководстве Адаптивные изображения MDN.
Примечания:
- Если задано свойство
blank
, то свойства srcset
и sizes
игнорируются - IE 11 не поддерживает
srcset
и sizes
, поэтому убедитесь, что у вас есть значение для свойства src
- Vue-loader не поддерживает относительные URL-адреса проекта (URL-адреса ресурсов) в атрибуте
srcset
. Вместо этого используйте require(...)
для разрешения отдельных путей URL. Будьте осторожны при создании строки URI данных, которая длиннее, чем поддерживается максимальной длиной значения атрибута браузера. Если в вашей конфигурации веб-пакета есть ограничение для url-loader
, и вы хотите запретить встроенные URL-адреса данных, вам, возможно, придется перезаписать ограничения загрузчика: require('!!url-loader?limit=0!./assets/photo.jpg')
- Поддержка
srcset
и sizes
была добавлена в выпуске 2.1.0
Отложенная загрузка изображений
Используйте наш дополнительный компонент изображения <b-img-lazy>
(основанный на <b-img>
) для отложенной загрузки изображений, когда они прокручиваются в область просмотра (или в пределах пикселей offset
в области просмотра).
При отложенной загрузке изображений используется IntersectionObserver
, если это поддерживается браузером (или через полифил), чтобы определить, когда изображение должно быть показано. Если поддержка IntersectionObserver
не обнаружена, то изображение будет всегда отображаться.
Использование
Установите свойство src
на URL-адрес изображения, которое вы хотите лениво загружать, и либо укажите URL-адрес изображения-заполнителя через свойство blank-src
, либо создайте для вас пустое изображение-заполнитель, оставив blank-src
как null
.
Укажите ширину и высоту заполнителя с помощью свойств blank-width
и blank-height
. Если эти свойства не установлены, они вернутся к свойствам width
и height
(которые применяются к изображению, указанному через src
).
Управляйте цветом сгенерированного пустого изображения, установив свойство blank-color
.
Изображения-заполнители (явно предоставленные или генерируемые динамически) должны иметь те же значения ширины и высоты или, по крайней мере, такое же соотношение сторон, что и изображение src
.
Не стесняйтесь использовать свойства fluid
, fluid-grow
, thumbnail
и rounded
для <b-img>
.
Свойство offset
prop specifies the number of pixels that an image needs to be near to the viewport to trigger it to be shown. The default value is 360
.
Свойство throttle
контролирует, как долго (в мс) после события scroll
(или resize
, или orientationchange
, или transitionend
) происходит до проверки, попало ли изображение в поле зрения (или в пределах просмотра offset
). По умолчанию 100
(ms). throttle
не действует, если обнаружена поддержка IntersectionObserver.
Как только изображение появится в поле зрения и отобразится, прослушиватели событий и/или наблюдатель пересечения удаляются.
Пример использования:
<template>
<div>
<b-img-lazy v-bind="mainProps" :src="getImageUrl(80)" alt="Изображение 1"></b-img-lazy>
<b-img-lazy v-bind="mainProps" :src="getImageUrl(82)" alt="Изображение 2"></b-img-lazy>
<b-img-lazy v-bind="mainProps" :src="getImageUrl(84)" alt="Изображение 3"></b-img-lazy>
<b-img-lazy v-bind="mainProps" :src="getImageUrl(85)" alt="Изображение 4"></b-img-lazy>
<b-img-lazy v-bind="mainProps" :src="getImageUrl(88)" alt="Изображение 5"></b-img-lazy>
<b-img-lazy v-bind="mainProps" :src="getImageUrl(90)" alt="Изображение 6"></b-img-lazy>
<b-img-lazy v-bind="mainProps" :src="getImageUrl(92)" alt="Изображение 7"></b-img-lazy>
<b-img-lazy v-bind="mainProps" :src="getImageUrl(94)" alt="Изображение 8"></b-img-lazy>
</div>
</template>
<script>
export default {
data() {
return {
mainProps: {
center: true,
fluidGrow: true,
blank: true,
blankColor: '#bbb',
width: 600,
height: 400,
class: 'my-5'
}
}
},
methods: {
getImageUrl(imageId) {
const { width, height } = this.mainProps
return `https://picsum.photos/${width}/${height}/?image=${imageId}`
}
}
}
</script>
Принудительно показать отложено загруженное изображение
Чтобы принудительно показать финальное изображение, установите для свойства show
значение true
. Свойство show
поддерживает модификатор Vue .sync
и будет обновлена до true
, когда будет показано окончательное изображение.
Поддержка отложенной загрузки srcset
<b-img-lazy>
поддерживает установку атрибутов srcset
и sizes
для визуализированного элемента <img>
. Эти свойства будут применены к изображению только после того, как оно появится в поле зрения.
Смотрите поддержку srcset
выше для подробностей и ограничений использования свойств.
Поддержка srcset
и sizes
была добавлена в выпуске 2.1.0
.