Archivos de la categoría ‘Artículos’

Mejorar carga de audio html5 con sprites

Esta semana estuve jugando con la API de vídeo y audio de HTML5 y descubriendo la increíble cantidad de eventos y propiedades de los objetos del tipo media.

Onda de audio

Yo que soy un gamer confeso (y desarrollador de juegos frustrado) en seguida empecé a pensar en cómo se aplicaría la API de audio en un juego desarrollado en HTML5 y encontré un pequeño problema: si los juegos tienen un sonido para, por ejemplo, cada tipo de disparo, para los saltos, pasos, poderes especiales, música de fondo… unos 30 o 40 archivos de sonido, habría que hacer esa misma cantidad de llamadas al servidor para cargarlos.

Entonces pensé que pasa igual en diseño web con las imágenes y que desde hace tiempo los front-end usamos sprites, es decir, unificamos todas las imágenes en una y luego mostramos la parte que nos interesa de este gran mosaico.

Howler.js, la solución

Si algo nos enseña el método empírico, es que tras el hallazgo del problema y la formulación de la hipótesis hay que recopilar información, empezando por aquellos trabajos que similares al que estás dispuesto a emprender. Entonces encontré Howler.js, una ligera (5kb) librería de tratamiento de audio que permite manejar la API de audio HTML5 fácilmente y que permite usar el mismo concepto de Sprite en el audio.

Personalmente os recomiendo (ya lo hice en twitter) usar esta librería en los proyectos donde tengáis que usar audio.

Reproducir un sonido con Howler es sencillo:

var sonido = new Howl({
  //Cargamos los archivos en sus formatos
  urls: ['audio.mp3', 'audio.ogg']
});
//Reproducimos con el método play()
sonido.play();

Ahora bien, para usar los sprites primero los declaramos en el constructor:

var sonido = new Howl({
  //Cargamos los archivos en sus formatos
  urls: ['audio.mp3', 'audio.ogg'],
  //Indicamos el conjunto de Sprites
  sprite: {
     //ding es el nombre (trivial) que le ponemos al sprite
     ding: [0, 1000],
     //El primer valor entre corchetes corresponde con
     //el milisegundo donde comenzará el sprite
     dong: [1000, 1900]
     //El segundo valor entre corchetes corresponde a
     //la cantidad de milisegundos que durará el sprite
  }
});

Por último, para reproducir un sprite en concreto, usamos el método play pasando como valor el nombre del sprite:

sonido.play('ding');

De esta forma mejoraremos el rendimiento de nuestra web, juego o aplicación cuando tengamos que usar una cantidad media o alta de sonidos.

Ver ejemplo

VN:F [1.9.22_1171]
Valora esta entrada
Rating: 8.4/10 (5 votes cast)

Efecto girar foto 360 grados con HTML5 y CSS3

Publicado el: 3 comentarios

Este tutorial muestra como jugando con la propiedad “background-position”, el tipo de input “range” y un poco de javascript, podemos crear efectos de giro 360º.

Partiendo del mismo concepto buscaremos dos resultados diferentes: por un lado visualizaremos una fotografía panorámica de 360º y por otro crearemos un efecto de giro alrededor de un producto.

Ver ejemplo completo

Efecto panorámica 360º

Para este ejemplo necesitaremos contar con una fotografía de 360º similar a las que usa Google Maps en su Street View.

Seguramente no tendremos a nuestra disposición una cámara que tome este tipo de fotos, así que podemos seguir el manual para hacerlo con Photomerge de Photoshop. El resultado que ofrece Photomerge es bastante bueno si cuidamos la estabilidad y la iluminación durante la toma de fotos.

Imagen panorámica 360º

Una vez tengamos nuestra foto panorámica, creamos un documento HTML5 donde sólo incluiremos un div y un input del tipo ‘range’:

<div id="imagen360"></div>
<input id='rango' type="range" max='100' min='0' value='0'>

