Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

¿Cómo hacer transparente sólo el fondo de un elemento, no su contenido?

30 de abril de 2009

¿Es posible con CSS hacer transparente el fondo de un elemento (o semi-transparente), pero dejar su contenido (texto e imágenes) totalmente visibles?

Además quiero hacerlo sin tener que encerrar el texto e imágenes en nuevos elementos. Así que el código HTML sería algo como:

<p>
  <span>
    Hola Mundo
  </span>
  <img src="imagen.jpg">
</p>

Y el CSS que he probado es este:

p { background-color:green; filter:alpha(opacity=60); opacity:.6; }
span, img { color:white; filter:alpha(opacity=100); opacity:1; }

El problema es que el texto y la imagen también se ven semi-transparentes, así que no se qué hacer.


Estás leyendo una traducción autorizada de la pregunta Transparent background, but not the content (text & images) inside it, in CSS only? planteada por Stijn Sanders en StackOverflow.


Respuestas

#1

Para conseguirlo tendrás que utilizar CSS3 para aplicar un color semi-transparente:

p {
    background-color: rgba(255, 0, 0, 0.5);
}

Los tres primeros números son las componentes R, G y B del color. El cuarto número indica la opacidad y su valor puede variar entre 0.0 (totalmente transparente) y 1.0 (totalmente opaco).

Si utilizas una versión antigua de Internet Explorer que no soporta CSS3, puedes aplicar el filtro gradient de la siguiente manera:

p {
    filter: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr='#7F00FF00', EndColorStr='#7F00FF00');
}

El primer valor hexadecimal del filtro anterior es el color utilizado en el fondo del elemento.

Con todo esto, aquí tienes la solución completa que funciona en cualquier navegador:

p {
    /* Navegadores que no soportan colores semitransparentes */
    background: rgb(0, 0, 0) transparent;
    /* Color semi-transparente */
    background: rgba(0, 0, 0, 0.6);
    /* Versiones antiguas de Internet Explorer */
    filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);
    /* Internet Explorer 8 o superior */
    -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";
}

@librosweb

5 octubre 2014, 21:53