Ulzurrun de Asanza i Sàez

Category: CSS

Cascade Style Sheets.

Diseñando nuestra web para el iPhone – Parte 2

Nota: Esta es la segunda parte del tutorial Diseñando nuestra web para el iPhone. Si no has leído las partes anteriores, es muy recomendable que lo hagas, comenzando por la primera. También os aviso de que si bien voy a explicar cómo diseñar para el iPhone, para comprender estos tutoriales son necesarios unos mínimos conocimientos de HTML y CSS, siendo recomendable tener alguna idea de Javascript (tampoco es necesario ser experto, ya que yo mismo soy un novato).

En esta segunda parte nos centraremos en las medidas que debe tener nuestro diseño, detectar rotaciones (giros a la derecha o a la izquierda), definir un icono para nuestra web, personalizar el zoom máximo y daré unas pinceladas sobre la cabecera. Para ello revisaremos algunas páginas diseñadas específicamente para el iPhone, como Yahoo y Google (versión iPhone), deviantART, Coosh o Please fix the iPhone.

Medidas

Medidas de Safari en el iPhone
Medidas
Medidas de Safari en el iPhone (apaisado)
Medidas en horizontal

Vayamos por partes. Antes de comenzar a hacer nada debemos tener claro el tamaño que tendrá el diseño. En la imagen de la izquierda podéis ver las medidas de los diferentes contenidos que muestra el iPhone: la barra de estado (está siempre visible, tiene 20px de alto y ocupa siempre todo el espacio horizontal de la pantalla), el campo de la URL (se oculta al hacer scroll hacia debajo, ocupa todo lo posible en el eje horizontal y 60px en el vertical), la barra de botones (al igual que la barra de estado, no se puede ocultar, ocupa 44px en la vertical y todo lo posible en la horizontal), lo cual deja un espacio de 320px x 356px de contenido propio de la página (320 en el eje horizontal y 356 en el vertical).

Si colocamos el iPhone en posición horizontal (apaisado), algunas medidas variarán (ver imagen de la derecha): la barra de estado y el campo de la URL permanecen como antes, mientras que la barra de botones para a ocupar sólo 32px en el eje vertical, con lo cual el contenido visible ocupa un espacio de 480px x 208px.

Cuando se diseña una web suele ser necesario tener en cuenta las diversas resoluciones de pantalla en las que se visualizará la página, sin embargo una de las cosas buenas para los diseñadores (y en algunos casos malas para los usuarios) es que la resolución es fija, así que basta con diseñar específicamente para estas medidas: nuestro diseño sólo se verá en un dispositivo un determinado navegador y una resolución de pantalla de 320px x 480px.

Detectando los giros, asignando icono y personalizando zoom

Al poderse girar el iPhone hay dos posibilidades: que se esté visualizando la página con el dispositivo en vertical o que se visualice con el iPhone en horizontal, lo cual hace que sea necesario detectar estos giros para poder mostrar u ocultar cierto contenido en cada caso.

Por ejemplo, si queremos que en la versión horizontal se vea algo más de contenido en los laterales (por aprovechar el espacio), será necesario detectar el cambio de posición y ajustar el diseño en consecuencia. Otro caso en el que necesitemos saber si se ha producido un giro es en el caso de los formularios: un campo de texto se puede alargar cuando el iPhone está en posición horizontal y se debe acortar cuando está en posición vertical, pura lógica.

Parar ello recurriremos a Javascript, con el cual podemos detectar fácilmente estos giros.

[javascript]
function updateOrientation()
{
switch(window.orientation)
{
case 0:
tamanio_cuadro_texto = "200px";
tamanio_contenedor_a = "150px";
break;
case -90:
tamanio_cuadro_texto = "360px";
tamanio_contenedor_a = "300px";
break;
case 90:
tamanio_cuadro_texto = "360px";
tamanio_contenedor_a = "300px";
break;
case 180:
tamanio_cuadro_texto = "200px";
tamanio_contenedor_a = "150px";
break;
default:
tamanio_cuadro_texto = "200px";
tamanio_contenedor_a = "150px";
break;
}
document.getElementById("cuadro_texto_1").style.width = tamanio_cuadro_texto;
document.getElementById("a").style.width = tamanio_contenedor_a;
}
[/javascript]

