W3docs

Propriedade CSS border-image

A propriedade abreviada CSS border-image permite usar uma imagem como borda de um elemento. Veja exemplos e experimente.

A propriedade abreviada border-image permite usar uma imagem — ou um gradiente CSS — como a borda de um elemento, em vez de uma linha sólida simples. É uma das propriedades CSS3.

Esta página explica como a propriedade funciona (o modelo de nove fatias por trás dela), a sintaxe da forma abreviada, vários exemplos executáveis e quando faz sentido usar border-image.

Como border-image funciona: o modelo de nove fatias

O truque que faz border-image funcionar é o nine-slicing (divisão em nove partes). O navegador pega sua imagem de origem e a corta com quatro linhas — duas horizontais, duas verticais — em nove regiões:

  • 4 cantos são colocados nos quatro cantos do elemento e nunca são esticados ou repetidos.
  • 4 bordas (superior, direita, inferior, esquerda) preenchem o espaço entre os cantos. Elas são esticadas, repetidas, arredondadas ou espaçadas dependendo de border-image-repeat.
  • 1 centro é descartado por padrão, permitindo que o fundo do elemento apareça. Adicione a palavra-chave fill em border-image-slice para mantê-lo.

A posição dessas linhas de corte é controlada por border-image-slice. É esse modelo que permite que uma pequena imagem de uma moldura decorativa envolva uma caixa de qualquer tamanho sem distorcer os cantos.

Importante: border-image só é exibido quando o elemento realmente possui uma borda. É necessário definir um border-style (ou a forma abreviada border) diferente de none — por exemplo border: 10px solid transparent; — caso contrário, nada aparece.

A forma abreviada e suas subpropriedades

Esta forma abreviada combina várias propriedades individuais de border-image. Os valores omitidos assumem seus valores iniciais. Veja as notas para cada subpropriedade abaixo:

  • border-image-source - Se o valor for "none", ou se a imagem não puder ser exibida, os estilos de borda serão usados.
  • border-image-slice - A parte central da imagem é tratada como totalmente transparente, a menos que o valor "fill" seja definido.
  • border-image-width - Se o valor desta propriedade for maior que a border-width do elemento, a imagem de borda se estenderá além da borda de padding (e/ou content). Também é importante saber que esta propriedade pode ser especificada com um, dois, três ou quatro valores.
  • border-image-outset - Também pode ser especificada com um, dois, três ou quatro valores.
  • border-image-repeat - Pode ser especificada com dois valores. Se o segundo valor for omitido, assume-se que é igual ao primeiro. Quando definimos apenas um valor, ele aplica o mesmo comportamento nos quatro lados; quando definimos dois valores, o primeiro se aplica ao topo e à base, e o segundo à esquerda e à direita.
PropriedadeValor
Valor Inicialnone 100% 1 0 stretch
Aplica-se aTodos os elementos, exceto elementos internos de tabela quando border-collapse é "collapse". Também se aplica a ::first-letter.
HerdadoNão
AnimávelNão
VersãoCSS3
Sintaxe DOMobject.style.borderImage = "url(border.png) 30 round"

Sintaxe

Sintaxe da Propriedade CSS border-image

border-image: source slice width outset repeat | initial | inherit;

Exemplo da propriedade border-image:

Exemplo da Propriedade CSS border-image

<!DOCTYPE html>
<html>
  <head>
    <title>The title of the document</title>
    <style>
      .border {
        border: 10px solid transparent;
        padding: 15px;
        border-image: url(/uploads/media/default/0001/01/812bf6a749522b8185c1beee20dd99dd6c6c87da.jpeg) round;
        border-image-slice: 10%;
      }
    </style>
  </head>
  <body>
    <h2>Border-image-slice example</h2>
    <p class="border">border-image: 10% round;</p>
    <p>Here is the original image used:</p>
    <img src="/uploads/media/default/0001/01/812bf6a749522b8185c1beee20dd99dd6c6c87da.jpeg" style="width:50%" />
  </body>
</html>

Resultado

SS border-image Property

Exemplo da propriedade border-image com múltiplos valores:

Exemplo da Propriedade CSS border-image com diferentes valores

