Un espacio para los entusiastas del web

Degradados de colores usando CSS

Publicado el 29 de Septiembre, 2009

Tradicionalmente cuando uno va a incluir un degradado (la transición de un color a otro) en un sitio, uno debe crear una imagen que represente dicha transición. Ahora esta es no es la única forma de lograrlo, también es posible obtener el mismo resultado usando solamente CSS. Claro, esto no funciona en todos los navegadores por ahora.

Hace algunos meses el equipo de Webkit publicó su propuesta para crear degradados CSS; semanas atrás el equipo de Mozilla también publicó la suya (que será incluida en la siguente versión de firefox). Ambas propuestas son muy similares como veremos en los siguientes ejemplos.

degradado lineal

Si queremos representar esta imagen como degradados usando CSS, con Webkit (528) la definición sería:

background: -webkit-gradient(linear, left top, left bottom, from(#00abeb), to(#fff), color-stop(0.5, #fff), color-stop(0.5, #66cc00));

Donde los parámetros corresponden a:

-webkit-gradient(tipo , punto inicio, punto final, color inicio, color final, color-stop(porcentaje, color), color-stop(porcentaje, color) ).

Con Firefox / Gecko (1.9.2) la definición solo varía al inicio, el resto de parámetros siguen en el mismo orden/significado:

background: -moz-linear-gradient(left top, left bottom, from(#00abeb), to(#fff), color-stop(0.5, #fff), color-stop(0.5, #66cc00));

degrade radíal

Veamos un ejemplo más complicado, la imagen anterior se puede representar en Webkit de esta forma:

background: -webkit-gradient(radial, 45 45, 10, 52 50, 30, from(#A7D30C), to(rgba(1,159,98,0)), color-stop(90%, #019F62)),
-webkit-gradient(radial, 105 105, 20, 112 120, 50, from(#ff5f98), to(rgba(255,1,136,0)), color-stop(75%, #ff0188)),
-webkit-gradient(radial, 95 15, 15, 102 20, 40, from(#00c9ff), to(rgba(0,201,255,0)), color-stop(80%, #00b5e2)),
-webkit-gradient(radial, 0 150, 50, 0 140, 90, from(#f4f201), to(rgba(228, 199,0,0)), color-stop(80%, #e4c700));
background: -moz-radial-gradient(45px 45px, 10px, 52px 50px, 30px, from(#A7D30C), to(rgba(1,159,98,0)), color-stop(90%, #019F62)) no-repeat,
-moz-radial-gradient(105px 105px, 20px, 112px 120px, 50px, from(#ff5f98), to(rgba(255,1,136,0)), color-stop(75%, #ff0188)) no-repeat,
-moz-radial-gradient(95px 15px, 15px, 102px 20px, 40px, from(#00c9ff), to(rgba(0,201,255,0)), color-stop(80%, #00b5e2)) no-repeat,
-moz-radial-gradient(0 150px, 50px, 0px 140px, 90px, from(#f4f201), to(rgba(228, 199,0,0)), color-stop(80%, #e4c700)) no-repeat;

Pueden ver el código funcionando de estos ejemplos acá. A partir de estos podemos observar algunas diferencias:

  • Para definir el tipo de degradado en Gecko se utiliza una propiedad diferente (-moz-linear-gradient) mientras que en Webkit se usa la misma propiedad (-webkit-gradient), pero se utiliza un parámetro adicional para indicar el tipo.
  • En Webkit se especifican las posiciones y radios sin unidad de medida, pero se interpretan como si fueran píxeles. En el caso de Gecko se necesita indicar la unidad de medida. Ambos interpretan también medidas en porcentajes o palabras claves.
  • En una misma definición de la propiedad background se pueden combinar tantos degradados como se necesite.
  • En el caso de Gecko para los degradados radiales debemos especificar el parámetro no-repeat después de la definición de cada degradado, en el caso de webkit no hace falta hacerlo. Si en Gecko no está presente el parámetro no-repeat, entonces el degradado se repetirá en forma radial respecto al centro de este.

Diferencias respecto al usar imágenes

  • Una de las primeras ventajas al definir degradados con CSS, es que eliminas las peticiones de las imágenes que hubiesen sido necesarias hacia el servidor web. Y de paso reduces el tiempo promedio para cargar del sitio
  • Cambiar el CSS de un sitio es mucho más sencillo que modificar las imágenes necesarias para el diseño. Incluso puedes definir el CSS dinámicamente si fuera necesario, usando imágenes esto sería más complicado.
  • Obviamente si lo incluyes en un sitio, muy poca gente será capaz de verlos. La versión actual de Firefox aún no los interpreta, tendrías que bajar la versión alpha para empezar a jugar con estos. En el caso de Webkit, las últimas versiones de Google Chrome y Safari ya interpretan los degradados CSS.
  • Aún así del lado de los móviles (iPhone, Android, Pre, etc), las ultimas versiones de estos ya incluyen una versión de Webkit que los interpreta. Acá es donde yo les veo mayor opción a usarlos.

Un ejemplo más real

Imaginemos que tenemos un hipotético sencillo/ligero cliente para twitter que nos interesa que no desperdicie transferencia de datos en imágenes innecesarias (clave para usarlo sobre la red celular), pero a la vez queremos que no se vea tan feo como la interfaz móvil de twitter.

Nos interesa resaltar tweets de diferente color:

  • Verde para los tweets propios
  • Naranja para las respuestas/menciones
  • Azul para los mensajes directos/privados
  • Blanco para todo lo demás

Para ser compatibles con la mayor cantidad posible de navegadores, definiremos el color de fondo de cada tweet de esta forma:

#t li{
background:#FAFAFA;
background:-webkit-gradient(linear,left top,left bottom,from(#FAFAFA),to(#eaeaea));
background:-moz-linear-gradient(left top,left bottom,from(#FAFAFA),to(#eaeaea));
}

Primero usamos la definición más general, para que los navegadores que no interpretan los degradados CSS la usen, luego especificamos las definiciones para los navegadores que si los interpretan. Pueden ver el ejemplo de degradados CSS, si tienen la ultima versión de Google Chrome, Safari o la versión alpha de Firefox 3.6 deberían verlo así:

Degradados CSS
(clic en la imagen para ir al ejemplo)

Si este supuesto cliente lo usáramos en un iPhone, iPod Touch, Android, Palm Pre o cualquier otro que tenga un navegador con una versión reciente de Webkit, verían correctamente los degradados CSS. En la parte de Escritorio, la mayoría de gente aún usa Internet Explorer o Firefox, ninguno de estos interpreta los degradados CSS en sus versiones finales, no vale tanto la pena usarlos en algo general… por ahora.

¿Te gustó?

¡Sí, me gusta! Le ha gustado a 28 personas
Loading ... Loading ...

Javier ArocheJavier Aroche para Maestros del Web.
Agrega tu comentario | Enlace permanente al artículo

Síguenos en: @maestros | Fan page

Comentarios

  1. excelente articulo javier, y me sirve demasiado ya que en una hora tengo que dar una charla sobre CSS, si que me va servir para mostrarle a los compañeros, gracias

    Responder
  2. Otra buena opción, sin usar imágenes, es usar javascript: http://www.disegnocentell.com.ar/notas2.php?id=251
    Si bien los ejemplos presentados sólo contemplan gradientes lineales, conseguir gradientes radiales de la misma manera sería sencillo, con la ventaja adicional de que sí están soportados pon todos los navegadores ;)

    Responder
    1. Gracias por el link, eso está interesante.

  3. Sólo basta esperar a que los navegadores lo soporten, con Chrome se ve excelente, el problema es el mismo navegador que no debe ser nombrado seguramente tardará algunos meses-años para soportarlo… Ojalá Google saque otro plugin para Internet Explorer como el que sacaron para Wave pero ahora para que funcionen los CSS de manera correcta :P

    Saludos y excelente artículo @Javier

    Responder
    1. Bobert

      Imagínate, ya están en la versión 8 y sus resultados en el AcidTest3 son un desastre; sin mencionar que en IE no se puede ni soñar con CSS3… en ese navegador, es un término fuera de comprensión.

      Yo creo que esto va para largo :S

  4. A mi me parece genial que se pueda hacer esto y que los lenguajes avancen cada día más para hacernos la vida más fácil a los diseñadores (CSS 3 y HTML 5 por ej). Sin embargo, IE 6 y 7 son la prueba irrefutable de que generalizar el uso de códigos que sólo son válidos para un navegador en particular, puede ser DESASTROSO.

    Hay que tener mucho cuidado con esto.

    Responder
    1. si, entiendo el punto, aunque yo diría que la idea es adaptarse lo mejor posible a cada uno, aprovechar características de uno (como el caso de Webkit para móviles) pero sin caer en excluir al resto. Claro, todo dentro de los recursos/tiempo que tengamos disponible.

    2. Bobert

      Pues yo propongo que todos pongamos un div al principio de nuestras páginas advirtiendo a los usuarios de IE que su navegador es el peor que hay (dando motivos breves pero fuertes) :D

      Parecerá arrogante y nos costará muchas visitas; pero si no hacemos algo, nadie lo hará nunca y tendremos que esperar unos… ¿5 años? Si, 5 años… para que IE sea compatible con todo lo que hay hoy en día…

      Claro, el problema estará en que dentro de 5 años habrá muchísimas más cosas nuevas, e IE no será compatible con ellas, haha
      Ya en serio, si no protestamos Moco$oft nunca hará decente su navegador.

  5. Bobert

    ¿Hay esperanza de que esa opción sirva para texto algún día?

    Pd: Al paso que vamos, dentro de unos años muchas cosas que ahora puedes hacer con Photoshop, las harás con CSS :)

    Responder
  6. Saludos

    Pues yo prefiero seguir usando imágenes, con todos sus inconvenientes y esperar a que esto sea un estándar. No me gusta diseñar para cada navegador por separado y no me gusta que los navegadores saquen sus propias “reglas”, se parece mucho a lo que siempre ha hecho Internet Explorer y nos aleja de tener un estándar universal.

    Responder
    1. Eso es cierto, deberían de seguir un estandar a la hora de crear opciones nuevas, en este caso, tanto webkit como gecko pueden hacer los degradados, porqué no llaman a las funciones de la misma forma? Sería mucho más sencillo, y además, sería beneficioso para todos, incluidos los propios desarrolladores de navegadores, pues así sabrían al 100% que por ej., funciones webkit funcionen en gecko, y viceversa.

      Es mi opinión, está muy bien que innoven, pero deben innovar y complementarse en la misma dirección…si no esto será(corrijo, LO ES) un caos!

    2. Por supuesto, pero a esos niveles cada quién va rumbo a su agenda propia, algo que quedó muy claro con los codecs y la etiqueta html5

    3. Pues si, por desgracia es así…ojalá algún día las cosas se hagan pensando todos juntos…nos beneficiaríamos todos, y no sólo unos pocos…

  7. daniel

    Hace un tiempo vi un plugin de Jquery que lo hacia, funcionaba en todos los navegadores, lamentablemente ahora no recuerdo el nombre del plugin.

    Responder
    1. Talvez te refieres al que mencionó Andrés en los primeros comentarios…
      http://www.disegnocentell.com.ar/notas2.php?id=251

    2. Pero…ese no usa simplemente javascript y canvas??? Al menos es lo que pone en el link…he recorrido el codigo, y no veo nada de jquery…

  8. @Carlos
    En efecto, ese ejemplo no usa jQuery, sino canvas y filter. Quizá te referís a esto:
    http://davidwees.com/myblog/2007/08/gradient_jquery_plugin.html
    El problema de eso es el consumo de recursos, ya que se usa un enorme bucle para generar el efecto, entre otras deficiencias de optimización. Incluso con el mismo sistema es mucho mejor la alternativa de slayeroffice: http://slayeroffice.com/code/gradient/

    Responder
  9. saludos muy bueno, saben yo hace tiempo encontre esto por aca, espero les sirba http://devblab.net/como-hacer-un-degradado-con-css/

    Responder
  10. juan

    :( a buenas horas uno se entera de esto, ya que acabe de diseñar totalmente mi pagina utilizando basicamente solo imagenes, aunque bueno no es recomendable aun, ya que no creo nisiquiera la mitad de usuarios tenga el navegador mas nuevo que permita esto, como yo estoy usando chrome y no se ve nada en los ejemplos, pero bueno, hubiera estado bien las sombras, degradados, y todo lo demas directamente del navegador, pero si ya lo tengo con imagenes que mas da, un poco mas de kb, un poco menos de visitantes

    Responder
  11. Lum

    Lo último en CSS y HTML hace demasiado compleja la web, uno debe apostar por accesibilidad o por diseño, en la actualidad todos los navegadores normales (solo hay uno anormal) se actualizan rápidamente y siguen los estándares más o menos bastante bien, esto ya es la bomba, casi todas las web incorporan degradados (sobre todo lineales) (es lo que se lleva xd), así que esto significaría una mejora en cuanto a velocidad, procesamiento del ordenador y el servidor, reducción de tasa, y todo acabaría en MÁS VISITAS!!!
    Por lo tanto y después de leer algunos de los comentarios anteriores estoy apunto de prohibir mis sitios a Internet Explorer (crazy)
    saludos!! :D

    Responder
    1. @Lum, jeje no les prohíbas el acceso solo por usar IE, informales que hay mejores alternativas y bueno, no dediques mucho tiempo a solucionar problemas específicos de IE…. solo has que el sitio sea funcional y no se vea fatal :)

  12. Marce

    Yo hago igual que @Jroche, desarrollo los proyectos con estandarés nuevos y viejos y para IE solamente me preocupo que no se vea fatal =P

    Responder
  13. Las bondades de las CSS sin duda nos seguirán asombrando cada día, pero en definitiva tratar de implementar todas sus opciones en nuestros sites, significan mayor carga de trabajo por las diferencias en soporte de los navegadores que todos sabemos, ahora bien, si lo que tenemos en frente es el desarrollo por Ejem. De un portal de empleos que utilizara infinidad cuadros de registro, de presentación, etc. La alternativa de usar los degradados es simplemente perfecta.

    Responder
  14. sinozzuke

    Pues que queréis que os diga, mientras las implementaciones de css sean específicas por motor y no sean compartidas por todos, me parece a mí que se va a extender lo que yo te diga. Si tengo que usar mozilla-noseque-nosecuantos para un navegador y webkit-noseque-nosecuantos para otro, pos no veo yo ahí mucho estándard. al final estamos como con el explorer, un css para unos y un css para otros. No creéis?

    Responder
  15. seba

    hola soy de chile , estudio diseño multimedia , esta pagina me sirve super

    Responder

Deja tu Comentario

Maestros del Web se reserva el derecho de moderación de los comentarios. Evita utilizar palabras soeces, ataques directos, descalificativos, insultos, de lo contrario tu comentario será eliminado.



Acerca de

Maestros del Web nace cuando intentamos traducir Webmaster al Español. Nacimos orientados al diseño y desarrollo web. Hoy somos un espacio de apoyo para los entusiastas que participan en proyectos en la red.
Leer más de Maestros del Web