Es un código bastante sencillo, que se puede ampliar mucho más (el de arriba es sólo un pequeño ejemplo). Para hacer que funcione del todo tendremos que modificar la etiqueta body de nuestro HTML y añadirle los atributos onorientationchange y onLoad, que nos asegurarán que cada vez que se cargue la página o se cambie la orientación, se cambiará el tamaño por el adecuado (definido antes en el código Javascript), quedando así nuestra etiqueta body:

[html]
<body onorientationchange="updateOrientation();" onLoad="updateOrientation();">
[/html]

Otro punto interesante para hacer única nuestra página web es asignarle un icono. En principio el iPhone no muestra ningún favicon en el navegador, pero al añadir un enlace a una web en la página de inicio, podemos indicarle al navegador que tome como icono una imagen específica, en lugar de una previsualización de la página web (que es lo que toma por defecto). Para esto usaremos la etiqueta link con el atributo rel establecido en apple-touch-icon:

[html]
<link rel="apple-touch-icon" href="http://10.0.1.3:8888/sumolari/wp-content/themes/sumolari/ipo/img/favicon.png"/>
[/html]

Este icono debe ser una imagen con un tamaño cuadrado. No es necesario que le añadamos bordes curvos ni el toque luminoso, ya que los hará el iPhone directamente.

Por último, el iPhone permite hacer zoom en las páginas, sin embargo, como estamos diseñando específicamente para él, nos interesa mantenerlo bloqueado y ser nosotros quienes definamos el tamaño de las textos y los elementos. Con esto también logramos darle a la web un aspecto más similar al de una aplicación nativa. Para bloquear el zoom usaremos el meta-tag viewport, como en el siguiente ejemplo:

[html]
<meta name="viewport" content="width=device-width; initial-scale=1.0; maximum-scale=1.0; user-scalable=0;"/>
[/html]

Si os fijáis, este meta-tag define varias cosas, como la anchura máxima (width – recordad que una cosa es hacer scroll vertical, cosa que ocurre muy a menudo en equipos tanto sobremesa como móviles, y otra hacer scroll vertical: queda mucho más “profesional” e integrado en la plataforma el que la web tenga scroll vertical pero carezca de horizontal, probadlo vosotros mismos y veréis como notáis el cambio), la escala inicial (initial-scale), la escala máxima (maximum-scale) y la posibilidad de escalar por parte del usuario (user-scalable).

Cabeceras

Ya llegamos a lo que es el diseño en sí. Este apartado lo completaré en la próxima parte, ya que hay bastantes cosas que explicar y me gustaría dejarles una parte sólo a ellas. Para adentrarnos en el tema de las cabeceras me gustaría proponeros 5 páginas diseñadas para el iPhone como ejemplo de diseños.

Como podéis ver, las 5 páginas se ajustan al tamaño horizontal del iPhone (que no al vertical). Las tres primeras páginas comparten el uso de pestañas, mientras que las dos últimas no hacen uso de ellas. La tercera página junto con la quinta intentan simular el aspecto de una aplicación nativa (usando parte del contenido visible para mostrar una barra de título similar a las de las aplicaciones nativas), mientras que la cuarta página utiliza un diseño más propio, siguiendo las líneas que utiliza el iPhone pero no intentando imitar tanto.

Así que deberemos decantarnos por un tipo de cabecera: con pestañas, simulando un aplicación nativa o que tenga un toque personal. A mí, de las que he visto hasta ahora, la que más me gusta es la de Yahoo. Creo que han dado en el clavo al mezclar un toque personal con el sistema de pestañas y la imitación (en parte) de la barra de título de una aplicación nativa.

Pero bueno, esto es todo por ahora. En la próxima parte me centraré por completo en lograr resultados parecidos a los de los ejemplos, es decir, me centraré en crear una cabecera con pestañas y una que simule la barra de título de una aplicación nativa.