Las etiquetas range son similares a un control slider y responde entre otras a las propiedades max, min y value:

  • max es el valor máximo que puede tomar, cuando arrastramos el manejador al tope derecho.
  • min es el valor mínimo que puede tomar, cuando arrastramos el manejador al tope izquierdo.
  • value es el valor predefinido que posicionará el manejador a lo largo de la línea de control.

Hay que tener en cuenta que por ahora Firefox no da soporte a los inputs “range”, que las muestra como tipo “text”. Es curioso que IE10 sí las muestre. Se acerca el apocalipsis.

A la capa le aplicamos el fondo con la imagen panorámica. En mi caso he procurado que el alto del div coincida con el de la imagen. Aplicamos unos estilos básicos:

#imagen360{
 background: url(./img/imagen360.jpg);
 height: 300px;
 width: 300px;
}
#rango{
 width: 300px;
}

Ahora tendremos que relacionar los cambios de estado de nuestro range con la posición del fondo mediante javascript:

var anchoImagen = 4097 - 300;
var incremento = -1 * anchoImagen / 100;

//He usado jQuery por comodidad
$('#rango').on('change', function(e){
 var posicionImagen = $(this).attr('value') * incremento + 'px 0';
 $('#imagen360').css('background-position', posicionImagen);
});

La variable anchoImagen guarda el ancho del fondo quitándole los 300px del ancho del contenedor para que no se repita al llegar al final. incremento divide entre 100 para que corresponda con los pasos (min=’0′ max=’100′) del input.

La función que se dispara cuando hacemos ‘change’ (arrastramos el manejador) va cambiando el background-position del contenedor en función del valor del atributo value.

Efecto giro de 360º alrededor de un producto

Siguiendo la misma metodología, podemos usar range y background-position para crear la ilusión de estar rotando un artículo, por ejemplo, de una tienda online.

En este caso la imagen debería estar compuesta de varias fotos del producto tomadas desde distintos ángulos a modo de secuencia de fotogramas.

Imagen giratoria 360º

El código no sería muy diferente:

#imagengira{
 background: url(./img/imagengiratoria.jpg);
 height: 207px;
 width: 350px;
}
#giro{
 width: 350px;
}
<div id="imagengira"></div>
<input id='giro' type="range" max='18' min='0' value='0'>
var anchoframe = 350;
$('#giro').on('change', function(e){
 var rotacionImagen = -1 * $(this).attr('value') * anchoframe + 'px 0';
 $('#imagengira').css('background-position', rotacionImagen);
 });

En este caso sólo le damos 18 pasos a nuestro range (min=’0′ y max=’18′) que se corresponden con los 18 fotogramas que tiene y le disminuimos el ancho del frame (350) en cada uno.

Ver ejemplo completo

VN:F [1.9.22_1171]
Valora esta entrada
Rating: 7.0/10 (3 votes cast)

Importar modelos 3D con Three.js y WebGL

Publicado el: 7 comentarios

En un artículo anterior hice una breve introducción de Three.js, la librería de Javascript creada por MrDoob que facilita el trabajo con WebGL. Vimos cómo poner a punto nuestro escenario, cámaras, luces e incluso añadimos algunos elementos básicos como cubos o esferas. En esta ocasión comparto con vosotros la forma de importar modelos 3D a nuestro escenario.

Importar modelos 3D

Dentro de los archivos que podemos descargar de Three.js en github encontraremos una serie de loaders (“cargadores”) , que nos permiten importar a nuestra escena diferentes formatos de modelos tridimensionales.

Tal vez por una costumbre heredada de mi época con Away3D, he elegido para este ejemplo el importador de modelos Collada. Collada es un formato, similar a XML al que se pueden exportar modelos creados con Sketchup, Maya o 3DStudio. Para este caso he usado un modelo de la galería 3D de Google.

La explicación de la carga del modelo está incluida en los comentarios del código:

