Spec-Zone.ru › CSS

border-image

Базовая линия Широко доступна

Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с февраля 2017 года.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Свойство border-image CSS рисует изображение вокруг заданного элемента. Оно заменяет обычную границу элемента.

Попробовать

Примечание: Следует указать отдельное значение border-style на случай, если изображение границы не загрузится. Хотя спецификация этого не требует, некоторые браузеры не отображают изображение границы, если border-style имеет значение none или border-width имеет значение 0.

Составные свойства

Это свойство является сокращением следующих свойств CSS:

  • border-image-outset
  • border-image-repeat
  • border-image-slice
  • border-image-source
  • border-image-width

Синтаксис

/* source | slice */
border-image: linear-gradient(red, blue) 27;

/* source | slice | repeat */
border-image: url("/images/border.png") 27 space;

/* source | slice | width */
border-image: linear-gradient(red, blue) 27 / 35px;

/* source | slice | width | outset | repeat */
border-image: url("/images/border.png") 27 23 / 50px 30px / 1rem round space;

/* Global values */
border-image: inherit;
border-image: initial;
border-image: revert;
border-image: revert-layer;
border-image: unset;

Свойство border-image можно задать от одного до пяти значений из перечисленных ниже.

Примечание: Если вычисленное значение border-image-source равно none, или если изображение не может быть отображено, вместо него будет отображено значение border-style.

Значения

<'border-image-source'>

Изображение-источник. См. border-image-source.

<'border-image-slice'>

Размеры для разделения исходного изображения на области. Можно указать до четырёх значений. См. border-image-slice.

<'border-image-width'>

Ширина изображения границы. Можно указать до четырёх значений. См. border-image-width.

<'border-image-outset'>

Расстояние изображения границы от внешнего края элемента. Можно указать до четырёх значений. См. border-image-outset.

<'border-image-repeat'>

Определяет, как края области исходного изображения подстраиваются под размеры изображения границы. Можно указать до двух значений. См. border-image-repeat.

Доступность

Ассистивные технологии не могут анализировать изображения границ. Если изображение содержит информацию, критически важную для понимания общей цели страницы, лучше описать её семантически в документе.

  • MDN Обзор WCAG, пояснения к руководству 1.1
  • Понимание критерия успеха 1.1.1 | Понимание WCAG 2.0

Формальное определение

Начальное значение как каждое из свойств сокращения:
  • border-image-source: none
  • border-image-slice: 100%
  • border-image-width: 1
  • border-image-outset: 0
  • border-image-repeat: stretch
Применимо к всем элементам, кроме внутренних элементов таблицы, когда border-collapse имеет значение collapse. Также применимо к ::first-letter.
Наследуется нет
Проценты как каждое из свойств сокращения:
  • border-image-slice: относятся к размеру изображения границы
  • border-image-width: относятся к ширине или высоте области изображения границы
Вычисленное значение как каждое из свойств сокращения:
  • border-image-outset: как указано, но относительные длины преобразуются в абсолютные
  • border-image-repeat: как указано
  • border-image-slice: от одного до четырёх процентов (как указано) или абсолютных значений, плюс ключевое слово fill при необходимости
  • border-image-source: none или изображение с абсолютным URI
  • border-image-width: как указано, но относительные длины преобразуются в абсолютные
Тип анимации как каждое из свойств сокращения:
  • border-image-outset: по типу вычисленного значения
  • border-image-repeat: дискретный
  • border-image-slice: по типу вычисленного значения
  • border-image-source: дискретный
  • border-image-width: по типу вычисленного значения

Формальный синтаксис

border-image = 
<'border-image-source'> ||
<'border-image-slice'> [ / <'border-image-width'> | / <'border-image-width'>? / <'border-image-outset'> ]? ||
<'border-image-repeat'>

<border-image-source> =
none |
<image>

<border-image-slice> =
[ <number [0,∞]> | <percentage [0,∞]> ]{1,4} &&
fill?

<border-image-width> =
[ <length-percentage [0,∞]> | <number [0,∞]> | auto ]{1,4}

<border-image-outset> =
[ <length [0,∞]> | <number [0,∞]> ]{1,4}

<border-image-repeat> =
[ stretch | repeat | round | space ]{1,2}

<image> =
<url> |
<gradient>

<length-percentage> =
<length> |
<percentage>

<url> =
<url()> |
<src()>

<url()> =
url( <string> <url-modifier>* ) |
<url-token>

<src()> =
src( <string> <url-modifier>* )

Примеры

Растровый

В этом примере мы применим диагональный узор к границам элемента. Источником изображения границы является файл ".png" размером 81 на 81 пиксел с тремя диагоналями по вертикали и горизонтали:

Eight diamonds: four red diamonds, one in each corner, and four orange diamonds, one on each side. The middle is empty.

HTML

<div id="bitmap">
  This element is surrounded by a bitmap-based border image!
</div>

CSS