WP Carousel 0.4.0.10

Este fin de semana he estado trabajando en una actualización de WP Carousel. Esta nueva versión arregla un bug que impedía el correcto funcionamiento del carrusel en Internet Explorer 7 y anteriores (que al final ha resultado ser un error de CSS), además de corregir un fallo en las redirecciones del Panel de Administración.

También añade la posibilidad de limitar el número de artículos que se mostrará en cada categoría, de modo que es posible mostrar 5 artículos de una categoría y 3 de otra. Es recomendable limitar a un número de artículos menor de los que hay en la categoría, ya que si no se pueden producir comportamientos anómalos (añadir artículos de otras categorías para llegar al límite, por ejemplo).

Por último, también permite seleccionar el orden de los artículos: se pueden ordenar de más recientes a más antiguos o al revés.

No es mucha novedad y por eso esta nueva versión sigue siendo de la rama 0.4.0.x.

Podéis actualizar a esta versión desde el Panel de Administración de WordPress o descargando el plugin desde aquí.


50 técnicas CSS / JS para mejorar nuestros diseños

Anteayer publicaron en SmashingMagazine un recopilatorio de 50 técnicas CSS / JS para mejorar el aspecto de nuestros diseños, que van desde hacer un menú desplegable usando CSS3 hasta crear una réplica de la barra inferior de Facebook, pasando por crear galerías de imágenes al estilo de las de la web de Apple o ajustar el alto de diversas columnas usando jQuery.

Efectos CSS increíbles

Vía CSSBlog descubro 4 efectos increíbles creados enteramente con CSS1 y CSS2, que van desde una lata de Cocacola que gira sobre sí misma hasta un efecto de distorsión sobre el Starry Night de Van Gogh pasando por un efecto de aparicióncon barras corredizas y un cuadrado que se desplaza por encima de una imagen y deforma el fondo.

Todos los efectos han sido creados por Román Cortés.

Ya está disponible Firefox 3.6

Firefox 3.6

Ya se puede descargar tanto para Windows como Mac y Linux la versión 3.6 de Firefox, que, entre otras cosas, es un 20% más rápida que la versión 3.5, implementa las últimas especificaciones HTML5, admite audio y vídeo en formatos abiertos y en pantalla completa e incluye “Personas” por defecto.

Se puede descargar la versión 3.6 desde la página de Mozilla o ver las novedades en el comunidado de prensa.


45 técnicas CSS / Javascript

Ayer publicaron en Smashing Magazine una lista de 45 técnicas realmente útiles de CSS / Javascript, como hacer que las listas (<ul>, <ol>) parezcan tablas, mostrar un reloj con un indicador circular con jQuery o incluso mostrar una línea del tiempo usando sólo CSS y listas.

WP Carousel 0.4.0.1

¡Ya comenzamos con los arreglos de fallos de WP Carousel 0.4! Y es que aunque parezca mentira, unas pocas horas después de liberar la versión 0.4, tengo que liberar la versión 0.4.0.1, que arregla un par de bugs que he encontrado en la versión anterior, añade una nueva función y evita problemas con los archivos.

Pero vayamos punto por punto. El bug que arregla esta versión aún no ha sido reportado, así que creo que nadie lo ha tenido aún. Consiste en que si creamos X carruseles y no los mostramos todos, es posible que varios fallen. El motivo del bug es algo relativamente simple. El código que inicia los carruseles se carga siempre, de modo que es posible que se muestre el carrusel con ID 5, con ID 1 y con ID 0, pero no el que tiene ID 4, ni el 3 ni el 2, de modo el script, al tratar de ejecutarse, conseguirá hacer funcionar los carruseles con ID 0 y 1, pero al llegar al que tiene por ID 2, no podrá continuar, ya que no se muestra, por tanto llegará a un error y dejará de ejecutarse correctamente, haciendo fallar al carrusel con ID 5, que sí se muestra en este ejemplo.