<script type="text/javascript" src='js/jquery-1.8.2.min.js'></script>
 <script type="text/javascript" src='js/threelast.js'></script>

<!--Cargamos el Loader de Collada -->
 <script type="text/javascript" src='js/ColladaLoader.js'></script>
 <script type="text/javascript">

 

 var grados = 0;

var ancho = 800,
 alto = 600;

var angulo = 30,
 ratio = ancho / alto,
 cerca = 0.1,
 lejos = 10000;

var escenario = $('#escenario');

var miRender = new THREE.WebGLRenderer();

var miCamara = new THREE.PerspectiveCamera(angulo, ratio, cerca, lejos);

var miEscena = new THREE.Scene();

 miRender.shadowMapEnabled = true;

miCamara.position.x = 0;
 miCamara.position.y = 400;
 miCamara.position.z = 400;

miRender.setSize(ancho, alto);

eje = new THREE.AxisHelper();
 eje.scale.set(100,100,100);

escenario.append(miRender.domElement);

var material = new THREE.MeshLambertMaterial({color: 0xebebeb});

/* SUELO */

var suelo = new THREE.Mesh(new THREE.CubeGeometry(400, 20, 400), material);
 suelo.position.x = 0;
 suelo.position.y = 0;
 suelo.position.z = 0;
 suelo.castShadow = suelo.receiveShadow = true;

/* MODELO */
 var modelo;
 //Creamos el objeto ColladaLoader
 var cargador = new THREE.ColladaLoader();
 //ConvertUpAxis corrige la orientación del modelo usando el plano XZ
 //como base, en lugar del XY que por defecto usa Collada.
 cargador.options.convertUpAxis = true;
 //El método load recibe dos parámetros: la url del modelo y una función
 //que hace de callback una vez cargado.
 cargador.load('./models/laevatein.dae',
 function(collada){
 modelo = collada.scene;
 //Ajustamos la escala del elemento.
 modelo.scale.set(0.1,0.1,0.1);
 //Ajustamos la posicion
 modelo.position.set(0,0,0);
 //Lo añadimos a la escena
 miEscena.add(modelo);
 //Enfocamos la cámara hacia él
 miCamara.lookAt(modelo.position);
 $('.cargando').hide();
 //Animamos la cámara
 animar(new Date().getTime());
 });

 /* LUZ */

var luzAmbiental = new THREE.AmbientLight(0x444444);

 var luz = new THREE.SpotLight(0xFFFFFF);

luz.position.x = 0;
 luz.position.y = 400;
 luz.position.z = 400;
 luz.castShadow = true;

 miEscena.add(eje);
 miEscena.add(luz);
 miEscena.add(luzAmbiental);
 miEscena.add(miCamara);

/* Esta función sólo realiza un movimiento de
 rotación de la cámara alrededor de nuestro modelo */
 function animar(t){
 grados += 1;
 rad = grados * Math.PI/180;
 var _x = Math.sin(rad) * 400;
 var _z = Math.cos(rad) * 400;
 miCamara.position.x = _x;
 miCamara.position.z = _z;
 miRender.render(miEscena, miCamara);
 miCamara.lookAt(modelo.position);
 window.requestAnimationFrame(animar, miRender.domElement);
}
 </script>

Ver ejemplo

VN:F [1.9.22_1171]
Valora esta entrada
Rating: 10.0/10 (1 vote cast)

Weekend: Juegos en navegador y experimentos con 3D

Publicado el: Un comentario

Las nuevas características en las capas de presentación, 3D y gráficos de HTML5 son las más impresionantes dentro del nuevo estándar. Son increíbles novedades que permiten aportar a nuestra aplicaciones web un nivel gráfico superior. Esta semana he recogido (pese a tener un catarro severo) 3 páginas para vuestro deleite visual: una web con un estilo similar a Zelda, un juego 3D de carreras y el fabuloso laboratorio de ejemplos del maestro MrDoob.

