CSS3: soluciones para Internet Explorer

La utilización de CSS3 es probablemente la última tendencia en diseño web, permitiendo a los desarrolladores la oportunidad de implementar soluciones en sus diseños con selectores CSS más sencillos y evitando tener que recurrir a marcas no semánticas, utilización de imágenes adicionales y complejos códigos JavaScript.

Desafortunadamente, incluso en sus versiones mas actuales, Internet Explorer continua sin dar soporte a la release 3 de la especificación de hojas de estilo en cascada. Windows Internet Explorer 8 es completamente compatible con la especificación de CSS 2.1 y soporta solamente algunas funcionalidades de CSS 3 (ver nota del msn sobre la compatibilidad de CSS e Internet Explorer).

En el artículo publicado en Smashing Magazine titulado “CSS3 Solutions for Internet Explorer”, nos dan pistas y soluciones sobre como utilizar una serrie de opciones que los desarrolladores pueden considerar para aquellas circunstancias en que se requiere compatibilidad con una característica de CSS3 para todas las versiones de Internet Explorer (IE6, IE7 e IE8).

En nuestra opinión se trata únicamente de recursos que pueden utilizarse exclusivamente en caso de necesidad, ya que, como se indica para cada uno de ellos, todos originan algún tipo de problema y, en su mayoría, provocan que nuestro código CSS no sea válido según los estándares de W3C.

En este post resumimos estas posibilidades para intentar hacer nuestros diseños basadaos en CSS3 más compatibles con el navegador de Microsoft.

Opacidad / Transparencia

IE no ofrece apoyo a la propiedad opacity, pero ofrece una solución similar con la propiedad filter.

Sintaxis:

1#myElement {
2 opacity: .4; /* otros navegadores

*/

3 filter:

progid:DXImageTransform.Microsoft.Alpha(opacity=

40); /* para IE6, IE7 e IE8 */

4 -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(opacity=40)"; /* para IE8 solamente*/
5}

La segunda línea permite la aplicación de la propiedad en las tres versiones de IE, pero si necesitamos fijar la opacidad solamente para IE8 y no para IE6 / 7 podemos aplicar la tercera.

Demo:

