border-image

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since February 2017.

Die border-image CSS Eigenschaft zeichnet ein Bild um ein gegebenes Element. Sie ersetzt den regulären Rahmen des Elements.

Probieren Sie es aus

border-image: url("/shared-assets/images/examples/border-diamonds.png") 30;
border-image: url("/shared-assets/images/examples/border-diamonds.png") 30 /
  19px round;
border-image: url("/shared-assets/images/examples/border-diamonds.png") 30
  fill / 30px / 30px space;
border-image: linear-gradient(#f6b73c, #4d9f0c) 30;
border-image: repeating-linear-gradient(30deg, #4d9f0c, #9198e5, #4d9f0c 20px)
  60;
<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: #000;
  border: 30px solid;
  border-image: url("/shared-assets/images/examples/border-diamonds.png") 30
    round;
  font-size: 1.2em;
}

Hinweis: Sie sollten einen separaten border-style angeben, für den Fall, dass das Rahmenbild nicht geladen werden kann. Obwohl die Spezifikation es nicht strikt erfordert, rendern einige Browser das Rahmenbild nicht, wenn border-style none oder border-width 0 ist.

Teilweise Eigenschaften

Diese Eigenschaft ist eine Kurzschrift für folgende CSS-Eigenschaften:

Syntax

css
/* 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;

Die border-image-Eigenschaft kann mit einer bis fünf der unten aufgelisteten Werte angegeben werden.

Hinweis: Wenn der berechnete Wert von border-image-source none ist oder wenn das Bild nicht angezeigt werden kann, wird der border-style stattdessen angezeigt.

Werte

<'border-image-source'>

Die Quell-Bilddatei. Siehe border-image-source.

<'border-image-slice'>

Die Maße zum Zerlegen des Quellbildes in Regionen. Bis zu vier Werte können angegeben werden. Siehe border-image-slice.

<'border-image-width'>

Die Breite des Rahmenbildes. Bis zu vier Werte können angegeben werden. Siehe border-image-width.

<'border-image-outset'>

Der Abstand des Rahmenbildes von der Außenseite des Elements. Bis zu vier Werte können angegeben werden. Siehe border-image-outset.

<'border-image-repeat'>

Definiert, wie die Randbereiche des Quellbildes angepasst werden, um die Maße des Rahmenbildes zu erfüllen. Bis zu zwei Werte können angegeben werden. Siehe border-image-repeat.

Barrierefreiheit

Assistive Technologien können Rahmenbilder nicht interpretieren. Wenn das Bild Informationen enthält, die entscheidend für das Verständnis des Gesamtzwecks der Seite sind, ist es besser, es semantisch im Dokument zu beschreiben.

Formale Definition

Anfangswertwie die jeweiligen Kurzschreibweisen:
Anwendbar aufAlle Elemente, außer interne Tabellenelemente, falls border-collapse collapse ist. Auch anwendbar auf ::first-letter.
VererbtNein
Prozentwertewie die jeweiligen Kurzschreibweisen:
Berechneter Wertwie die jeweiligen Kurzschreibweisen:
Animationstypwie die jeweiligen Kurzschreibweisen:

Formale Syntax

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>* )

Beispiele

Bitmap

In diesem Beispiel werden wir ein Diamantmuster auf die Rahmen eines Elements anwenden. Die Quelle für das Rahmenbild ist eine ".png"-Datei mit 81x81 Pixeln, wobei drei Diamanten vertikal und horizontal verlaufen:

Acht Diamanten: vier rote Diamanten, einer in jeder Ecke, und vier orangefarbene Diamanten, einer auf jeder Seite. Die Mitte ist leer.

HTML

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

CSS

Um die Größe eines einzelnen Diamanten zu erreichen, verwenden wir einen Wert von 81 geteilt durch 3, also 27, um das Bild in Eck- und Randbereiche zu schneiden. Um das Rahmenbild auf der Rande der Hintergrundfläche des Elements zu zentrieren, machen wir die Werte beim Austritt gleich der Hälfte der Breitenwerte. Schließlich sorgt ein Wiederholungswert von round dafür, dass die Rahmenscheiben gleichmäßig passen, d.h. ohne Abschneiden oder Lücken.

css
#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;
}

Ergebnis

Verlauf

HTML

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

CSS

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

Ergebnis

Abgerundete Kanten

border-radius hat keinen Einfluss auf das Rahmenbild. Dies liegt daran, dass border-image-outset das Bild außerhalb des Rahmenkastens platzieren kann, sodass es keinen Sinn ergibt, dass das Rahmenbild durch den Rahmenbereich abgeschnitten wird. Um abgerundete Ecken bei Verwendung eines Rahmenbildes zu erzeugen, sollte man das Bild selbst mit abgerundeten Ecken erstellen oder, im Falle eines Verlaufs, es stattdessen als Hintergrund zeichnen. Unten zeigen wir einen Ansatz, dies zu tun, indem zwei background-images verwendet werden: eins, das den Rahmenkasten erweitert, und ein weiteres für den Innenabstandskasten.

HTML

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

CSS

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;
}

Ergebnis

Hinweis: Es gibt einen neuen background-clip: border-area Wert der vorgeschlagen wird, um diesen Anwendungsfall zu adressieren.

Spezifikationen

Specification
CSS Backgrounds and Borders Module Level 3
# the-border-image

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch