La abreviatura border
border dibuja una línea alrededor de un elemento, entre su padding y su margin. La abreviatura acepta tres partes en cualquier orden: un grosor, un estilo y un color.
| Parte | Propiedad larga | Valores | Por defecto |
|---|---|---|---|
| Grosor | border-width | 1px, 0.2em, thin, medium, thick | medium |
| Estilo | border-style | solid, dashed, dotted, double y más | none |
| Color | border-color | Cualquier color | currentColor (el color del texto) |
El estilo es la parte que no puedes omitir. Su valor por defecto es none, así que border: 2px #2563eb; no dibuja nada. Si omites el color, el borde toma el color del texto del elemento.
Estilos de borde
double necesita al menos 3px para mostrar dos líneas. groove, ridge, inset y outset sombrean el color para que parezca 3D y varían un poco entre navegadores. hidden se ve como none; solo se diferencian dentro de tablas con bordes colapsados, que se explican en la página de bordes de tablas HTML.
Un lado a la vez
Cada lado tiene su propia abreviatura (border-top, border-right, border-bottom, border-left), y cada parte tiene propiedades largas por lado como border-top-color. Las versiones lógicas, border-inline-start y border-block-end, siguen la dirección del texto:
border-color, border-width y border-style aceptan de uno a cuatro valores en el mismo orden de las agujas del reloj que padding: arriba, derecha, abajo, izquierda.
Esquinas redondeadas con border-radius
border-radius redondea las esquinas del borde y del fondo, así que funciona en elementos sin ningún borde.
| Valor | Resultado |
|---|---|
border-radius: 8px | Todas las esquinas redondeadas 8px |
border-radius: 50% | Un círculo en un elemento cuadrado, una elipse en un rectángulo |
border-radius: 999px | Una píldora: los lados cortos se vuelven semicírculos completos |
border-radius: 8px 0 | Arriba a la izquierda y abajo a la derecha 8px, las otras dos rectas |
border-top-left-radius: 12px | Una sola esquina |
border-radius: 50% / 25% | Esquinas elípticas: radio horizontal / radio vertical |
Un hijo con fondo puede sobresalir por las esquinas de un padre redondeado. overflow: hidden en el padre lo recorta según la curva.
Border vs outline
Un outline se parece a un borde, pero se dibuja por fuera y no ocupa espacio, así que agregarlo nunca mueve nada. Por eso los navegadores usan outlines para los anillos de foco.
| Border | Outline | |
|---|---|---|
| Ocupa espacio | Sí, forma parte del tamaño de la caja | No |
| Por lado | Sí (border-top, ...) | No, todo alrededor |
Sigue border-radius | Sí | Sí, en los navegadores actuales |
| Separación de la caja | No | Sí, outline-offset |
| Uso típico | Diseño | Indicadores de foco, depuración |
Errores comunes
- Sin estilo de borde.
border: 1px #111827;yborder-color: red;no dibujan nada. Incluyesolid(u otro estilo). - Un borde que hace saltar el layout en hover. Reserva el espacio con un borde transparente, o usa un outline o
box-shadow. - Olvidar el borde en el ancho. Un elemento con
width: 100%y borde se sale de su contenedor concontent-box. Usabox-sizing: border-box. border-radiuscon un hijo que sobresale por las esquinas. Agregaoverflow: hiddenal padre redondeado.- Quitar los outlines de foco con
outline: none. Los usuarios de teclado los necesitan; cambia el estilo del outline en lugar de eliminarlo.
Preguntas frecuentes
¿Cómo agrego un borde en CSS?
Usa la abreviatura con un grosor, un estilo y un color: border: 2px solid #2563eb;. El estilo es la parte más importante: sin él, border-style vale none y no se dibuja ningún borde.
¿Por qué no se ve mi borde en CSS?
Casi siempre porque no hay un estilo de borde. border: 2px #2563eb; o border-color: red; por sí solos no dibujan nada, porque el border-style por defecto es none. Agrega solid, dashed u otro estilo.
¿Cómo hago esquinas redondeadas en CSS?
Usa border-radius: border-radius: 8px; redondea las cuatro esquinas. border-radius: 50%; en un cuadrado hace un círculo, y un valor grande como 999px hace una forma de píldora. También redondea el fondo, aunque no haya borde.
¿Cómo pongo un borde en un solo lado?
Usa una propiedad de lado: border-bottom: 2px solid #e5e7eb;, o border-inline-start para el lado donde empieza el texto, que también funciona en idiomas de derecha a izquierda.
¿Qué diferencia hay entre border y outline?
Un borde es parte de la caja: ocupa espacio y cambia el tamaño del elemento. Un outline se dibuja fuera del borde sin ocupar espacio, no se puede definir por lado y es lo que usan los navegadores para los anillos de foco. Los dos siguen border-radius en los navegadores actuales.