Este bug lo he detectado al eliminar el Widget de la sidebar de mi blog de pruebas, que tenía por ID, 0, y ha sido entonces cuando he visto el error.

El segundo error que he visto es muy estúpido, había traducido mal una frase al español, en lugar de poner volver, he puesto volever. Es posible que lo hayáis visto y no os hayáis dado cuenta del error, pero ya está solucionado.

La función nueva que se añade es que ahora la función wp_carousel es capaz de devolver el código HTML generado, y no sólo mostrarlo. El principal motivo para añadir esto es que en próximas versiones se podría añadir una etiqueta del estilo de [WP_CAROUSEL:ID] que se reemplace automáticamente por el carrusel en cuestión, de modo que no sería necesario ni editar el theme: se podría mostrar el carrusel en artículos y páginas.

Pero el verdadero motivo por el que publico tan pronto la versión 0.4.0.1 es muy diferente. Resulta que al subir los archivos al servidor de WordPress, estaba usando la vista como árbol de svnX. Yo añadí las carpetas principales (img, css, js, themes…) pensando que el sistema era recursivo, es decir, que él sólo añadiría automáticamente los archivos que contenían esas carpetas, pero no, no es así, de modo que durante aproximadamente una hora ha estado en el servidor de WordPress una versión de WP Carousel 0.4 inoperativa, ya que no incluía, por ejemplo, el código JS que inicia el carrusel ni los themes ni las imágenes… ni nada. Para evitar tener que avisar a todos aquellos que han descargado esta versión (que de hecho no sé ni quiénes son), subo ya la versión 0.4.0.1 y cuando actualicen a esta versión, ya tendrán todos los archivos necesarios para el buen funcionamiento del plugin.


Ya está disponible WP Carousel 0.4

Theme por defecto de WP Carousel 0.4
Theme por defecto de WP Carousel 0.4

Estos últimos días he estado publicando bastante sobre WP Carousel 0.4, y aunque no he querido en ningún momento dar una fecha exacta de la liberación de esta versión, lo cierto es que estaba totalmente convencido de que si no hoy, en un par de días estaría acabada.

Las novedades de esta versión ya las he comentado antes, así que no haré más hincapié en ellas. Podéis verlas en este artículo o en la página del plugin (que voy a actualizar estos días, añadiendo los datos de la nueva versión y la nueva documentación).

Antes de actualizar, debéis tener en cuenta que no son compatibles los métodos de almacenamiento de WP Carousel 0.3 (y anteriores) con los de WP Carousel 0.4. El motivo de esto es que la nueva versión permite añadir mucho más contenido al carrusel, y para gestionarlo de forma más cómoda, fácil y flexible, he modificado las matrices que almacenaban el contenido, pasando de ser una única matriz con la configuración de cada carrusel a dos matrices: una para la configuración de cada carrusel y otra para el contenido de cada carrusel. Ciertamente, podría haber creado alguna función para convertir los datos antiguos al nuevo esquema de almacenamiento, pero tendiendo en cuenta que las versiones anteriores permitían menos configuración que la actual, he decido hacer borrón y cuenta nueva. Las próximas versiones de WP Carousel sí que serán retrocompatibles con el sistema de almacenamiento.

Podéis actualizar automáticamente WP Carousel o descargar la última versión desde aquí.


Diseña un theme para WP Carousel

Theme por defecto de WP Carousel 0.4
Theme por defecto de WP Carousel 0.4

Con este título ya os podéis imaginar de qué trata el artículo y cómo va el desarrollo de WP Carousel 0.4. Sobre lo primero, hoy explicaré cómo diseñar un theme para WP Carousel (similar a los de WP Main Menu pero con sus cosas particulares) y acerca de lo segundo, he de decir que va inesperadamente muy bien: ya sólo queda el Widget para la Sidebar, los múltiples carruseles en una (o varias) páginas, las traducciones, el valor por defecto de ciertas variables que se pueden configurar (como anchura de los paneles, mostrar flechas o no, etc), exportar e importar y la búsqueda y arreglo de errores. ¿Previsiones? No, gracias. Seguiré sin dar un fecha exacta, aunque voy bastante bien, prefiero seguir sin presión, aunque si tuviera que dar un porcentaje de lo completado de esta versión, diría que ya he superado el 60%.

