Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/02/2012, 00:05
Avatar de alrvivas
alrvivas
 
Fecha de Ingreso: febrero-2012
Ubicación: Sahuayo,Mich., México
Mensajes: 11
Antigüedad: 12 años, 9 meses
Puntos: 0
Información Degradados(gradientes) para IE y navegadores viejos

Como comentaba en mi post anterior con el mismo nombre [URL="http://www.forosdelweb.com/f53/degradados-gradientes-para-ie-navegadores-viejos-976391/"]"Degradados(gradientes) para IE y navegadores viejos"[/URL] en el foro de CSS, la idea es dar "soporte" para todos los navegadores, para lo cual les traigo este otro complemento, por si a alguien le agrada mas trabajar con JavaScript y por si tuvo algún contratiempo de la primera forma.

Lo que necesitamos hacer es crear una pequeña librería para hacer que nuestros navegadores tanto modernos como "antiguos" soporten los degradados.

Esta pequeña librería la descargue hace tiempo que ya no encuentro de donde así que la pondré tal cual.

js/gradientes.js
Código:
function $(x){return document.getElementById(x);} 
function css(id,prop){ 
    if(window.getComputedStyle){ 
        return document.defaultView.getComputedStyle($(id),null).getPropertyValue(prop);
    }else{ 
        var re = /(-([a-z]){1})/g; 
        if (prop == 'float') prop = 'styleFloat'; 
        if (re.test(prop)) { 
            prop = prop.replace(re, function () { 
                return arguments[2].toUpperCase(); 
            }); 
        } 
        return $(id).currentStyle[prop] ? $(id).currentStyle[prop] : null; 
    } 
} 
function gradiente(id,col1,col2,type){ 
    if (document.createElement("canvas").getContext) {          
            var b1=parseInt(col1.substr(5,2),16); 
            var g1=parseInt(col1.substr(3,2),16); 
            var r1=parseInt(col1.substr(1,2),16); 
            var b2=parseInt(col2.substr(5,2),16); 
            var g2=parseInt(col2.substr(3,2),16); 
            var r2=parseInt(col2.substr(1,2),16); 
            var ref = document.createElement("canvas"); 
            ref.width = parseInt(css(id,'width')); 
            ref.height =parseInt(css(id,'height')) 
            var context = ref.getContext("2d"); 
            context.translate(0,0); 
            context.scale(1,1); 
            if(type){ 
                context.translate(ref.width,0); 
                context.rotate(Math.PI/2); 
                var gradient = context.createLinearGradient(0, 0, 0, ref.width);
                gradient.addColorStop(1, "rgba("+r1+","+g1+","+ b1+", 1.0)"); 
                gradient.addColorStop(0, "rgba("+r2+","+g2+","+ b2+", 1.0)"); 
                context.fillStyle = gradient; 
                context.fillRect(0,0,ref.height, ref.width); 
            }else{ 
                var gradient = context.createLinearGradient(0, 0, 0, ref.height);
                gradient.addColorStop(0, "rgba("+r1+","+g1+","+ b1+", 1.0)"); 
                gradient.addColorStop(1, "rgba("+r2+","+g2+","+ b2+", 1.0)"); 
                   context.fillStyle = gradient; 
                context.fillRect(0,0,ref.width, ref.height); 
            } 
            $(id).appendChild(ref); 
    } else {  
                $(id).style.filter= 
"progid:DXImageTransform.Microsoft.Gradient(startColorstr="+col1+", endColorstr="+col2+", GradientType="+type+")"
    } 
}
Ahora tenemos dos opciones utilizar modernizr.js o simplemente hacer referencia directamente en nuestro documento HTML.

Para ambos creamos nuestras hojas de estilos y mandamos llamar la función gradient.

Código:
<script>
       window.onload=function(){ 
              gradient('degradado','#2b1300','#a37b50',0); 
       } 
</script>

css/style.css

Código:
#degradado{
      width:100px;
      height:20px; border:1px solid #CCC;
}
Ahora simple mente mandamos llamar a nuestro id en una etiqueta div

Código:
<div id="degradado">Gradientes para todos</div>

y nos quedaría un archivo así:

gradientes.html
Código:
<!DOCTYPE HTML>
<html>
<head>
<meta charset="utf-8">
<title>Degradados para todos</title>
<link rel="stylesheet"  href="css/style.css" media="screen" ></link>
<script src="js/degradados.js"></script>
<script> 

window.onload=function(){ 
gradient('degradados','#a37b50','#2b1300',0); 

} 
</script>   
</head> 

<body> 
<div id="degradados"></div> 

</body> 
</html>
ahora si quedemos utilizar modernizr.js como en el ejemplo pasado nos quedaría un archivo así:

gradientesmz.html
Código:
<!DOCTYPE html>
<html lang="es">
       <head>
       <script src="js/modernizr.js"></script>
       <script type="text/javascript">
	       Modernizr.load({
               test: Modernizr.cssgradients ,
   	       nope: ['js/gradientes.js'],
	       both: ['css/style.css' ]	
	       });
       </script>
       </head>
       <body>
              <div id="degradado">Gradientes para todos</div>
       </body>
</html>
Espero sea de utilidad y sirva de algo, excelente día para todos