Rafael Camargo

Elementos com múltiplas bordas usando apenas CSS

Ainda que o CSS seja extremamente poderoso, alguns estilos podem acabar encontrando limitações na maneira usual de usar a linguagem, exigindo do desenvolvedor um certo grau de criatividade na hora de manipular suas folhas de estilo. Definir múltiplas bordas para um elemento é um exemplo perfeito desses casos.

Como seria bom se pudéssemos declarar múltiplas bordas usando apenas o atributo border. Quem sabe daqui uns anos, poderemos escrever algo como:

div {
  border:
    3px solid green,
    3px solid yellow,
    3px solid blue;
}

Enquanto essa possibilidade ainda não existe, podemos utilizar uma das estratégias a seguir.

Outline

Se você não precisa mais do que duas bordas, o atributo outline será certamente a solução mais prática e rápida de implementar.

.example-1 {
  border: 5px solid #f48554;
  outline: 5px solid #fdbf59;
}

Pseudo Seletores

Se você não precisa mais do que três bordas, você tem à disposição os pseudo elementos :before e :after. Eles poderão ser responsáveis pela segunda e terceira bordas, ou pela terceira e quarta, caso você combine a solução dos pseudo elementos ao atributo outline.

.example-2 {
  position: relative;
  border: 5px solid #fdbf59;
}
.example-2:before {
  content: ' ';
  position: absolute;
  top: 0px;
  left: 0px;
  right: 0px;
  bottom: 0px;
  border: 5px solid #f48554;
}
.example-2:after {
  content: ' ';
  position: absolute;
  top: 5px;
  left: 5px;
  right: 5px;
  bottom: 5px;
  border: 5px solid #dc424e;
}

Box Shadow

Mas se você precisa de mais de três bordas, o jeito mais rápido e fácil é recorrer ao atributo box-shadow. Ele permite que você defina diversas sombras e, embora o resultado final nada tenha a ver com sombras, você pode ajustar os valores de cada sombra para que imitem bordas.

.example-3 {
  margin: 25px;
  box-shadow: 
    0 0 0 5px #2f030c,
    0 0 0 10px #5a071a,
    0 0 0 15px #dc424e,
    0 0 0 20px #f48554,
    0 0 0 25px #fdbf59;
}