Silverchip te enseña una web diferente

SilverChip

Silverchip es una empresa de diseño, desarrollo y marketing online que han querido atraer gente a su web e impresionarlos con un uso creativo de canvas, transformando la navegación normal en un juego similar a los antiguos juegos de Zelda.

Enlace: http://preview.silverchip.co.uk/

Autor: SilverChip

Twitter: @silverchipuk

HexGL, un claro ejemplo del potencial de webGL

HexGL

Uno de los motivos por los que este mes me he propuesto aprender el máximo de WebGL son los cada vez más numerosos ejemplos de su potencia. HexGL es uno de los más vistosos y detrás de él no está Google o un gran equipo profesional, sino un estudiante de ingeniería informática.

Enlace: http://hexgl.bkcore.com/

Autor: Thibaut Despoulain

Twitter: @BKcore

MrDoob, un maestro creador de Three.js

MrDoob

Hace unos días escribí una introducción a Three.js, que nos permite ahorrar cientos (no es exageración) de líneas de código para llevar el 3D a la web. Al poco de escribir ese artículo descubrí los maravillosos trabajos de su creador Ricardo Cabello (afincado en Barcelona) también conocido como MrDoob. Creo que alguien con semejante talento debería inspirarnos a todos.

Enlace: http://mrdoob.com/

Autor: Ricardo Cabello Miguel

Twitter: @mrdoob

VN:F [1.9.22_1171]
Valora esta entrada
Rating: 10.0/10 (1 vote cast)

Qué aprender para ser diseñador y desarrollador web

Publicado el: 3 comentarios

Mucha gente me pregunta qué debe aprender y dónde puede empezar a formarse para ser diseñadores y desarrolladores web. En este artículo intentaré resumir los perfiles profesionales, los lenguajes, los frameworks y algunos materiales gratuitos para autodidactas.

Los dos grandes perfiles: back-end y front-end

Queda muy lejos la época en la que se hablaba del webmaster como un profesional que hacía una página web de inicio a fin. En la actualidad existen múltiples perfiles que pueden intervenir en el desarrollo de una página o aplicación web, pero nos centraremos en los dos principales: el desarrollador back-end y el desarrollador front-end.

Para entender estos perfiles imaginemos un coche. El back-end se encargaría de construir el motor, la centralita, el sistema de frenos y demás elementos que hacen que el coche haga su trabajo de transportar al conductor. Por otro lado el front-end tendría crearía el chasis, salpicadero, volante, palanca de cambios? es decir, todos aquellos elementos o bien estéticos o bien de interacción por parte del nuestro usuario.

Volviendo a la web, el profesional del back-end es el que crea la lógica interna y el del front-end el que se encarga de la visualización y la interacción del usuario.

Especializarse en uno de estos dos frentes es muy importante. A no ser que seas un auténtico genio, no lograrás ser excelente en ambos y la experiencia me ha enseñado que más vale ser excelente en una cosa que bueno en muchas. Sin embargo el profesional “perfecto” conoce lo suficiente de su “opuesto” para saber las posibles limitaciones técnicas y entenderse bien con el resto del equipo.

Diseño y desarrollo web

Si tienes claro que quieres dedicarte al back-end o al front-end, puedes leer cada uno de los títulos dedicados a ello. Si aún no te decides puedes seguir leyendo con normalidad:

Quiero ser Front-end developer

Quiero ser Back-end developer

Quiero ser Front-end developer

El front-end es un experto maquetador, genio de los estilos visuales y de la interacción.

Sus habilidades primarias son el uso avanzado de semántica HTML, manejo perfecto de CSS y programación fluida con Javascript. Conocen los formatos multimedia y como optimizarlos en este medio.

Entre sus aptitudes secundarias está el diseño o incluso la animación. Tendrán también nociones de usabilidad y de tecnologías de back-end.