Pero volviendo al tema, es hora de explicar cómo crear theme para WP Carousel. Por defecto vendrán un par de themes (tengo hechos 2, aunque puede que añada alguno más especialmente pensado para la sidebar), así que viendo el código de cada uno y comparándolo se podrán ver las principales diferencias, pero explicaré paso a paso cómo se crea un theme.

En cuanto a la composición de archivos, es la misma que los themes de WP Main Menu, totalmente idéntica, aunque eso sí, los themes de uno y de otro no son compatibles para nada. Como mucho, la página de opciones os puede detectar los themes de ambos, pero no son compatibles.

Partiremos de un archivo index.php que almacenará la información del theme, cosas como nombre del autor, versión, descripción y archivos CSS que usará (no se permiten añadir archivos Javascript), en una matriz llamada $theme. A continuación podéis ver el código del archivo index.php del theme Default:

[php]
<?php

// THEME INFORMATION

$theme[‘author’] = "Sumolari";
$theme[‘author_url’]= "http://sumolari.com";
$theme[‘name’] = "WP Carousel 0.3 Look";
$theme[‘url’] = "http://sumolari.com/wp-carousel";
$theme[‘desc’] = __(‘Use WP Carousel 0.3’s theme’, ‘wp_carousel’);
$theme[‘version’] = ‘1.0’;

$theme[‘css’] = array();
$theme[‘css’][] = ‘style.css’;

?>
[/php]

Otro archivo fundamental en los themes es el archivo theme.php, que mostrará el contenido del carrusel. Lo cierto es que en este punto los themes no son muy flexibles: tienen que tener una estructura bastante fija en el diseño. A continuación podéis ver el código mínimo de un theme de WP Carousel comentado y explicado.

[php htmlscript=”true”]
<?php
echo ‘<div class="nombre_de_mi_theme">’; // Es recomendable poner al principio una capa que tenga por clase el nombre del theme, así se evitan conflictos relacionados con el CSS de otros themes que estén activados en otros carruseles

if ($config[‘ARROWS’]): // Comprobamos si están habilitadas las flechas y en cada desplazamiento manual se debe desplazar como mínimo un panel
echo ‘<a href="javascript:stepcarousel.stepBy(‘carousel_’.$c_id.”, ‘.$config[‘SLIDE_POSTS’].’)">’; // Enlace para adelantar un panel
printf(__(‘Forward %s panel’, ‘wp_carousel’), $config[‘SLIDE_POSTS’]); // Texto del enlace
echo ‘</a>’; // Fin del enlace
endif; // Fin de la comprobación

if ($config[‘ARROWS’]): // Comprobamos si están habilitadas las flechas y en cada desplazamiento manual se debe desplazar como mínimo un panel
echo ‘<a href="javascript:stepcarousel.stepBy(‘carousel_’.$c_id.”, -‘.$config[‘SLIDE_POSTS’].’)">’; // Enlace para retroceder un panel
printf(__(‘Back %s panel’, ‘wp_carousel’), $config[‘SLIDE_POSTS’]); // Texto del enlace
echo ‘</a>’; // Fin del enlace
endif; // Fin de la comprobación

?>

<div id="carousel_<?php echo $c_id; ?>" class="stepcarousel"> <?php // Esta capa (div) debe tener esa ID y no otra, ya que StepCarousel (el script en el que está basado WP Carousel) crea los carruseles mediante las IDs de los elementos que los contienen ?>

