Компоненты изображений 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.