Elemento con background color (#0000FF), y 60% de transparencia

Mismo elemento son ajustes de opacidad

Problemas:

  • Filter es una propiedad que solo aplica a navegadores de Microsoft, así que el CSS no se validará
  • Como en el caso de la propiedad opacity , las propiedades del filtro serán heredadas

Esquinas redondeadas (border-radius)

El border-radius es una propiedad de CSS3 que permite redondear las esquinas de determinados elementos, evitando la necesidad del uso de código JavaScript o de elementos extra.

Para solventar el hecho de que no es una propiedad soportada por IE, Remiz Rahnas de HTML REMIX ha creado un archivo HTC llamado CSS Curved Corner que se puede descargar de Google Code y que permite, sin ningún ajuste adicional, configurar el radio de redondeo.

Sintaxis:

1.box-radius {
2 border-radius: 15px;
3 behavior: url(border-radius.htc);
4}

Demo:

En este enlace.

Problemas:

  • El archivo de HTC es de 142 líneas, lo que incrementa el peso de nuestra página y su tiempo de descarga
  • La propiedad behavior provoca que el código CSS no sea válido
  • El servidos debe ser capaz de cargar ficheros HTC
  • En determinadas circunstancias, IE8 muestra algunos problemas cuando se ajustan valores negativos para z-index

Box shadow

La propiedad box-shadow es otra interesante característica de CSS3 que puede ser utilizada incluso en cajas con esquinas redondeadas mediante la propiedad border-radius. Para reproducir su efecto en IE se pueden utilizar de nuevo los filtros.

También tenemos que tener en cuenta que esta propiedad esta siendo eliminada del estándar CSS3, por lo que debemos plantearnos si es necesario y adecuado su uso.

Sintaxis:

1.box-shadow {
2 -moz-box-shadow: 2px

2px 3px #969696; /* para Firefox 3.5+ */

3 -webkit-box-shadow: 2px

2px 3px #969696; /* para Safari y Chrome */

4 filter:

progid:DXImageTransform.Microsoft.Shadow(color=

'#969696', Direction=145, Strength=3);

5}

Demo:

como queda en IE

En el código de ejemplo también figura como aplicar otra solución mediante WebKit (Safari y Chrome) y propiedades de Mozilla (Firefox).

Problemas:

  • Los ajustes para el filtro de IE no coinciden exactamente con la propiedad de CSS3, así que para hacer que parezca lo mismo, requiere “pelearse” con los valores
  • Como ya hemos comentado antes, la propiedad Filter no valida, pero tampoco lo hace el WebKit y las propiedades de Mozilla , así que esto es una desventaja en todos los navegadores

Text shadow

La inclusión de sombras a los elementos de texto se ha practicado en el diseño de páginas web durante años. Esto se hace normalmente con imágenes y en ocasiones mediante texto duplicado al que se le aplican características específicas de posicionamiento. CSS3 permite a los desarrolladores agregar fácilmente sombras altexto mediante la propiedad text-shadow.

Para generar este efecto en Internet Explorer podemos recurrir a un plugin de jQuery desarrollado por Kilian Valkhof.

Uso del plugin:

En primer lugar debemos ajustar en nuestro fichero CSS la propiedad text-shadow , especificando los valores de color y posición:

1.text-shadow {
2 text-shadow: #aaa 1px 1px 1px;
3}

Después incluimos la librería de jQuery y el plugin en nuestro documento HTML:

1// incluir la librería jQuery en la página
2// incluir el enlace al plugin en la página

3
4$(document).ready(function(){
5 $(".text-shadow").textShadow();
6});

El plugin también permite el uso de selectores CSS que sobreseen los ajustados en nuestro código CSS. Para más detalles podéis leer la documentación original del plugin.

Demo:

Ver la demostración en este lugar.

Problemas:

  • Para conseguir un efecto similar en todos los navegadores se deben realizar unos cuantos ajustes en los selectores CSS específicos de IE, lo que nos obliga a diferenciar bloques de código dedicados a ellos, dificultándonos el mantenimiento posterior del nuestras hojas de estilo
  • Requiere añadir la librería de jQuery si no la estamos utilizando para otras funcionalidades de nuestra página, lo que incrementa el peso de esta
  • A diferencia de lo que ocurre ci usamos CSS3, el plugin no es compatible con sombras múltiples
  • Si queremos que funcione en IE8, necesitamos dar valores con z-index a los distintos elementos


Colores de fondo transparentes (RGBA)

CSS3 ofrece otro método para poner en práctica la transparencia, haciendolo a través de un canal alfa que se especifica en un color de fondo.

Sintaxis:

Para los navegadores compatibles con CSS3, aquí está la sintaxis para establecer un canal alfa como fondo de un elemento:

1#rgba p {
2 background: rgba(98, 135, 167, .4);
3}

Con el anterior CSS, el color de fondo se establecerá en los valores RGB indicados, además se ha ajustado la opción “alpha” a “0,4″. Para imitar esto en Internet Explorer, puede utilizar una imagen PNG semitransparente de 1-pixel y establecerla como fondo ajustar la opción como de repetición en hortizontal y vertical :

1#rgba p {
2 background: transparent url(rgba-ie.png) repeat

0 0;

3}

Demo:

Esta demostración se muestra igual en IE7 e IE8 .

Este parrafo tiene un color de fondo con opacidad del 40% ajustado mediante RGBA (no funciona en IE)

Este parrafo tiene un fondo construido con la repetición de un pixel PNG).

Problemas:

  • Requiere la creación de un nuevo archivo PNG cada vez queremos cambiar el color o la transparencia
  • Agrega una solicitud HTTP extra haciendo para cada imagen PNG
  • IE6 no soporta la transparencia nativa PNG

Degradados (Gradients)

La facilidad para degradados personalizados como fondos de elementos, es otra posibilidad incluida en CSS3 y que nos permite ahorrar tiempo y código . Aunque Internet Explorer no es compatible con las capacidades de CSS3 para generar degradados es bastante fácil para poner en práctica algo similar utilizando la sintaxis propietaria de IE.

Sintaxis:

Para declarar un degradado podemos utilizar el siguiente código. Para los filtros de Internet Explorer, el GradientType se puede establecer en “1″ (horizontal) o “0″ (vertical).

1#gradient {
2 background-image:

