La versión corta
- CSS no puede poner un degradado en border-color, así que un borde con degradado en CSS siempre se dibuja con otra técnica.
- border-image con un degradado es el método más corto, pero ignora border-radius, así que solo sirve para esquinas rectas.
- Dos capas de fondo, una recortada al padding box y otra al border box, dan un borde degradado redondeado siempre que el interior sea de un color liso.
- La técnica de máscara recorta el centro de una capa de degradado, lo que da un borde degradado redondeado con el interior transparente.
- Un degradado cónico giratorio, controlado por una propiedad personalizada registrada con @property, es la forma habitual de animar un borde con degradado.
En esta página
Un borde con degradado en CSS es un contorno cuyo color se mezcla a lo largo de su longitud. El problema es que border-color solo admite colores, no imágenes, así que no hay una propiedad única para esto. En su lugar dibujas el degradado en otro sitio y muestras solo una banda fina de él. Hay cuatro formas fiables de hacerlo, y la correcta depende de dos preguntas: ¿tiene el elemento esquinas redondeadas? y ¿necesita el interior ser transparente?
| Método | Esquinas redondeadas | Interior transparente | Mejor para |
|---|---|---|---|
border-image | No | Sí | Tarjetas rectas, separadores, tablas |
| Dos fondos | Sí | No, necesita un relleno liso | La mayoría de tarjetas y botones |
| Máscara en un pseudoelemento | Sí | Sí | Tarjetas sobre imágenes o degradados |
| Pseudoelemento detrás | Sí | No | Resplandores y anillos animados |
Método 1: border-image
border-image acepta cualquier imagen, incluido un degradado. Fija un ancho y un estilo de borde, después el degradado y luego un slice de 1, que le dice al navegador que use la imagen entera como borde. Son dos líneas, funciona en todas partes y deja intacto el interior del elemento.
.panel {
border: 3px solid;
border-image: linear-gradient(135deg, #7c3aed, #22d3ee) 1;
}1 es el valor de slice; sin él, el borde solo se dibuja en las esquinas.Método 2: dos fondos con background-clip
Dale al elemento un borde transparente y apila después dos fondos. La capa superior es el relleno interior, recortado al padding-box, así que se detiene en el borde interior del borde. La capa inferior es el degradado, recortado al border-box, así que se extiende por debajo del borde. Donde se detiene el relleno se ve el degradado, y sigue a la perfección el border-radius.
.card {
border: 2px solid transparent;
border-radius: 16px;
background:
linear-gradient(#0f172a, #0f172a) padding-box,
linear-gradient(135deg, #7c3aed, #22d3ee) border-box;
}Este es el método que conviene usar por defecto. Su único límite es que el interior debe ser opaco, ya que un relleno transparente dejaría ver el degradado por toda la tarjeta. Para tarjetas sobre un color de página liso, eso no es ningún límite: usa el color de la página como relleno.
Método 3: la técnica de máscara para interiores transparentes
Cuando la tarjeta está sobre una foto u otro degradado, necesitas que el centro sea transparente. Pon el degradado en un pseudoelemento que cubra la tarjeta, dale un padding igual al ancho del borde y enmascáralo con dos capas: una que cubra solo el content box y otra que cubra todo. Excluir una de la otra deja visible solo el anillo del padding.
.glass-card {
position: relative;
border-radius: 16px;
}
.glass-card::before {
content: "";
position: absolute;
inset: 0;
padding: 2px; /* border width */
border-radius: inherit;
background: linear-gradient(135deg, #7c3aed, #22d3ee);
-webkit-mask:
linear-gradient(#000 0 0) content-box,
linear-gradient(#000 0 0);
-webkit-mask-composite: xor;
mask:
linear-gradient(#000 0 0) content-box exclude,
linear-gradient(#000 0 0);
pointer-events: none;
}mask cubre todo lo actual.pointer-events: none evita que el pseudoelemento se trague los clics destinados al contenido de la tarjeta. La referencia de mask-composite de MDN explica las palabras clave de composición. Este es el método que hay detrás de la mayoría de las tarjetas de glassmorphism con bordes luminosos.
Método 4: un pseudoelemento detrás, para resplandores y animación
Coloca un pseudoelemento con degradado algo mayor que la tarjeta, detrás de su contenido, y cubre el centro con un segundo pseudoelemento que lleve el relleno liso de la tarjeta. El borde visible es el degradado. Como el degradado vive en su propia capa, puedes desenfocar una copia para un resplandor o girarla.
@property --angle {
syntax: "<angle>";
inherits: false;
initial-value: 0deg;
}
.ring {
position: relative;
isolation: isolate;
border-radius: 16px;
}
.ring::before {
content: "";
position: absolute;
inset: -2px;
z-index: -1;
border-radius: 18px;
background: conic-gradient(from var(--angle), #7c3aed, #22d3ee, #f472b6, #7c3aed);
animation: spin 6s linear infinite;
}
/* the card's fill, painted over the middle of the ring */
.ring::after {
content: "";
position: absolute;
inset: 0;
z-index: -1;
border-radius: inherit;
background: #0f172a;
}
@keyframes spin {
to { --angle: 360deg; }
}
@media (prefers-reduced-motion: reduce) {
.ring::before { animation: none; }
}--angle registrado permite al navegador interpolar con suavidad el ángulo inicial del cónico, y ::after pinta el relleno sobre el centro.conic-gradient(from 0deg, #7c3aed, #22d3ee, #f472b6, #7c3aed)El radio exterior debe ser igual al radio interior más el ancho del borde, y por eso el pseudoelemento usa 18px alrededor de una tarjeta de 16px. Para más formas de dar movimiento a los degradados, mira los degradados animados en CSS.
Consejos de diseño para bordes con degradado
Evita
- Bordes con degradado en todas las tarjetas de una cuadrícula
- Degradados poco saturados en una línea de 1px, que se leen como gris
- Un borde con degradado y un relleno con degradado en el mismo elemento
- Anillos que giran rápido sobre contenido que la gente necesita leer
Haz
- Reserva el borde con degradado para un elemento destacado, como un plan recomendado
- Usa 2px o más y puntos saturados
- Un relleno sereno con un borde vivo, o al revés
- Rotación lenta, en pausa con movimiento reducido
Los bordes con degradado funcionan mejor como énfasis. La misma lógica se aplica a los botones, que trata botones con degradado en CSS.
Preguntas frecuentes
¿Cómo hago un borde con degradado en CSS?
La forma más rápida es border: 3px solid; border-image: linear-gradient(135deg, #7c3aed, #22d3ee) 1;. Para esquinas redondeadas, usa dos fondos recortados a padding-box y border-box.
¿Por qué no funciona border-radius con border-image?
Según la especificación, un borde dibujado con border-image no se redondea con border-radius. Usa el método de background-clip o el de máscara para bordes degradados redondeados.
¿Cómo hago un borde con degradado con fondo transparente?
Usa la técnica de máscara: un pseudoelemento con el degradado, padding igual al ancho del borde y una máscara que excluya su content box.
¿Cómo animo un borde con degradado?
Registra un ángulo con @property, úsalo como ángulo from de un degradado cónico en un pseudoelemento y anima esa propiedad de 0deg a 360deg.
¿Qué método de borde con degradado debo usar?
Usa dos fondos para la mayoría de las tarjetas y botones redondeados, border-image para bordes rectos y la técnica de máscara solo cuando el interior deba seguir transparente.
Escrito por Gradiently
El equipo detrás de Gradiently, una herramienta de diseño creada en torno a los Marks: degradados vivos que hacen que todo lo que diseñas parezca tuyo.
Ver nuestro perfil