<div class="belt"> <?php // Otra capa necesaria para el correcto funcionamiento de StepCarousel. No se debe modificar la clase, puede hacer que falle el script ?>
<?php foreach ($items as $i_id => $item): // Iniciamos el bucle que mostrará los elementos del carrusel, donde $i_id es la ID INTERNA de los elementos del carrusel (la ID que utiliza WP Carousel) y el índice ID de la matriz $item es la ID que tiene el elemento dentro de WordPress. En este ejemplo están todos los índices importantes de $item, hay más, pero no merecen ser explicados ya que no son usados mas que internamente por WP Carousel ?>
<div class="panel" <?php if ($config[‘HAS_PANEL_WIDTH’]) echo ‘style="width:’.$config[‘PANEL_WIDTH’].’;"’; ?>><?php // Esta es otra capa que debe tener de clase panel. El índice HAS_PANEL_WIDTH comprueba que el valor de la anchura personalizada del panel no esté en blanco y si es un valor aceptable, lo usa como anchura ?>
<a href="<?php echo $item[‘LINK_URL’]; ?>" title="<?php echo $item[‘TITLE’]; ?>"><?php // Enlace hacia la URL del elemento el carrusel. Ojo, es la URL a la que debe dirigir el elemento, no la URL del elemento dentro de WordPress, así que un artículo que tenga por permalink /post, no tiene por qué llevar a /post, sino que puede llevar a http://sumolari.com (por ejemplo). El índice LINK_URL almacena la URL del enlace mientras que el índice TITLE almacena el título del contenido. Como podréis suponer, la matriz $items no contiene ninguna categoría, sino que anteriormente WP Carousel ha reemplazado las categorías por los artículos que hay en ellas ?>
<img src="<?php echo $item[‘IMAGE_URL’]; ?>" alt="<?php echo $item[‘TITLE’]; ?>" title="<?php echo $item[‘TITLE’]; ?>" width="<?php if ($config[‘HAS_IMG_WIDTH’]) { echo $config[‘IMG_WIDTH’]; } else { echo ‘100px’; } ?>" height="<?php if ($config[‘HAS_IMG_HEIGHT’]) { echo $config[‘IMG_HEIGHT’]; } else { echo ‘100px’; } ?>" /><?php // Ahora mostramos la imagen que hemos establecido para este elemento. El índice IMAGE_URL se corresponde a la URL de la imagen, el índice TITLE lo hemos comentado antes, el índice HAS_IMG_WIDTH es true si la anchura personalizada de las imágenes del carrusel es un valor aceptable, mientras que el índice IMG_WIDTH es el valor anteriormente comprobado. El índice HAS_IMG_HEIGHT e IMG_HEIGHT devuelven lo mismo que los anteriores pero sobre la altura. Podéis ver que la altura y la anchura por defecto es de 100px. ?>
</a><?php // Cerramos el link ?>
<div class="panel-text"><?php // Esto es opcional, y es la capa en la que se mostrará la descripción de cada elemento. Se pueden hacer themes que no muestren la descripción y themes que no muestren el título, al igual que themes que no muestren ninguno o que muestren ambos ?>
<?php echo $item[‘DESC’]; // El índice DESC se corresponde con el extracto del artículo o el campo personalizado wp_carousel_carousel_text ?>
</div><?php // Cerramos la capa de la descripción ?>
</div><?php // Cerramos la capa del panel ?>
<?php endforeach; // Finaliza el bucle ?>
</div> <?php // Cerramos la capa con clase belt ?>
</div><?php // Cerramos la capa del carrusel ?>

<?php if ($config[‘ENABLE_PAGINATION’]): // El índice ENABLE_PAGINATION devuelve true si se deben mostrar los iconos indicadores del panel en el que nos situamos ?>
<div id="carousel_<?php echo $c_id; ?>-paginate" class="wp_carousel_default_pagination"><?php // La ID de esta capa no se puede modificar, pero la clase sí ?>
<img src="<?php echo $path[6]; ?>/img/opencircle.png" data-over="<?php echo $path[6]; ?>/img/graycircle.png" data-select="<?php echo $path[6]; ?>/img/closedcircle.png" data-moveby="1" /><?php // Mostramos la imagen de carga e indicamos la URL a los iconos de la paginación. El índice 6 de $path devuelve la URL hasta la carpeta del plugin. Para cargar la carpeta del theme, deberíamos usar el siguiente código: $path[6].’/themes/’.$config[‘THEME’].’/imagen.png ?>
</div><?php // Cerramos la capa de la paginación
endif;

