Explicamos como lograr con CSS3 un doble borde en elementos con esquinas redondeadas.


La propiedad outline dibuja alrededor de un elemento una línea a modo de marco que puede emplearse como un segundo borde a efectos de estilo. Sin embargo, esta línea no sigue el contorno de dicho elemento si a éste se le asigna un radio de borde para redondear las esquinas. En esta entrada muestro un par de soluciones a este pequeño problema.

Al convertir imágenes en HTML+CSS me he encontrado muchas veces con el realce de un elemento que consiste en un doble borde a dos colores como el que muestro en la imagen siguiente:

Un elemento con doble borde

Simplemente con asignar las propiedades border y outline se logra este efecto… a menos que el elemento tenga las esquinas redondeadas. En esas circunstancias outline sigue dibujando la caja rectangular del elemento, y no aplica el radio asignado al borde del mismo, dando lugar a esto:

El borde está redondeado, pero el resultado de outline sigue siendo un recuadro con esquinas de 90º

Si se revisa la especificación de outline para ver si este comportamiento es conforme o no a la Recomendación, el texto indica que la línea dibujada no tiene porqué ser rectangular, pero se refiere al caso de un elemento en línea cuyo contenido se reparta por varios renglones al que se aplique esta propiedad. Con respecto a los bordes redondeados, cuya posibilidad no se contemplaba al desarrollar la especificación de CSS2.1, no hay aclaración expresa.

En este punto tenemos tres opciones:

  • Añadir un elemento contenedor al que aplicar el borde exterior.
  • Lograr el efecto manipulando los bordes de los descendientes del elemento.
  • Recurrir a CSS3.

Como la primera opción es antisemántica y me parece perezosa y poco profesional, voy a explicar las otras dos, cuyos resultados pueden comprobarse en este ejemplo.

Jugando con los bordes de los descendientes

La idea es asignar a todos los descendientes del elemento bordes laterales y al primero y al último bordes superior e inferior respectivamente. Además hay que sustituir los márgenes de los descendientes por rellenos, para que sus bordes sean contiguos:


#bordes {
  border: 1px solid #C0C0C0;
}
		
#bordes p {
  border-left: 1px solid #FFF;
  border-right: 1px solid #FFF;
  margin: 0;
  padding: 0 16px 1em;
}	
	
#bordes h2 {
  border: 1px solid #FFF;
  margin-bottom: 0;
}
		
#bordes h2+p {
  padding-top: 1em;
}
		
#bordes p:last-child {
  border-bottom: 1px solid #FFF;
  -webkit-border-radius: 0 0 10px 10px;
  -moz-border-radius: 0 0 10px 10px;
  border-radius: 0 0 10px 10px;
}
 

Como se puede comprobar, logramos el efecto del doble borde, pero recargamos nuestra hoja de estilos.

Con CSS3: box-shadow

box-shadow es una propiedad de CSS3 que, como su nombre indica, nos permite definir la sombra que proyecta un elemento. Su sintaxis es:

  1. La palabra clave inset (opcional). Su presencia indica que la sombra debe extenderse por el interior del elemento; su ausencia hace que la sombra se extienda fuera.
  2. Cuatro distancias, las dos primeras obligatorias y las dos siguientes opcionales; indican, respectivamente, el desplazamiento horizontal de la sombra desde el punto (0,0) del elemento, el desplazamiento vertical, el radio de difuminación —para un efecto de filtro gausiano— y el ancho de la sombra.
  3. El color de la sombra (opcional).

Teniendo en cuenta esto, defino mi sombra de esta manera…


box-shadow: inset 0 0 0 1px #FFF;
 

…para que simule un borde interior —inset—, que se extienda sin desplazamiento alguno para que sea visible en todo el contorno del elemento —los primeros dos ceros—, que no presente ninguna difuminación —el tercer cero—, cuyo ancho sea de 1 píxel como el borde exterior —1px— y que sea de color blanco —#FFF—. Como en el caso de outline, el ancho de la sombra no se toma en cuenta a efectos de calcular márgenes ni rellenos. Y funciona, al menos para Explorer 9, Firefox 3.5+, Chrome 4+, Safari 3.1+ y Opera 10.5+.

Esta solución me parece más elegante y eficiente, y en ausencia de soporte su impacto es, a mi juicio, mínimo.

