border-image ⚡️ HTML и CSS с примерами кода
Свойство border-image
используется для отображения рисованной рамки вокруг элемента.
Толщина рамки задаётся свойством border
, при этом если указано border: 0
, то рамка не выводится. При других значениях border
рисунок всегда имеет приоритет. Фон, если он задан через свойство background
, отображается под рамкой.
Демо
Это свойство является сокращением для следующих свойств CSS:
border-image-outset
border-image-repeat
border-image-slice
border-image-source
border-image-width
- border
- border-bottom
- border-bottom-color
- border-bottom-left-radius
- border-bottom-right-radius
- border-bottom-style
- border-bottom-width
- border-collapse
- border-color
- border-image
- border-image-outset
- border-image-repeat
- border-image-slice
- border-image-source
- border-image-width
- border-left
- border-left-color
- border-left-style
- border-left-width
- border-radius
- border-right
- border-right-color
- border-right-style
- border-right-width
- border-style
- border-top
- border-top-color
- border-top-left-radius
- border-top-right-radius
- border-top-style
- border-top-width
- border-width
- box-shadow
Синтаксис
/* 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
может быть указано от одного до пяти значений, перечисленных ниже.
Значения
none
- Не отображает рисованную рамку, используется установленный стиль границы.
URL
- Путь к графическому файлу. Обязательный параметр.
Само изображение для создания рамки продемонстрировано на рис. 1 и состоит из девяти областей: четырёх уголков, верхней, правой, нижней, левой стороны и центральной части, в которой выводится содержимое элемента.
<число>
- Одно, два, три или четыре значения, которые указывают размеры частей изображения в пикселях, задавая тем самым области деления. Сами единицы не пишутся, только число (10, а не 10px).На рис. 2 красными линиями выделены необходимые для создания рамки области.
Разрешается использовать одно, два, три или четыре значения, разделяя их между собой пробелом. Эффект зависит от количества значений и приведен в табл. 1.
Число значений | Результат |
---|---|
1 | Устанавливает границы одинаковой толщины на каждой стороне рисунка. |
2 | Первое значение устанавливает высоту верхней и нижней границы, второе — левой и правой. |
3 | Первое значение определяет высоту верхней границы, второе — левой и правой, а третье — высоту нижней границы. |
4 | Поочерёдно устанавливается размеры верхней, правой, нижней и левой границы. |
<проценты>
- Аналогично
<числу>
, но значения задаются в процентах. Тот или другой параметр обязателен. <толщина>
- Через слэш пишется одно, два, три или четыре значения толщины границы на каждой стороне элемента. Является аналогом
border-width
и использует тот же синтаксис. stretch
- Растягивает рисунок границы до размеров элемента. Это значение используется по умолчанию.
repeat
- Повторяет рисунок границы.
round
- Повторяет рисунок и масштабирует его так, чтобы на стороне элемента оказалось целое число изображений.
Влияние этих параметров на вид рамки показано на рисунках.
Значение по-умолчанию:
border-image: none;
Применяется ко всем элементам, за исключением тех, у кого
задан как collapse
Спецификации
- CSS Backgrounds and Borders Module Level 3
Поддержка браузерами
Can I Use border-image? Data on support for the border-image feature across the major browsers from caniuse. com.
Описание и примеры
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>border-image</title> <style> div { border: 30px solid #40c4c8; padding: 20px; border-image: url(/example/image/bg-image.png) 30 round round; } </style> </head> <body> <div> Витраж представляет собой композицию сделанную из множества цветных стекол обрамлённых проволокой и наиболее эффектно смотрится при прохождении через него солнечного или искусственного света. </div> </body> </html>
Ссылки
- генератор кода border-image
Разбираемся с border-image из CSS3 — CSS-LIVE
Перевод статьи CSS3 Border-Image Explained с сайта demosthenes.info, c разрешения автора — Дадли Стори.
Одно из самых мощных новых свойств CSS, border
-
image
, которое к тому же ещё и имеет шикарную поддержку, за исключением (а теперь все вместе!) IE10 и более ранних версий. Но, к сожалению, также является одним из самых непонятных и сложных для понимания свойств.
Объяснение того, как работает border
-
image
, возможно, лучше всего проиллюстрировать картинкой. Во-первых, давайте разберём любую рамку на составляющие: представим золочёную раму для картины, которая разделена на девять «плиток» двумя горизонтальными и двумя вертикальными линиями. На рисунке выше я пометил вертикальные разделительные линии, как
и V2
, а горизонтальные, как h2
и h3
.
Вместо того, чтобы позволить вам задать отдельное изображение для каждой части границы, border
-
image
настаивает, чтобы вы создали одно изображение, в котором все части находятся на своих местах, а затем порезали это изображение при помощи CSS-значений, которые привязываются к позиции этих линий.
Представим, что мы играем в Морской бой и обозначим каждую «плитку», созданную нашими разделительными линиями. К верхнему левому углу мы могли бы обратиться как A1
, к правой средней части B3
, и т.д. (Средняя часть — B2
— будет проигнорирована CSS, после того, как мы определим фрагменты для нашего изображения рамки.) Места размещения фрагментов предопределяют роли для наших «плиток». A3
всегда займет место изображения верхнего правого угла для нашей рамки; C2
будет использоваться для нижнего края, и т.д.
Давайте рассмотрим боковые стороны и верх нашей рамки, поскольку они находятся в довольно специфичных, притом изменчивых, условиях. Когда мы применяем рамку к HTML-элементу, мы не знаем, какой величины будет бокс. После того, как эти условия применятся к рамке, угловые «плитки» не будут затронуты изменениями размера, но боковые стороны, а также верх и низ определённо изменятся. Нам надо решить, как должны вести себя «плитки», которые там будут размещены: будут ли они повторяться или вытягиваться, если бокс станет больше? Это решение относится к дизайну нашей рамки и поэтому и нам придется обозначить наш выбор при написании CSS.
Наконец, давайте подумаем о линиях, которыми созданы наши плитки: двух горизонтальных и двух вертикальных. Нам нужно сообщить CSS, где будут находиться эти воображаемые разделители, для того, чтобы он применил эту информацию для создания «плиток». Мы могли бы отсчитывать их положение либо в процентах либо в пикселях от углов. (Я бы сказал, что в большинстве случаев второе проще всего, кроме случая с SVG-картинками в качестве изображения рамки).
Заметьте, что шевроны на углах этой рамки означают, что фрагменты обязаны быть достаточно большими, чтобы включить те детали, которые увеличивают размер рамки и произведут эффект виньетки, как в настоящей раме, который на самом деле реалистичен для профессионально оформленной фотографии или картины. Я сделал внутреннюю часть рамки прозрачной, что означает, что background
-
color
, который я указываю, будет просвечивать насквозь.
Способ, которым измеряется и вносится в объявление позиция разделителей, тоже странен: h3 отмеряется от низа изображения, h2 — от верха, V1
— от левого края, а V2
— от правого. Они находятся в объявлении в таком порядке:
border-image: url(image) h2 V2 h3 V1
Как ни странно, когда значения вводятся в виде пикселов, за ними не следует суффикс «px
», в отличие от почти всего остального в CSS.
Данное изображение под лицензией Creative Commons (снятое Энни Чартранд) вставлено на страницу при помощи этого кода
<img src="teracotta-statue.jpg" alt="Terracotta Statue" class="frame">
И учитывая верхнее изображение рамки, CSS, который мы могли бы применить к ней, был бы примерно таким:
img.frame { border-image: url('frame.png'); background-color:
93 92 87 92 #
ffe
; }
(Заметьте, что этот код пока ещё не работает: есть ещё несколько вещей, которые нужно добавить).
Есть несколько вариантов того, как будут обрабатываться стороны. stretch
именно так и работает, repeat
будет повторять «плитки», чтобы уместить их в доступную область, round
— это гибрид обоих значений, который старается использовать для сторон полные варианты плиток, но растягивая их там, где необходимо.
Важно отметить, что вы также должны предоставить раздельное объявление border
-
width
, чтобы сообщить браузеру какой ширины каждая сторона, чтобы изображения могли в них вместиться. Большинство источников скажут вам, что размеры, используемые в border
-
width
, должны в точности совпадать с теми, которые используются для позиции фрагментов, т.е.:
border-width: 93px 92px 87px 92px
;
Но я обнаружил, что с единственным значением border
-
width
рамка по сути масштабируется:
border-width:60
px
;
Помните, что в виде запасного варианта вам также нужна обычная рамка на случай, если изображение для «плиток» не загружается или посетитель использует IE: я бы предложил взять рамку толщиной примерно как плитки и воспользоваться ее преобладающим цветом, возможно, с каким-нибудь малоиспользуемым border
-
style
впридачу.
Итак, полный код для эффекта, который показан в верху этой страницы, выглядит так:
img.frame { border-image: url('frame.png')93 92 87 92 stretch stretch
; border-color:#f4be52
; border-style:inset
; border-width:60px
; width:500px
; height:333px
;background-color:#ffe
; }
Из-за неизбежного растяжения и деформации, которые должно претерпеть любое изображение, применяемое в border
-
image
, я бы рекомендовал использовать PNG-изображения для рамок, где это возможно. PNG-24 также позволяет делать части плиток прозрачными, что очень важно, если вы используете большие украшения для каждого угла, как в нашем примере с золочённой рамой. Без прозрачности внутренних частей изображения наша рама рискует наложиться на что-нибудь из внутреннего содержимого бокса.
Восхитительно, что box
-
shadow
продолжит работать так, как ожидалось. Конечно, тень отразит контур фигуры CSS-бокса, а не контур самой рамки; если внешняя сторона рамки неправильной формы, то вы могли бы создать реалистичную тень, используя настоящий CSS-фильтр падающей тени или подредактировав растровую картинку в таком редакторе, как PhotoShop.
Я бы также посоветовал использовать направляющие, инструмент «Выделение» и окно «Информация», чтобы измерять фрагменты. Мы делали похожую работу ранее – текст, огибающий фигуру и Семантические CSS3-спрайты (действительно, спецификации свойства clip
и border
-
image
тесно связаны между собой). Ещё как вариант, можно использовать онлайн-инструмент Кевина Декера – «Генератор Border Image», чтобы создать CSS для вашей рамки.
P.S. Это тоже может быть интересно:
Генератор CSS — Граница
Генератор CSS — Граница
сохранить | reset
Border
Border Width px
Border Style soliddotteddasheddoublehiddenridgeinsetoutset
Border Color
Individual
Border Radius
All Radius px
Top Left px
Top Right px
Bottom Right px
Нижний левый пикс.
Тень блока
Shadow Type OutsetInset
xy Position
Shadow Fade
Shadow Dravid
Shadow Color
Добавить больше [+]
Фон
Цвет. -yrepeat
Положение фона
ключевое слово
% (проценты)
пикселей (пикселей)
по горизонтали — xleftcenterright
по вертикали — y topcenterbottom
horizontal — x%
vertical — y %
horizontal — xpx
vertical — y px
Text Shadow
Text Color
Shadow Color
XY Position
Shadow blur
Add more [ +]
Градиент
Ориентациялинейнаярадиальнаяэллиптическаяповторяющаяся линейнаяповторяющаяся радиальнаяповторяющаяся эллиптическая
Размердальняя сторонадальний угол
Позициявверху слевавверху в центревверху справавлево в центрев центре справа по центру внизу слевавнизу по центру внизу справаpx px% %
PX PX
%
градуса
Start Color
Конец Цвет
Добавить стоп [+]
Трансформация
Матрица (A, B, C, D, Y)
A B x B x.
C D Y
0 0 1
Индивидуальное преобразование
Вращение
Перевод XY
Переход
Добавить свойство [+]
Анимация
Play/Stop
.0002 Function lineareaseease-inease-in-outease-outcubic-bezier
speed duration(sec)
start delay
iteration count1 time2 timesinfinite
Image Filter
Greyscale
Saturate
Opacity
Brightness
Contrast
Оттенок-поворот
Инверсия
Генератор CSS — граница
В блочной модели граница находится между полями и отступами. Поля и отступы используются для получения некоторого невидимого пространства среди других элементов HTML. Граница — это внешняя видимая область HTML-элемента.
Вы можете установить цвет границы, стиль и размер индивидуально или комбинировать.
/* синтаксис */
border: