¿Es posible, usando solo CSS, hacer que background
un elemento sea semitransparente pero que el contenido (texto e imágenes) del elemento sea opaco?
Me gustaría lograr esto sin tener el texto y el fondo como dos elementos separados.
Al intentarlo:
p {
position: absolute;
background-color: green;
filter: alpha(opacity=60);
opacity: 0.6;
}
span {
color: white;
filter: alpha(opacity=100);
opacity: 1;
}
<p>
<span>Hello world</span>
</p>
Parece que los elementos secundarios están sujetos a la opacidad de sus padres, por lo que opacity:1
es relativo al opacity:0.6
del padre.
p
opacidad de 'fuera.6
y laspan
opacidad de' fuera.5
entonces, la verdadera opacidad del texto en el lapso sería0.3
.opacity:.5
para el elemento primario yopacity:2
para el elemento secundario?opacity:2;
es CSS no válido . El valor de laopacity
propiedad debe estar dentro del rango inclusivo [0,1].Respuestas:
Use una imagen PNG semitransparente o use CSS 3:
Aquí hay un artículo de css3.info, Opacity , RGBA y compromise (2007-06-03).
fuente
background-color: rgba(#000, .5);
En Firefox 3 y Safari 3, puede usar RGBA como mencionó Georg Schölly .
Un truco poco conocido es que también puedes usarlo en Internet Explorer usando el filtro de degradado.
El primer número hexadecimal define el valor alfa del color.
Solución completa para todos los navegadores:
Esto es desde la transparencia de fondo CSS sin afectar los elementos secundarios, a través de RGBa y filtros .
Pruebas de capturas de pantalla de resultados:
Esto es cuando se usa el siguiente código:
fuente
Esta es la mejor solución que se me ocurrió, NO utilizando CSS 3. Y, por lo que puedo ver, funciona muy bien en Firefox, Chrome e Internet Explorer.
Coloque un contenedor
div
y dos niñosdiv
en el mismo nivel, uno para el contenido y otro para el fondo. Y usando CSS, ajuste el tamaño del fondo automáticamente para que se ajuste al contenido y coloque el fondo realmente en la parte posterior usando el índice z.fuente
:after
y evitar el marcado adicional?Para un color de fondo semitransparente simple, las soluciones anteriores (imágenes CSS3 o bg) son las mejores opciones. Sin embargo, si desea hacer algo más elegante (por ejemplo, animación, múltiples fondos, etc.), o si no desea confiar en CSS3, puede probar la "técnica de panel":
La técnica funciona mediante el uso de dos "capas" dentro del elemento del panel externo:
El
position: relative
en el panel es importante; le dice a la capa que se ajuste al tamaño del panel. (Si necesita que la<p>
etiqueta sea absoluta, cambie el panel de a<p>
a a<span>
y envuelva todo eso en una<p>
etiqueta de posición absoluta ).La principal ventaja de esta técnica sobre las similares enumeradas anteriormente es que el panel no tiene que ser de un tamaño específico; como se codificó anteriormente, se ajustará a todo el ancho (diseño normal de elementos de bloque) y solo tan alto como el contenido. El elemento del panel externo se puede dimensionar de la forma que desee, siempre que sea rectangular (es decir, el bloque en línea funcionará; en línea no funcionará).
Además, te da mucha libertad para el fondo; eres libre de poner realmente cualquier cosa en el elemento posterior y que no afecte el flujo de contenido (si quieres múltiples subcapas de tamaño completo, solo asegúrate de que también tengan posición: absoluta, ancho / alto: 100%, y arriba / abajo / izquierda / derecha: auto).
Una variación para permitir el ajuste de inserción de fondo (a través de la parte superior / inferior / izquierda / derecha) y / o fijación de fondo (mediante la eliminación de uno de los pares izquierdo / derecho o superior / inferior) es utilizar el siguiente CSS:
Como está escrito, esto funciona en Firefox, Safari, Chrome, IE8 + y Opera, aunque IE7 e IE6 requieren CSS y expresiones adicionales, IIRC, y la última vez que lo verifiqué, la segunda variación de CSS no funciona en Opera.
Cosas a tener en cuenta:
<div>
s en lugar de<span>
s para simplificar su CSS.Una demostración más completa, que muestra la flexibilidad de esta técnica al usarla en conjunto con
display: inline-block
, y con ambosauto
/width
s específicosmin-height
:Y aquí hay una demostración en vivo de la técnica que se usa ampliamente:
fuente
width:
yheight:
propiedades compartir una línea porque son el mismo tipo de construcción y mejor entendida como una forma de 2 dimensiones, no Un par de restricciones unidimensionales. Además, algunas de las líneas tienen una buena cantidad de contenido porque es contenido repetido que no es tan importante para mostrar.Es mejor usar un semitransparente
.png
.Simplemente abra Photoshop , cree una
2x2
imagen de píxeles (¡la selección1x1
puede causar un error de Internet Explorer! ), Complétela con un color verde y configure la opacidad en la "pestaña Capas" al 60%. Luego guárdelo y conviértalo en una imagen de fondo:Funciona bien, por supuesto, excepto en el encantador Internet Explorer 6 . Hay mejores soluciones disponibles, pero aquí hay un truco rápido:
fuente
Hay un truco para minimizar el marcado: use un pseudo elemento como fondo y puede configurar la opacidad sin afectar el elemento principal y sus elementos secundarios:
MANIFESTACIÓN
Salida:
Código relevante:
El soporte del navegador es Internet Explorer 8 y posterior.
fuente
El método más sencillo sería utilizar una imagen PNG de fondo semitransparente .
Puede usar JavaScript para que funcione en Internet Explorer 6 si es necesario.
Utilizo el método descrito en PNG transparentes en Internet Explorer 6 .
Aparte de eso, podría simularlo utilizando dos elementos hermanos uno al lado del otro : haga uno semitransparente y luego coloque absolutamente el otro sobre la parte superior .
fuente
Este método le permite tener una imagen en el fondo y no solo un color sólido, y puede usarse para tener transparencia en otros atributos como los bordes. No se requieren imágenes PNG transparentes.
Use
:before
(o:after
) en CSS y dele el valor de opacidad para dejar el elemento en su opacidad original. Por lo tanto, puede usar: before para hacer un elemento falso y darle el fondo transparente (o bordes) que desee y moverlo detrás del contenido con el que desea mantener opacoz-index
.Un ejemplo ( violín ) (tenga en cuenta que la
DIV
clase withdad
es solo para proporcionar un poco de contexto y contraste con los colores, este elemento adicional en realidad no es necesario, y el rectángulo rojo se mueve un poco hacia abajo y hacia la derecha para dejar visible el fondo detrás elfancyBg
elemento):con este CSS:
En este caso
.fancyBg:before
tiene las propiedades CSS que desea tener con transparencia (fondo rojo en este ejemplo, pero puede ser una imagen o bordes). Se posiciona como absoluto para moverlo hacia atrás.fancyBg
(use valores de cero o lo que sea más apropiado para sus necesidades).fuente
El problema es que el texto realmente tiene opacidad total en su ejemplo. Tiene una opacidad total dentro de la
p
etiqueta, pero lap
etiqueta es solo semitransparente.Puede agregar una imagen de fondo PNG semitransparente en lugar de realizarla en CSS, o separar el texto y dividirlo en dos elementos y mover el texto sobre el cuadro (por ejemplo, margen negativo).
De lo contrario, no será posible.
Al igual que Chris mencionó: si usa un archivo PNG con transparencia, debe usar una solución de JavaScript para que funcione en el molesto Internet Explorer ...
fuente
Casi todas estas respuestas asumen que el diseñador quiere un fondo de color sólido. Si el diseñador realmente quiere una foto como fondo, la única solución real en este momento es JavaScript como el complemento jQuery Transify mencionado en otra parte .
¡Lo que debemos hacer es unirnos al debate del grupo de trabajo CSS y hacer que nos den un atributo de opacidad de fondo! Debería funcionar de la mano con la función de fondos múltiples.
fuente
Así es como hago esto (puede que no sea óptimo, pero funciona):
Cree el
div
que desea que sea semitransparente. Dale una clase / id. Déjalo vacío y ciérralo. Déle una altura y un ancho establecidos (por ejemplo, 300 píxeles por 300 píxeles). Dale una opacidad de 0.5 o lo que quieras, y un color de fondo.Luego, directamente debajo de ese div, cree otro div con una clase / id diferente. Crea un párrafo dentro de él, donde colocarás tu texto. Indique la
div
posición: relativa y superior:-295px
(eso es 295 píxeles negativos ). Dele un índice z de 2 para una buena medida, y asegúrese de que su opacidad sea 1. Diseñe su párrafo como desee, pero asegúrese de que las dimensiones sean menores que las del primerodiv
para que no se desborde.Eso es. Aquí está el código:
Esto funciona en Safari 2.x, pero no sé acerca de Internet Explorer.
fuente
:before
o:after
Aquí hay un complemento jQuery que manejará todo por usted, Transify ( Transify - un complemento jQuery para aplicar fácilmente la transparencia / opacidad al fondo de un elemento ).
Me encontraba con este problema de vez en cuando, así que decidí escribir algo que hiciera la vida mucho más fácil. El script tiene menos de 2 KB y solo requiere una línea de código para que funcione, y también manejará la animación de la opacidad del fondo si lo desea.
fuente
Hace un tiempo, escribí sobre esto en Cross Browser Background Transparency With CSS .
Extrañamente, Internet Explorer 6 le permitirá hacer el fondo transparente y mantener el texto en la parte superior completamente opaco. Para los otros navegadores, sugiero usar un archivo PNG transparente.
fuente
Opacidad de fondo, pero no el texto tiene algunas ideas. Utilice una imagen semitransparente o superponga un elemento adicional.
fuente
Si eres un chico de Photoshop , también puedes usar:
O:
fuente
Para hacer que el fondo de un elemento sea semitransparente, pero que el contenido (texto e imágenes) del elemento sea opaco, debe escribir el código CSS para esa imagen, y debe agregar un atributo llamado
opacity
con un valor mínimo.Por ejemplo,
// Cuanto menor sea el valor, más transparente será, o menos será la transparencia.
fuente
CSS 3 tiene una solución fácil a su problema. Utilizar:
Aquí,
rgba
significa valor rojo, verde, azul y alfa. El valor verde se obtiene debido a 255 y la mitad de la transparencia se obtiene por un valor alfa de 0.5.fuente
Si usa Less , puede usarlo
fade(color, 30%)
.fuente
color de fondo: rgba (255, 0, 0, 0.5); como se mencionó anteriormente es la mejor respuesta simplemente. Decir que usar CSS 3, incluso en 2013, no es simple porque el nivel de soporte de varios navegadores cambia con cada iteración.
Si bien
background-color
es compatible con todos los principales navegadores (no es nuevo en CSS 3) [1], la transparencia alfa puede ser complicada, especialmente con Internet Explorer antes de la versión 9 y con el color del borde en Safari antes de la versión 5.1. [2]Usar algo como Compass o SASS realmente puede ayudar a la producción y la compatibilidad multiplataforma.
[1] W3Schools: propiedad de color de fondo CSS
[2] Blog de Norman: Lista de verificación de soporte del navegador CSS3 (octubre de 2012)
fuente
Puede resolver esto para Internet Explorer 8 (ab) utilizando la sintaxis de degradado. El formato de color es ARGB. Si está utilizando el preprocesador Sass , puede convertir colores utilizando la función incorporada "ie-hex-str ()".
fuente
Puede usar CSS 3 puro :
rgba(red, green, blue, alpha)
dóndealpha
está el nivel de transparencia que desea. No hay necesidad de JavaScript o jQuery.Aquí hay un ejemplo:
fuente
http://jsfiddle.net/x2ukko7u/ ?
fuente
Puede hacerlo
rgba color code
utilizando CSS como este ejemplo que se muestra a continuación.fuente
Hay una solución más fácil para colocar una superposición sobre una imagen en el mismo div. No es el uso correcto de esta herramienta. Pero funciona de maravilla para hacer esa superposición usando CSS.
Use una sombra insertada como esta:
Eso es todo :)
fuente
Puede usar RGBA
(red, green, blue, alpha)
en el CSS . Algo como esto:Entonces, simplemente hacer algo como esto funcionará en su caso:
fuente
Según mi punto de vista, la mejor manera de usar un color de fondo con opacidad es la siguiente. Si usamos esto, no perderemos opacidad para los otros elementos, como el color de prueba, el borde, etc.
Usa el color de fondo con opacidad
fuente
Normalmente uso esta clase para mi trabajo. Es bastante bueno.
fuente
Funcionó para mí cuando se utiliza el formato
#AARRGGBB
así que el trabajo para mí era#1C00ff00
. Pruébalo, porque lo he visto funcionar para algunos y no para otros. Lo estoy usando en CSS.fuente
Puede usar el valor de opacidad agregado al valor hexadecimal:
En este ejemplo
aa
es la opacidad. Una opacidad de00
significa transparente yff
significa color sólido.La opacidad es opcional, por lo que puede usar el valor hexadecimal como siempre:
También puede usar el método antiguo con
rgba()
:Y la
background
taquigrafía si desea asegurarse de que el fondo no tenga otros estilos, como imágenes o degradados:De la especificación de Mozilla ( https://developer.mozilla.org/en-US/docs/Web/CSS/background-color ):
fuente
Puede usar el color RGB con opacidad como un código de color en RGB (63, 245, 0) y agregar opacidad (como 63, 245, 0, 0.5) y también reemplazar RGB con RGBA.
A
debe usarse para opacidad.fuente