Entre las tecnologías recomendables, para llegar a ser un auténtico samurai, encontramos los preprocesadores de CSS como LESS, SASS o Stylus, de HTML como HAML o ZenCode y de Javascript como CoffeeScript.

Por supuesto existen frameworks como jQuery, Mootols o Backbone que nos facilitarán la vida.

Quiero ser Back-end developer

El back-end es una máquina engrasada de crear lógica.

Sus habilidades primarias son el conocimiento de diferentes lenguajes de programación de lado de servidor como PHP, Python, Ruby o incluso Javascript (sí, con javascript puedes hacer back-end con Node.js). Normalmente el desarrollador de Back-end se especializa en uno o dos de ellos. Además, tiene un profundo conocimiento de bases de datos tanto relacionales como mySQL, como no relacionales como MongoDB.

Como características secundarias están HTML y CSS, servidores y programación de lado del cliente.

Es recomendable conocer los CMSs más usados como WordPress, Joomla, Magento, Prestashop y un largo etc. usados a menudo en proyectos pequeños.

Existe un largo número de frameworks para lenguajes de back como Symfony, Zend o CodeIgniter en PHP, Rails en Ruby o Django para Python, entre un enorme etcétera.

Dónde empezar a aprender

Aparte de la enseñanza tradicional y sistematizada de la que me ahorraré mi opinión personal, existen multitud de opciones en la web para autodidactas.

Por un lado están grandes comunidades hispanohablantes de desarrollo como Maestros del Web, Cristalab, Mejorando la Web o Desarrollo Web, repletas de artículos, manuales y aportaciones de usuarios.

También existen webs con tutoriales en inglés como W3Schools donde puedes experimentar tu propio código, sitios de gran calidad como dochub.io, MDN o plataformas interactivas como Codecademy.

Por último siempre puedes acudir a la enorme blogosfera repleta de personas que te ayudarán en casos concretos con tutoriales y artículos como este.

Para más dudas y consultas podéis preguntarme en twitter.

VN:F [1.9.22_1171]
Valora esta entrada
Rating: 9.6/10 (10 votes cast)

Hacer webs en 3D con WebGL y Three.js

Publicado el: 4 comentarios

Una de las características más novedosas de HTML5 es su capacidad para usar gráficos tridimensionales.

WebGL es la especificación que se está desarrollando para mostrar sin plugins estos gráficos 3D. Además, WebGL permite renderizar mediante aceleración por hardware.

Estamos hablando de que los navegadores pueden mover aplicaciones similares a videojuegos como Quake o programas como 3DStudio. Parece increíble… pero es una realidad.

Renderizado real con WebGL

En este tutorial haré una introducción a Three.js, una librería Javascript muy similar a Papervision3D o Away3D, para desarrollar de forma ágil y eficaz (sorprende su rendimiento) entornos tridimensionales a tiempo real y animaciones.

Podéis ver el ejemplo completo aquí.

Primeros pasos con Three.js

En primer lugar descargaremos la última versión de Three.js de Github. En el repositorio encontraremos, además de la librería, una treintena de ejemplos espectaculares.

Crearemos un proyecto HTML5 sencillo, con un index.html y una carpeta js, donde copiaremos la librería jQuery (que usaré en ocasiones por comodidad) y la última versión de three.js.

Primero definiremos un div que usaremos de contenedor y le aplicamos un poco de CSS para definir tamaño y color:

<!DOCTYPE html>
<html>
 <head>
 <meta charset='utf8'>
 <title>Experimentos 3D</title>

 <style type="text/css">
 body{
 margin: 0;
 }
 #escenario{
 background: #000;
 height: 600px;
 position: fixed;
 width: 800px;
 }
 </style>
 </head>
 <body>
 <div id="escenario"></div>
 </body>
</html>

E importamos nuestras librerías:

<script type="text/javascript" src='js/jquery-1.8.2.min.js'></script>
<script type="text/javascript" src='js/threelast.js'></script>

Editor 3D three.js

A partir de aquí es donde nace la magia.

Primero definiremos nuestro motor de renderizado y nuestra escena. Nuestro render es el que hace que se interpreten y muestren nuestros elementos tridimensionales, nuestras luces, sombras… Para definir un render de WebGL incluiremos en javascript:

var miRender = new THREE.WebGLRenderer();

También crearemos una escena. La escena es el espacio tridimensional “infinito” donde incluiremos nuestros elementos:

var miEscena = new THREE.Scene();

Por último indicamos el tamaño del render y embebemos nuestro render dentro de la capa que creamos en HTML. De esta forma Three.js generará el canvas que mostrará el contenido de nuestra infografía.

//El ancho y alto coinciden con ancho y alto de nuestro
//div contenedor
var ancho = 800,
 alto = 600;

//Aplicamos los tamaños.
miRender.setSize(ancho, alto);

//Embebemos
escenario.append(miRender.domElement);

Luces, cámara, ACCIÓN!

Lo siguiente que necesitaremos en nuestra escena es la cámara que nos muestre el contenido. Nuestra cámara tendrá mínimo 4 valores: el ángulo, el ratio de proporción, la distancia focal mínima y la máxima.

//El ángulo definirá la lejanía o cercanía con la que
//veremos nuestros objetos. El ratio es la proporción
//resultante entre ancho y alto. Cerca y lejos definen
//la distancia mínima y la máxima focal que se renderizará.
var angulo = 30,
 ratio = ancho / alto,
 cerca = 0.1,
 lejos = 10000;

//Declaramos la cámara
var miCamara = new THREE.PerspectiveCamera(angulo, ratio, cerca, lejos);

//Definimos la posición de la cámara en coordenadas x, y, z
miCamara.position.x = 300;
miCamara.position.y = 300;
miCamara.position.z = -300;

Por defecto la cámara estará mirando hacia el punto 0,0,0 de coordenadas. Podríamos enfocarla hacia cualquier otro punto usando el método lookAt que veremos más adelante.

Para agrecar la cámara al escenario usaremos el método add:

miEscena.add(miCamara);

Ahora creamos una luz que ilumine nuestros futuros objetos 3D. Existen varios tipos de luces, aunque mi favorita es la SpotLight, ya que es la única que permite usar sombras.

//Declaramos nuestra luz. Esta recibe como parámetro el color.
var luz = new THREE.SpotLight(0xFFFFFF);

//Indicamos una posición para nuestra luz en cada eje.
luz.position.x = 0;
luz.position.y = 200;
luz.position.z = 200;

//Por último la añadimos a la escena
miEscena.add(luz);

Añadiendo objetos

Hasta ahora lo único que hemos logrado es tener un bonito entorno 3D sin mucha utilidad. Deberíamos crear alguna figura básica para contemplar el resultado de nuestro trabajo. Incluiremos un cubo:

//Material es un material del tipo Lambert, con un color
//hexadecimal gris claro. Esta será la textura de nuestro
//objeto
var material = new THREE.MeshLambertMaterial({color: 0xebebeb});

//Nuestros elementos son mallas (mesh) a los que les aplicamos
//estructuras geométricas (en este caso un cubo) y un material
var cubo = new THREE.Mesh(new THREE.CubeGeometry(60, 60, 60), material);

//Posicionamos
cubo.position.x = 0;
cubo.position.y = 50;
cubo.position.z = 0;

//Y añadimos a la escena
miEscena.add(cubo);

Para finalizar nuestro ejemplo, sólo debemos ordenar a nuestro render que visualice lo que hemos creado:

//Con el método lookAt, enfocamos con la cámara al cubo

miCamara.lookAt(cubo.position);

//Aplicamos el método render incluyendo la escena y la cámara que vamos a visualizar
 miRender.render(miEscena, miCamara);

Para terminar