Чтобы соответствовать размеру одной диагонали, мы используем значение 81 делённое на 3, или 27, для разделения изображения на области углов и краёв. Для центрирования изображения границы по краю фона элемента, мы зададим значения отступа равными половине значений ширины. Наконец, значение повторения round обеспечит равномерное соответствие фрагментов границы, то есть без обрезки или пробелов.

#bitmap {
  width: 200px;
  background-color: #ffa;
  border: 36px solid orange;
  margin: 30px;
  padding: 10px;

  border-image: url("border.png") 27 / 36px 28px 18px 8px / 18px 14px 9px 4px
    round;
}

Результат

Градиент

HTML

<div id="gradient">
  This element is surrounded by a gradient-based border image!
</div>

CSS

#gradient {
  width: 200px;
  border: 30px solid;
  border-image: repeating-linear-gradient(45deg, #f33, #3bf, #f33 30px) 60;
  padding: 20px;
}

Результат

Скругленные границы

border-radius не влияет на изображение границы. Это происходит потому, что border-image-outset может разместить изображение за пределами области границы, поэтому нет смысла обрезать изображение границы областью границы. Чтобы создать скругленные границы при использовании изображения границы, необходимо создать само изображение со скругленными углами или, в случае с градиентом, нарисовать его вместо фона. Ниже показан один из подходов к этому, заключающийся в использовании двух background-image:

HTML

<div id="rounded">
  This element is surrounded by a border image with rounded corners!
</div>

CSS

#rounded {
  width: 200px;
  /* Use transparent so the background image is visible */
  border: 10px solid transparent;
  padding: 20px;
  border-radius: 20px;
  background-image: linear-gradient(white, white),
    linear-gradient(to right, cyan, lime);
  background-origin: border-box;
  background-clip: padding-box, border-box;
}

Результат

Примечание: Предлагается новое значение background-clip: border-area для решения этой задачи.

Спецификации

Спецификация
CSS Фон и границы модуль уровня 3
# the-border-image

Совместимость с браузерами

Десктоп Мобильное
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
border-image
16До Chrome 112, абсолютная или процентная ширина изображения рамки может не иметь приоритета над более узкой border-width (ошибка 40541033).
7
12До Edge 112, абсолютная или процентная ширина изображения рамки может не иметь приоритета над более узкой border-width (ошибка 40541033).
12
15["Маленькие SVG неправильно растягиваются, потому что проценты в border-image-slice вычисляются как целые числа, а не числа с плавающей точкой (ошибка 1284797).", "До Firefox 47 SVG без области просмотра не нарезались правильно (ошибка 619500).", "С Firefox 48 по Firefox 49 SVG без области просмотра отображались так же, как SVG с областью просмотра, но если кусочки не составляли ровно 50%, они неправильно растягивались (ошибка 1264809).", "До Firefox 57 сохранялась проблема для SVG без области просмотра, когда e10s был отключен (ошибка 1290782)."]
3.5До Firefox 15 была реализована предыдущая версия спецификации с префиксом.
11До Opera 98, абсолютная или процентная ширина изображения рамки может не иметь приоритета над более узкой border-width (ошибка 40541033).
10.5–15
63
18До Chrome 112, абсолютная или процентная ширина изображения рамки может не иметь приоритета над более узкой border-width (ошибка 40541033).
18
15["Маленькие SVG неправильно растягиваются, потому что проценты в border-image-slice вычисляются как целые числа, а не числа с плавающей точкой (ошибка 1284797).", "До Firefox 47 SVG без области просмотра не нарезались правильно (ошибка 619500).", "С Firefox 48 по Firefox 49 SVG без области просмотра отображались так же, как SVG с областью просмотра, но если кусочки не составляли ровно 50%, они неправильно растягивались (ошибка 1264809).", "До Firefox 57 сохранялась проблема для SVG без области просмотра, когда e10s был отключен (ошибка 1290782)."]
4До Firefox 15 была реализована предыдущая версия спецификации с префиксом.
11Ширина изображения рамки с абсолютными или процентными значениями может не иметь приоритета над более узкой border-width (ошибка 40541033).
11–14
63.2
1.0До Samsung Internet 23.0, абсолютная или процентная ширина изображения рамки может не иметь приоритета над более узкой border-width (ошибка 40541033).
1.0
4.4До WebView 112, абсолютная или процентная ширина изображения рамки может не иметь приоритета над более узкой border-width (ошибка 40541033).
2
fill 16 12 15 15 6 18 15 14 6 1.0 4.4
gradient 7 12 29 15 4 18 29 14 3.2 1.0 4.4
optional_border_image_slice 16 12 15 15 6 18 15 14 6 1.0 4.4

См. также

  • border
  • outline
  • box-shadow
  • background-image
  • <url> тип
  • Функции градиента: conic-gradient(), repeating-conic-gradient(), linear-gradient(), repeating-linear-gradient(), radial-gradient(), repeating-radial-gradient()
  • Изображения границ в CSS: ключевая область фокусировки для Interop 2023 на блоге MDN (2023)

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/CSS/border-image

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API