Un 93,2% de españoles reconoce tener problemas con su WiFi

Un 93,2% de españoles reconoce tener problemas con su WiFi

– La mayoría de los usuarios de Internet de nuestro país ha sufrido alguna vez problemas relacionados con el WiFi, según un estudio realizado por devolo en julio de 2021 que refleja el estado y la percepción de los españoles respecto a su conexión a Internet en el hogar. El objetivo de dicho estud

 ScrollTo en menos de 2Kb

ScrollTo en menos de 2Kb

Siguiendo con nuestra iniciativa de replicar efectos de animación populares de JavaScript en menos de 2Kb, creamos un ScrollTo que no depende de ninguna librería. El efecto Habrá visto en muchos sitios web —sobre todo en los que consisten en una única página— un efecto que consiste en que al ha

Responsive images sin JavaScript ni PHP

Responsive images sin JavaScript ni PHP

A día de hoy, responsive design arroja 77 millones de resultados aproximadamente de Google, pero a pesar de las virtudes y la relativa facilidad con la que crear un diseño adaptativo, hay un bestia negra que plantea un problema: las imágenes. Pensando en ello hemos hecho un pequeño experimento. El problema reside en

Destacar y atenuar elementos simultáneamente con CSS3

Destacar y atenuar elementos simultáneamente con CSS3

En algún blog nos hemos encontrado con un efecto my sutil, pero que nos ha parecido muy elegante: ver una lista de elementos como comentarios, tweets o entradas relacionadas, que al pasar el ratón por encima reaccionan oscureciendo el ítem que recibe el :hover, y atenuando los demás. En muchos casos se trata de un efecto

MapBox: una alternativa al mapa de Google

MapBox: una alternativa al mapa de Google

Llevábamos unas semana buscando un rato libre para probar MapBox, y por fin lo hemos encontrado: El servicio nos permite generar un mapa con la misma funcionalidad que nos ofrece Google Maps, pero con la interesante adición de poder alterar aspectos como la paleta de colores, iconos y demás, de manera que se pueda ajustar m&

Clientes

Nos valoran 9,3 sobre 10 La satisfacción de nuestros clientes es nuestro objetivo, y su evaluación es lo más provechoso que nos aportan. Por ello, cuando terminamos un proyecto les pedimos que puntúen una serie de aspectos de nuestro trabajo que pueden servir de referencia para nuestros futuros clientes. Como con

Outline y los bordes redondeados

La propiedad outline dibuja alrededor de un elemento una línea a modo de marco que puede emplearse como un segundo borde a efectos de estilo. Sin embargo, esta línea no sigue el contorno de dicho elemento si a éste se le asigna un radio de borde para redondear las esquinas. En esta entrada muestro un par de soluciones a este pe

Carrusel de imágenes con efecto de fundido (y en menos de 2Kb)

No hace tanto, explicábamos cómo habíamos vuelto flexible un plugin de jQuery que consiste en un carrusel de imágenes. En esta entrada mostramos una versión que hemos programado desde cero, con un efecto diferente y que no depende de ninguna librería. El carrusel de imágenes no sólo es un e

Efectos javascript

Un acordeón fallido con CSS3 Creamos una interfaz de acordeón con un híbrido de transiciones de CSS3 y JavaScript. Carrusel con desplazamiento horizontal, en menos de 2… en lo menos que hemos podido Programamos un carrusel de contenidos con desplazamiento horizontal, flexible y casi en menos de 2Kb. ScrollTo,

Menús desplegables animados con CSS3

Los menús desplegables son una interfaz de navegación muy común. Hasta ahora con CSS podíamos hacer que los vínculos de las subsecciones aparecieran sin necesidad de JavaScript, pero si queríamos hacer que el efecto de dicha aparición fuera progresivo, no nos quedaba más opción que prog

Contrato diseño web

Contrato de diseño y desarrollo de sitio web INTERVIENEN   De una parte, D. [el nombre de nuestro representante], mayor de edad ycon N.I.F. 53022319-M, en calidad de [cargo en nuestra empresa] de DigitalIcon, Servicios Informáticos, S.L. (en adelante DIGITAL ICON), con C.I.F. B-84622927 y con domicilio social en Plaza Mayor