echo ‘</div>’; // Cerramos la capa con la clase especial para evitar conflictos CSS

?>
[/php]

Con esto ya tenemos dos tercios del trabajo hecho, pero nos queda el CSS, que también es algo restrictivo, ya que tenemos que partir de un código CSS básico que es:

[css]
.nombre_de_mi_theme .stepcarousel {
position: relative;
overflow: scroll;
}

.nombre_de_mi_theme .stepcarousel .belt {
position: absolute;
left: 0;
top: 0;
}

.nombre_de_mi_theme .stepcarousel .panel {
float: left;
overflow: hidden;
}
[/css]

Os recomiendo que diseñéis teniendo en cuenta que hay otros themes y que puede que haya dos themes en uso a la vez, así que hay que procurar una máxima compatibilidad entre los themes.

Y esto es todo, así se crea un theme para WP Carousel. ¿Fácil? ¿Difícil? ¿Flexible? ¿Estricto? Puede que no sea el mejor sistema de creación de themes, pero es el que habrá en la próxima versión de WP Carousel, y seguramente en las posteriores.


Reduce CSS y JS remotamente con Reducisaurus

Ya he hablado algunas veces de comprimir los archivos CSS y JS para mejorar el rendimiento de una aplicación web, sin embargo todas aquellas veces en las que he hablado de esto, lo he hecho con la idea de comprimir los archivos en nuestro servidor y ayer, en Anieto2k publicaron un artículo comentando un nuevo servicio llamado Reducisaurus. Este servicio nos permite enlazar a un archivo al cual le indicamos mediante variables de URL el contenido que queremos comprimir, de modo que la compresión la realiza el servidor de Reducisaurus. La compresión está basada en YUI Compressor y es realmente fácil de utilizar.

Si normalmente enlazaríamos nuestros archivos así:

[html]
<script src="http://miweb.com/jquery.js"></script>
<script src="http://miweb.com/mootools.js"></script>
[/html]

Con Reducisaurus lo haríamos así:

[html]
<script src="http://reducisaurus.appspot.com/js?url1=http://miweb.com/jquery.js&url2=http://miweb.com/mootools.js"></script>
[/html]

Admite un par de parámetros más, como fileX (donde X es un número entero comprendido entre 1 e infninito y permite añadir código Javascript para comprimir que no esté en ningún archivo) o max-age (el cual indica el tiempo que dura la caché, en segundos, que por defecto es 600 segundos). Si queremos eliminar la caché, basta con establecer la variable de URL expire_urls a 0.

Pasando al CSS, el código funciona de la misma forma. Por ejemplo, si usamos el siguiente código para llamar a nuestro CSS:

[html]
<link rel="stylesheet" href="http://miweb.com/style.css" />
<style type="text/css">
body { background:#000; }
</style>
[/html]

Con Reducisaurus lo haríamos así:

[html]
<link rel="stylesheet" href="http://reducisaurus.appspot.com/css?url1=http://miweb.com/style.css&file1=body { background:#000; }">
[/html]

Al igual que con el código Javascript, podemos utilizar parámetros para controlar la caché.

Como todas las cosas, este sistema tiene unas desventajas, como por ejemplo, que dependemos totalmente del servidor de Reducisaurus, de modo que si este se desconecta, perdemos el estilo de la página. Además tengo la impresión de que ralentizará la carga, ya que el cliente cargará la página, el servidor de Reducisaurus cargará los archivos CSS y JS, comprimirá los archivos y el cliente finalmente los podrá cargar mientras que si usásemos compresión con Gzip (por ejemplo) al cargar la página el servidor los comprimiría automáticamente y el cliente no tendría que esperar a que otro servidor recibiese los archivos sin comprimir y los devolviese comprimidos. Sin embargo nunca está de más tener servicios como éste a mano.