2010-10-28 30 views
12

Me gustaría crear un degradado lineal transparente a un div. ¿Hay alguna manera de hacer eso con jquery? ¿O debería usar alguna otra biblioteca como raphaeljs? Me gustaría conseguir un efecto similar a la siguiente:Creando un degradado lineal transparente a un div

alt text

+6

Probablemente la solución más robusta es poner un png transparente con el gradiente bajo la div. Por supuesto, entonces el gradiente se establece verticalmente. –

Respuesta

19

Por qué no mantenga la luz y un navegador compatible.

div 
{ 
    backgroud-image: url('images/gradient.png'); 
    background-repeat: repeat-x; 
    background-position: top right; 
} 
+5

+1 - Supongo que debería haber respondido a mi comentario;) –

+2

¿Cómo crea esto un degradado lineal * transparente *? ¿Gradient.png no tiene que asumir de qué color se está desvaneciendo? –

+2

El archivo PNG puede desvanecerse con transparencia, por lo que el color de fondo se desvanecerá. –

13

Puede hacerlo con CSS3:

P. ej

div { 
    opacity: 0.5; 
    background: #999; /* for non-css3 browsers */ 

    filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#cccccc', endColorstr='#000000'); /* for IE */ 
    background: -webkit-gradient(linear, left top, left bottom, from(#ccc), to(#000)); /* for webkit browsers */ 
    background: -moz-linear-gradient(top, #ccc, #000); /* for firefox 3.6+ */ 
} 

http://www.webdesignerwall.com/tutorials/cross-browser-css-gradient/

http://gradients.glrzad.com/

http://www.colorzilla.com/gradient-editor/

http://css-tricks.com/css3-gradients/

+4

* "para navegadores no css3" *? La única propiedad de CSS3 utilizada aquí es 'opacity', y no hace ningún gradiente. Las otras 3 propiedades son específicas del vendedor. En mi humilde opinión, esta no es una buena solución: no es "a prueba de futuro", y no es el tipo de cosas que me gustaría ver en la web. –

3

El truco aquí es que el degradado de su ejemplo se asigna uniformemente al texto y al contenedor. Es fácil asignar un degradado transparente a la propiedad de fondo, como mucha gente ha mostrado, pero eso dejará el texto sin cambios.

Lamentablemente, no creo que haya ninguna manera directa de obtener el efecto degradado que desee sin comprometerse, dependiendo de sus necesidades, pueden ser soluciones que valen la pena. Entonces para ese fin, aquí hay dos ejemplos de cómo lograr el efecto que se muestra en su imagen de ejemplo, ambos usando el <canvas>.

1. Fingiendo

Demo on JSLint.

Esto es simple, que la posición de un elemento <canvas> por encima de su bloque de texto y dibujar en un gradiente desde totalmente transparente para el color del fondo debajo del bloque de texto . No es realmente transparente, por lo que en realidad no revela ninguna información a continuación, pero si estás tratando de desvanecer a un color sólido y predeterminado, entonces esto funciona bastante bien.

2. texto lienzo

Demo on JSLint

Este ejemplo es más complicado, pero una réplica completa del efecto de transparencia se muestra en el ejemplo. Esencialmente, abandona completamente el bloque de texto HTML y simplemente dibuja todo el shabang en el <canvas>.Sin embargo, tiene algunas desventajas:

  1. El lienzo no parece que les gusta ajuste de texto, por lo que tendría que especificar líneas individuales.

  2. El texto del lienzo aún puede tener implementaciones de navegador un poco turbias.

  3. Accesibilidad & SEO, aunque podría escribir fácilmente un plugin jQuery para transformar elementos DOM normales con texto en esta solución en tiempo de ejecución.

4

Lo creé usando jquery y 112 divs. Un div principal para las diez líneas de div de texto cada una más transparente, y un div de fondo con 100 divs cada uno más transparente.

http://jsfiddle.net/generalhenry/bDd5w/

+3

buena idea y realización +1 pero prácticamente un desastre xD –

+1

Ya había un número de soluciones más prácticas, en su mayoría solo tenía curiosidad personal si se podía hacer con jquery como herramienta principal. – generalhenry

0

Como bArmageddon señaló, la solución aceptada no resuelve el problema - sólo se desvanece el fondo. Una solución sencilla sería utilizar: antes o: después de añadir el gradiente sobre el texto:

div { 
    position: relative; 
} 
div:before { 
    content: ""; 
    position: absolute; 
    bottom: 0; 
    left: 0; 
    width: 100%; 
    height: 20px; 
    background: url("transparent_fade.png") repeat-x; 
} 
Cuestiones relacionadas