<!DOCTYPE html>
<html>
  <head>
    <title>The title of the document</title>
    <style>
      .border {
        border: 10px solid transparent;
        padding: 15px;
        border-image: url(/uploads/media/default/0001/01/812bf6a749522b8185c1beee20dd99dd6c6c87da.jpeg) round;
        border-image-slice: 30%;
        border-image-repeat: repeat;
        border-image-width: 15px;
      }
      .border2 {
        border: 10px solid transparent;
        padding: 15px;
        border-image: url(/uploads/media/default/0001/01/812bf6a749522b8185c1beee20dd99dd6c6c87da.jpeg) round;
        border-image-slice: 20%;
        border-image-repeat: round;
        border-image-width: 10px;
      }
      .border3 {
        border: 10px solid transparent;
        padding: 15px;
        border-image: url(/uploads/media/default/0001/01/812bf6a749522b8185c1beee20dd99dd6c6c87da.jpeg) round;
        border-image-slice: 15%;
        border-image-repeat: space;
        border-image-width: 20px;
      }
    </style>
  </head>
  <body>
    <h2>Border-image example with all values.</h2>
    <p class="border">border-image: 30% 15px repeat</p>
    <p class="border2">border-image: 20% 10px round;</p>
    <p class="border3">border-image: 15% 20px space;</p>
    <p>Here is the original image used:</p>
    <img src="/uploads/media/default/0001/01/812bf6a749522b8185c1beee20dd99dd6c6c87da.jpeg" style="width:50%" />
  </body>
</html>

Usando um gradiente CSS como borda

border-image-source também aceita um gradiente além de uma URL, permitindo criar uma borda colorida sem nenhum arquivo de imagem. O gradiente é tratado exatamente como uma imagem e fatiado da mesma forma.

<!DOCTYPE html>
<html>
  <head>
    <title>The title of the document</title>
    <style>
      .gradient-border {
        border: 12px solid transparent;
        padding: 15px;
        border-image: linear-gradient(45deg, #1095c1, #f7df1e) 1;
      }
    </style>
  </head>
  <body>
    <p class="gradient-border">A border drawn from a CSS gradient.</p>
  </body>
</html>

O 1 após o gradiente é o valor de border-image-slice. Como um gradiente não tem bordas reais a proteger, fatiá-lo em 1 simplesmente mapeia as quatro bordas e cantos para a borda sem distorção.

Quando usar border-image

Use border-image quando uma única cor sólida não for suficiente:

  • Molduras decorativas ou temáticas — bordas ornamentadas, desenhadas à mão ou com aparência de papel rasgado que seriam impossíveis com border-style.
  • Bordas com gradiente — veja o exemplo acima; muito mais simples do que simular com um elemento envoltório e background-clip.
  • Padrões repetidos — um pequeno bloco que envolve caixas de qualquer tamanho graças ao modelo de nove fatias.

Para cantos arredondados simples, use border-radius; para uma linha colorida normal, use a forma abreviada padrão border — elas são mais leves e animáveis, enquanto border-image não é.

Valores

ValorDescriçãoExperimente
border-image-sourceEspecifica a imagem de origem usada para criar a imagem de borda. Pode ser uma URL, URI de dados, gradiente CSS ou SVG inline.
border-image-sliceEspecifica como fatiar a imagem definida por border-image-source. A imagem é sempre dividida em nove seções: quatro cantos, quatro bordas e o centro.Experimente »
border-image-widthEspecifica a largura da imagem de borda.
border-image-repeatEspecifica se a imagem de borda é repetida, arredondada ou esticada.Experimente »
initialDefine a propriedade com seu valor padrão.
inheritHerda a propriedade do elemento pai.

Suporte dos navegadores

border-image é suportado em todos os navegadores modernos (Chrome, Edge, Firefox, Safari e Opera). Como ele volta automaticamente para o border-style/border-color definido, é possível combiná-lo com uma borda normal como aprimoramento progressivo: navegadores mais antigos ou sem suporte exibem a borda simples, enquanto os mais novos exibem a imagem.

Prática

Prática
O que é verdadeiro sobre a propriedade CSS border-image de acordo com o conteúdo da URL especificada?
O que é verdadeiro sobre a propriedade CSS border-image de acordo com o conteúdo da URL especificada?
Was this page helpful?