Spec-Zone.ru › CSS

Свойство CSS `border-image-slice`

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

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

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

Попробуйте

border-image-slice: 30;
border-image-slice: 30 fill;
border-image-slice: 44;
border-image: url("/shared-assets/images/examples/border-florid.svg") round;
border-image-slice: calc(50 / 184 * 100%) calc(80 / 284 * 100%) fill;
border-image-width: 30px 48px;
<section id="default-example">
  <div id="example-element">This is a box with a border around it.</div>
</section>
#example-element {
  width: 80%;
  height: 80%;
  display: flex;
  align-items: center;
  justify-content: center;
  padding: 50px;
  background: #fff3d4;
  color: black;
  border: 30px solid;
  border-image: url("/shared-assets/images/examples/border-diamonds.png") 30
    round;
  font-size: 1.2em;
}

Синтаксис

/* All sides */
border-image-slice: 30%;

/* top and bottom | left and right */
border-image-slice: 10% 30%;

/* top | left and right | bottom */
border-image-slice: 30 30% 45;

/* top | right | bottom | left */
border-image-slice: 7 12 14 5;

/* Using the `fill` keyword */
border-image-slice: 10% fill;
border-image-slice: fill 10%;

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

Для свойства border-image-slice можно указать от одного до четырёх значений <number-percentage>, обозначающих положение каждого среза изображения. Отрицательные значения недопустимы; значения, превышающие соответствующий размер, ограничиваются значением 100%.

  • Если указано одно положение, все четыре среза создаются на одинаковом расстоянии от соответствующих сторон.
  • Если указано два положения, первое значение задаёт срезы, измеряемые от верхней и нижней сторон, а второе — срезы, измеряемые от левой и правой сторон.
  • Если указано три положения, первое значение задаёт срез, измеряемый от верхней стороны, второе — срезы, измеряемые от левой и правой сторон, а третье — срез, измеряемый от нижней стороны.
  • Если указано четыре положения, они задают срезы, измеряемые от верхней, правой, нижней и левой сторон именно в таком порядке (по часовой стрелке).

Необязательное значение fill, если оно используется, можно указать в любом месте объявления.

Значения

<number>
Задаёт смещение края в пикселях для растровых изображений и в координатах для векторных изображений. Для векторных изображений число отсчитывается относительно размера элемента, а не исходного изображения, поэтому в таких случаях обычно предпочтительнее использовать проценты.
<percentage>
Задаёт смещение края в процентах от размера исходного изображения: от его ширины для горизонтальных смещений и от высоты для вертикальных.
fill
Сохраняет среднюю область изображения и отображает её как фоновое изображение, но поверх самой background. Её ширина и высота соответствуют ширине верхней и левой областей изображения.

Описание

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

The nine regions defined by the border-image or border-image-slice properties

На приведённой выше схеме показано расположение каждой области.

  • Области 1–4 — угловые. Каждая из них используется один раз для формирования угла итогового изображения границы.
  • Области 5–8 — краевые. В итоговом изображении границы они повторяются, масштабируются или изменяются иным образом, чтобы соответствовать размерам элемента.
  • Область 9 — центральная. По умолчанию она отбрасывается, но используется как фоновое изображение, если задано ключевое слово fill.

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

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

Исходное значение 100%
Применяется к всем элементам, за исключением внутренних элементов таблиц, если border-collapse имеет значение <code>collapse</code>
Наследуется нет
Проценты относятся к размеру изображения границы
Вычисленное значение от одного до четырёх процентных значений (как указано) или абсолютных значений длины, а также ключевое слово <code>fill</code>, если оно указано
Тип анимации по типу вычисленного значения

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

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

Примеры

Настраиваемая ширина границы и срез

В следующем примере показан <div> с установленным изображением границы. Исходное изображение для границ выглядит так:

Nine multi-colored diamonds laid out in three rows and three columns

Ширина ромбов в исходном изображении составляет 30px, поэтому, если задать 30 пикселей для обоих свойств — border-width и border-image-slice, — ромбы в границе будут отображаться целиком и достаточно чётко:

border-width: 30px;
border-image-slice: 30;

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

border-image-slice Изменяет размер среза изображения, используемого для каждой границы и угла границы (а также области содержимого, если используется ключевое слово fill). Если изменить значение относительно 30, граница будет выглядеть несколько неровной, но это может дать интересный эффект.

border-width: изменяет ширину границы. Размер выбранного изображения масштабируется так, чтобы поместиться в границу. Поэтому, если ширина больше размера среза, изображение может выглядеть несколько пикселизированным (если, конечно, не использовать изображение SVG).

HTML

<div class="wrapper">
  <div></div>
</div>

<ul>
  <li>
    <label for="width">slide to adjust <code>border-width</code></label>
    <input type="range" min="10" max="45" id="width" />
    <output id="width-output">30px</output>
  </li>
  <li>
    <label for="slice">slide to adjust <code>border-image-slice</code></label>
    <input type="range" min="10" max="45" id="slice" />
    <output id="slice-output">30</output>
  </li>
</ul>

CSS

.wrapper {
  width: 400px;
  height: 300px;
}

div > div {
  width: 300px;
  height: 200px;
  border-width: 30px;
  border-style: solid;
  border-image: url("/shared-assets/images/examples/border-diamonds.png");
  border-image-slice: 30;
  border-image-repeat: round;
}

li {
  display: flex;
  place-content: center;
}

JavaScript

const widthSlider = document.getElementById("width");
const sliceSlider = document.getElementById("slice");
const widthOutput = document.getElementById("width-output");
const sliceOutput = document.getElementById("slice-output");
const divElem = document.querySelector("div > div");

widthSlider.addEventListener("input", () => {
  const newValue = `${widthSlider.value}px`;
  divElem.style.borderWidth = newValue;
  widthOutput.textContent = newValue;
});

sliceSlider.addEventListener("input", () => {
  const newValue = sliceSlider.value;
  divElem.style.borderImageSlice = newValue;
  sliceOutput.textContent = newValue;
});

Результат

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

Спецификация
CSS Backgrounds and Borders Module Level 3
# border-image-slice

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

Компьютеры Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android WebView на iOS
border-image-slice
15
12
15Маленькие изображения SVG растягиваются неправильно, поскольку проценты в border-image-slice вычисляются как целые числа, а не как числа с плавающей запятой (ошибка 1284797).
До Firefox 47 изображения SVG без области просмотра нарезались неправильно (ошибка 619500).
В Firefox 48–49 изображения SVG без области просмотра отображались так же, как изображения SVG с областью просмотра, но при значениях срезов, отличных от 50%, растягивались неправильно (ошибка 1264809).
До Firefox 57 сохранялась проблема с изображениями SVG без области просмотра при отключённом режиме e10s (ошибка 1290782).
15
6
18
15Маленькие изображения SVG растягиваются неправильно, поскольку проценты в border-image-slice вычисляются как целые числа, а не как числа с плавающей запятой (ошибка 1284797).
До Firefox для Android 47 изображения SVG без области просмотра нарезались неправильно (ошибка 619500).
В Firefox для Android 48–49 изображения SVG без области просмотра отображались так же, как изображения SVG с областью просмотра, но при значениях срезов, отличных от 50%, растягивались неправильно (ошибка 1264809).
До Firefox для Android 57 сохранялась проблема с изображениями SVG без области просмотра при отключённом режиме e10s (ошибка 1290782).
14
6
1.0
4.4
4
6

См. также

  • Иллюстрированное описание синтаксиса с одним–четырьмя значениями
  • Изображения границ в CSS: ключевое направление Interop 2023 в блоге MDN (2023)

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

Spec-Zone.ru

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