Aunque algunos navegadores aún no incluyen soporte a WebGL, está claro que el 3D se va acercando cada vez más al mundo de la web. La posibilidad de usar estos gráficos sin tener que instalar plugins adicionales (como flash, unity o silverlight) es algo realmente bueno.

Podéis ver un ejemplo completo aquí (recomiendo usar Chrome) y no dudéis en consultar cualquier duda en los comentarios o en @ajnavajas

VN:F [1.9.22_1171]
Valora esta entrada
Rating: 8.3/10 (3 votes cast)

Weekend: Webs en 3D y sliders originales

Publicado el: Un comentario

Como en varias ocasiones me he propuesto el difícil reto de mantener una constancia en las publicaciones. Actualizaré al menos una vez a la semana con un artículo o tutorial de carácter técnico de calidad como el de buenas prácticas en responsive design, filtros avanzados en CSS3 o geolocalización con HTML5.

Además, durante el fin de semana publicaré una entrada titulada “Weekend:” donde incluiré enlaces a los proyectos más interesantes que descubra durante la semana. Será nuestro apartado para la inspiración.

Podéis enviarme vuestros propios proyectos o propuestas, pero sólo publicaré aquello que realmente se salga de lo convencional. Aquí empieza nuestro primer Weekend.

Acko.net, una web en 3D

Esta es una de las webs que más me ha impresionado en los últimos meses. Es un blog con un diseño espectacular en 3D creado por Steven Wittens. Por si fuera poco sus artículos son de una calidad asombrosa. Para disfrutar del efecto tendréis que usar Chrome.

Enlace: http://acko.net/

Autor: Steven Wittens

Twitter: https://twitter.com/unconed

Acko.net

Slider efecto “papel doblado” con CSS3

Un espectacular efecto que simula una imagen que se pliega como una fotografía de verdad. Usa CSS3 y unas pocas líneas de jQuery.

Enlace: http://compilr.org/

Autor: Prashant Sharma

Twitter: https://twitter.com/CompilrORG

Efecto doblez 3D en CSS3 y jQuery

Kort, un original slider

Hakim, uno de los más activos y mejores desarrolladores front-end de interactividad que he podido descubrir a través de las redes sociales, ha creado Kort, un elemento de UI a medio camino entre el slider o grupo de thumbnails. Kort es compatible con eventos touch y dispone de diferentes efectos (y más que incluirá) de animación.

Enlace: http://lab.hakim.se/kort/

Autor: Hakim El Hattab

Twitter: https://twitter.com/hakimel

Kort

VN:F [1.9.22_1171]
Valora esta entrada
Rating: 10.0/10 (2 votes cast)

Buenas y malas prácticas de responsive design

Publicado el: 7 comentarios

El responsive design se ha consolidado como la respuesta al problema de la visualización de webs en dispositivos móviles. Sin embargo existe una diferencia entre implementar técnicamente este sistema y el diseñar de forma correcta.

Hay varias prácticas en responsive web design sobre las que deberíamos reflexionar. Este artículo se basa en mi estudio y opinión personal, lo que no indica que sean buenas o malas prácticas de diseño, pero si ofrece una perspectiva que pretende hacerte pensar antes de adaptar tus diseños.

Responsive Web Design

La cabecera

Podemos considerar que reservar el mismo espacio vertical para los contenidos de la cabecera es un error de diseño o de usabilidad.

Por ejemplo Webdesignerwall usa una cabecera tan alta que cuando, por ejemplo, realizamos una búsqueda, la web se recarga mostrando la misma cabecera ocupando el 100% del alto del dispositivo.

La cuestión no es que el usuario no vaya a hacer scroll siguiendo sus intereses, sino que le obligamos a hacerlo cuando él busca una respuesta inmediata a una acción.

La navegación

La mayoría de las webs usan un menú de navegación basado en listas. Si bien la disposición horizontal o vertical de estos menús resulta cómoda en un monitor, cuando la pantalla de nuestros dispositivos es de un tamaño pequeño (p. ej. un smartphone) usar este sistema creo que no es adecuado.