-moz-linear-gradient(

top, #81a8cb, #4477a1); /* Firefox 3.6 */

3 background-image:

-webkit-gradient(linear,

left bottom,left top,color-stop(0, #4477a1),color-stop(1, #81a8cb)); /* Safari &

Chrome */

4 filter:

progid:DXImageTransform.Microsoft.gradient(GradientType=

0,startColorstr='#81a8cb',

endColorstr=

'#4477a1'); /* IE6 & IE7

*/

5 -ms-filter:

"progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#81a8cb',

endColorstr=’#4477a1′)”

; /* IE8 */

6}

Demo:

Este elemento es un degradado lineal generado para Internet Explorer.

Problemas:

  • El CSS no validará, aunque eso ocurre también si utilizamos el WebKit y las caracteristicas particulares de Mozilla
  • Se precisa código distinto para IE8, lo que aumenta las necesidades de mantenimiento de la página
  • Al contrario de WebKit y Mozilla, no parece soporta degradados radiales

Múltiples fondos

En la actualidad, IE y Opera son los navegadores que no son compatibles con esta característica. Pero es de destacar que IE desde la versión 5.5 ha permitido implementar varios fondos en el mismo elemento con un filtro.

Sintaxis:

CSS para utilizar fondos múltiples en Firefox, Safari, Chrome:

1#multi-bg {
2 background: url(images/bg-image-1.gif) center center no-repeat, url(images/bg-image-2.gif) top left repeat;
3}

Para aplicar dos fondos para el mismo elemento en Internet Explorer, tenemos que incluir esta sintaxis en un bloque específico para el navegador:

1#multi-bg {
2 background: transparent url(images/bg-image-1.gif) top left repeat;
3 filter:

progid:DXImageTransform.Microsoft.AlphaImageLoader (src=

'images/bg-image-2.gif',

sizingMethod=

'crop'); /* IE6-8 */

4 -ms-filter: "progid:DXImageTransform.Microsoft.AlphaImageLoader(src='images/bg-image-2.gif',

sizingMethod=’crop’)”

; /* solo IE8 */

5}

Demo:

Fondos multiples en Chrome, Firefox, and Safari:

Multiples fondos en Internet Explorer 6-8 (se mostrará un fondo único en los otros navegadores):

Problemas:

  • El CSS no será válido
  • La segunda imagen de fondo aplicada, utilizando la propiedad filter siempre estará en la parte superior izquierda, y no puede repetir, por lo que este método es extremadamente inflexible y, probablemente, sólo podrá utilizarse en un número limitado de circunstancias
  • Con el fin de obtener el elemento del centro (como en otros navegadores), debemos de crear una imagen con la cantidad exacta de espacio en blanco a su alrededor, para imitar el centrado

Rotación de elementos (transformaciones en CSS3)

CSS3 ha introducido una serie de capacidades de transformación y animación de elementos animación que se pueden “imitar”, aunque de forma limitada, para Internet Explorer.

Sintaxis:

Para rotar un elemento 180 grados, la sintaxis en CSS3 es:

1#rotate {
2 -webkit-transform: rotate(180deg);
3 -moz-transform: rotate(180deg);
4}

Para crear la misma rotación en Internet Explorer, volvemos a utilizar la propiedad filter. El valor de la rotación puede ser 1, 2, 3 o 4, que indican 90, 180, 270 0 360 grados, respectivamente:

1#rotate {
2 filter:

progid:DXImageTransform.Microsoft.BasicImage(rotation=

2);

3}

Demo:

El elemento siguiente deberá aparecer al revés en Internet Explorer, con una rotación de 180 grados establecidos a través de la propiedad filter.

Este elemento debe aparecen rotado 180 grados en Internet Explorer.

Problemas:

  • El CSS no será válido, pero tampoco con WebKit o los códigos de Mozilla
  • Estos últimos permiten cambios para variar la rotación de un grado, el filtro de IE sólo permite 4 etapas de la rotación, minimizando su flexibilidad

Fuente: CSS3 Solutions for Internet Explorer – Smashing Magazine.

Reblog this post [with Zemanta]


CSS3, diseño web, Estándares, HTML, navegadores

Trackbacks/Pingbacks

  1. Tweets that mention CSS3: soluciones para Internet Explorer | Diseño web, accesibilidad, usabilidad, posicionamiento y optimización web - AlmacenPlantillasWeb Blog -- Topsy.com - 2 mayo 2010

    [...] This post was mentioned on Twitter by Stylesheet, aws. aws said: #CSS3: soluciones para Internet Explorer http://goo.gl/fb/a1PN9 #css #estándares #html #diseñoweb #navegadores [...]

Compression Plugin made by Cork Tiles