Por ejemplo en UXLondon 2011 el diseño se adaptaba mal, ocupando alto innecesario (punto anterior) y descuadrando el menú. Sólo un año después solventan el problema reescalando el tamaño de fuente del menú.

UXLondon de 2011

UXLondon de 2011

Existen varias opciones pero mis dos favoritas son:

  • - Conversión de listas (<ul><li>) a un combobox (<select><option>). Un buen ejemplo es Smashing Magazine
  • - Reducir el menú a un icono y mostrarlo bajo demanda. Ejemplos claros son Bootstrap y CSSTricks
El menú de Smashing magazine se convierte en un select

El menú de Smashing magazine se convierte en un select

Por ejemplo en 40horse.com toman otra solución elegante: bajan el menú al final de la página y dejan en cabecera sólo un enlace ancla apuntando al mismo.

Ocultar contenido

Por comodidad o por desconocimiento, hay quien oculta contenidos de la web en sus adaptaciones móviles usando display:none.

Aunque por motivos estéticos puedan obviarse elementos que aporten sólo atractivo visual, eliminar contenidos (texto, imagen, vídeo…) es negar al usuario la posibilidad acceder a la misma información que encontraría en la versión de sobremesa.

Además ocultar elementos mediante CSS no evita la carga de los mismos, por lo que a nivel técnico y de rendimiento tampoco hay excusas.

“Mobile first” no es “Mobile only”

Hacer mobile first significa hacer un diseño pensando primero en la versión adaptada a una pantalla smartphone e ir incrementando a los siguientes tamaños. Sin embargo en ocasiones esta conversión a monitores de mayor resolución se hace mal, dejando líneas de texto exageradamente largas o espacios enormes que afectan a la composición.

Retina display

Retina display ofrece resoluciones superiores a los dispositivos con pantallas tradiciones. Por eso debemos usar imágenes optimizadas para este tipo de pantallas. Una buena técnica es usar el formato JPG de alta resolución con una compresión del 40%. Así evitamos que as imágenes se pixelen demasiado.

Otra solución es usar Adaptive-Images, una solución que trabaja conjuntamente en el front y el servidor.

En resumen

El responsive design es una técnica relativamente joven, y aún no se ha madurado lo suficiente. Estos son algunos puntos que he estudiado y que veo mejorables en la mayoría de casos, pero no son todos ni tienen por que ser realmente malos para el usuario (yo mismo caigo en estos “errores”).

Nos toca a nosotros como desarrolladores y diseñadores la búsqueda de una mejor experiencia en todos los dispositivos así que os animo a experimentar y estudiar, para que saquéis vuestras propias conclusiones.

VN:F [1.9.22_1171]
Valora esta entrada
Rating: 9.2/10 (12 votes cast)

20 ejemplos de código HTML5 y CSS3

Publicado el: 7 comentarios

El pasado día 27 de septiembre tuve el placer de impartir un seminario de HTML5 y CSS3 en Córdoba organizado por el Instituto Alcántara. Muchos fueron los asistentes al evento y otros tantos los que nos vieron online. ¡A todos muchas gracias porque vosotros sois los que lo hacéis posible!

En 4 horas repasamos semántica, multimedia, acceso a dispositivos, canvas, SVG, acceso a ficheros, local storage, session storage, responsive design, nuevas opciones de CSS3

Hoy pongo a vuestra disposición la colección de los más de 20 ejemplos que usamos en el curso a cambio de un solo tweet ;) .

Logotipos de las características de HTML5

Logotipos de las características de HTML5

Para poder ejecutar todos correctamente, lo mejor es instalar un servidor local como XAMPP o MAMP y copiar todas las carpetas a htdocs.

Descargar ejemplos HTML5

VN:F [1.9.22_1171]
Valora esta entrada
Rating: 9.6/10 (13 votes cast)