Subscribe

lunes, 27 de septiembre de 2010

Secciones en HTML5: Errores encontrados en html4

Como ya he comentado en este blog varias veces, HTML 5 trae nuevos elementos que nos permiten dar formato a nuestras páginas web con un valor semántico. En este post voy a intentar describir como crear un documento con la estructura más idónea para nuestros contenidos.

¿Qué és el outline de un documento html?
Para comprender bien este post es fundamental saber qué es el outline de un documento html. El outline es lo que se puede llamar el esquema o índice del documento. No es más que la lista de secciones que forma la página web.

Estructura de un documento HTML4
La estructura de un documento, es decir, la estrutura semántica de lo que está entre las etiquetas <body> y </ body>, es fundamental para la presentación de la página al usuario. HTML4 utiliza el concepto de secciones y subsecciones de un documento para describir su estructura. Una sección está definida por una división de HTML (<div>) con elementos de encabezado (<h1>, <h2>, <h3>, <h4>, <h5> o <h6>) dentro de ella, que definen su título. Las relaciones del elemento div junto con un encabezado forman la estructura del documento y forman el outline del documento.
Para ver un ejemplo de como se forma el outline de un documento html veamos el siguiente ejemplo:
<div class="section" id="forest-elephants">
<h1>
Forest elephants</h1>
In this section, we discuss the lesser known forest elephants.
 ...this section continues...
 

<div class="subsection" id="forest-habitat">
<h2>
Habitat</h2>
Forest elephants do not live in trees but among them.
 ...this subsection continues...
 </div>
</div> 

El resultado será:
1. Forest elephants
    1.1 Habitat
Un elemento <div> no implica la creación de una nueva sección. La mera presencia de un encabezado implicará la creación de una nueva sección.
De esta forma, el siguiente ejemplo:

<H1>Forest elephants</H1>
<P>In this section, we discuss the lesser known forest elephants.
...this section continues...
<H2>Habitat</H2>
<P>Forest elephants do not live in trees but among them.
...this subsection continues... 
<H2>Diet</H2>
<H1>Mongolian gerbils</H1>

implica el siguiente esquema:
1. Forest elephants
    1.1 Habitat
    1.2 Diet
2. Mongolian gerbils

Problemas resueltos por HTML5
La definición de un documento con HTML4 implica numerosos problemas, a continuación comentamos los problemas que HTML5 ha intentado resolver respecto a los que teníamos en HTML4

  1. El uso de <div> para definir secciones semántica, sin definir valores específicos para los atributos class, hace que automatizar un algoritmo para la generación del esquema sea algo imposible ("¿Es ese <div> parte del esquema de la página, define una sección o una subsección?" O "Es sólo un <div> de presentación, sólo utilizado para dar estilo?").En otras palabras, la especificación HTML 4 es muy imprecisa a la hora de definir una nueva sección. La generación automática de esquemas es importante, especialmente para los software especializados en ayudar a personas discapacitadas, que puedan adaptar la forma en que presentan la información a los usuarios de acuerdo a la estructura del documento. HTML5 elimina la necesidad de utilizar elementos <div> para esquematizar nuestras pátinas html, introduciendo un nuevo elemento, <section>, que es el responsable de quedar este tipo de secciones en los nuevos documentos HTML.
  2. La fusión de varios documentos es difícil: la inclusión de un sub-documento en un documento principal significa cambiar el nivel del elemento de encabezados para conseguir mantener el esquema correcto. Esto se soluciona en HTML5 con los nuevos elementos de seccionamiento (<article>, <section>, <nav> y <aside>), que son siempre subsecciones de la sección anterior más cercana, independientemente de que las secciones hayan sido creadas por encabezados internos.
  3. Porque cada elemento de encabezado es parte de un esquema, no es posible describir un subtitulo o título secundario (Ej: <h1>Título</h1><h2>Subtítulo</h2> creará el esquema: 1. Título 1.1 Subtítulo) de forma que que el subtítulo dependa directamente del título. HTML 5 introduce el elemento <hgroup> que esconde todos los elementos de encabezado dentro de él bajo una misma entrada del esquema formando tan solo una sección (<hgroup><h1>Título</h1><h2>Subtítulo</h2></hgroup> creará un esquema tal que: 1. Título).
  4. En HTML 4, cada sección es parte del esquema del documento. Pero hay documentos que a menudo no son lineales. Un documento puede tener secciones especiales que contienen información que no es parte de él, a pesar de que está relacionado con el flujo principal, como un bloque de publicidad o una caja de explicación. HTML 5 introduce el elemento <aside> permitiendo que dichos tramos no sean parte del esquema principal.
  5. Una vez más, en HTML4, ya que cada sección es parte del esquema del documento, no hay manera de tener información de la sección que contenga información relacionada con todo el sitio completo y no con el documento actual, así como los logotipos, los menús, tabla de contenidos, o información de derechos de autor y avisos legales A tal efecto, HTML 5 introduce tres elementos de secciones específicas: <nav> para las colecciones de enlaces, tales como una tabla de contenido o menús, <foot> y <header> para obtener información relacionada con el sitio.
En términos más generales HTML5 aporta precisión a las características de seccionamiento y encabezado, lo que permite crear esquemas de documentos más predecibles y que pueden ser utilizados por el navegador más fácilmente para mejorar la experiencia del usuario.

Este articulo está basado en el artículo sections and outlines of an HTML5 document del Mozilla Developer Center.

domingo, 26 de septiembre de 2010

hgroup element: Un agrupador de encabezados (h1-h6)

En este post vamos a tratar uno de los nuevos elementos de html5, el hgroup. Para empezar, siempre viene bien irse a la definición del estándar:

The hgroup element is typically used to group a set of one or more h1-h6 elements — to group, for example, a section title and an accompanying subtitle.



Vale, pasemos a describir para que sirve este elemento. Como su definición indica, sirve para agrupar un conjunto de uno o más elementos de encabezado (h1-h6). Es decir, este nuevo elemento nos va a permitir agrupar en un mismo bloque un título y un subtitulo, o eslogan. Dentro de un elemento hgroup tan solo podemos introducir etiquetas de encabezado tales como h1, h2 o h3, de forma que no permite ningún otro tipo de tag en su interior.
Pero ..., porque es interesante este elemento: La respuesta está en la semantica que esta agrupación nos da. Es cierto que hasta ahora, nosotros podríamos usar sin problemas las etiquetas h1-h6, por ejemplo, a la hora de hacer una página en el que se muestra una noticia o articulo (diarios o blog por ejemplo) podríamos tener los siguientes encabezados:
  • El título de nuestro sitio web
  • El slogan utilizado en la cabecera que describe nuestro sitio web
  • El título de la noticia
  • El subtitulo de la noticia
  • El título de una sección con información adicional en la columna de la derecha.
En este momento, en versiones anteriores teníamos un problema, no eramos capaces de poder agrupar los encabezados, pero podríamos empezar a asignar encabezados de la siguiente forma:
  • H1: El título de nuestro sitio web
  • H2: El slogan utilizado en la cabecera que describe nuestro sitio web
  • H3: El título de la noticia
  • H4: El subtitulo de la noticia
  • H5: El título de una sección con información adicional en la columna de la derecha.
 Realmente esta asignación de prioridades de encabezado no es del todo correcta, principalmente porque se establece una prioridad de elementos que no es cierta ya que, según este orden, el slogan de la página es más importante que el titular de la noticia mostrada, por lo tanto, una estructura más correcta podría ser:
  • H1: El título de nuestro sitio web
  • <div>: El slogan utilizado en la cabecera que describe nuestro sitio web
  • H2: El título de la noticia
  • H3: El subtitulo de la noticia
  • H3: El título de una sección con información adicional en la columna de la derecha.
Que pasa en este momento, lo primero es que hemos cambiado el slogan, ya no es un elemento de encabezado, y el titular de la noticia ha pasado a ser el h2 de esta forma elevamos la importancia del titular de la noticia. En nuestro caso hemos cambiado también el titular de nuestra sección de la derecha pasando a ser h3 y estando al mismo nivel que el subtitulo. Otra alternativa sería directamente quitar el título de la sección de la derecha de los encabezados, pasando a ser un elemento más de la web. 

Podemos seguír buscando posibles estructuras de nuestros encabezados, pero habrá una cosa que nunca llegaremos a conseguir, el relacionar los encabezados entre ellos, es decir, un sistema externo como un rastreador no será capaz de establecer asociaciones entre estos elementos, por lo que nunca sabrá que el slogan va asociado el título de nuestro sitio web, o que el subtitulo de la noticia va ligado con el titular.
Para estos casos usaremos hgroups, pudiendo agrupar bloques nuestros encabezados:
<header>
   <hgroup><h1>Título sitio web</h1><h2>Slogan</h2></hgroup>
</header>

<header>
   <hgroup><h1>Titular de la noticia</h1><h2>Subtitulo de la noticia</h2></hgroup>
</header>

<header>
   <hgroup><h1>Titular sección secundaria</h1></hgroup>
</header>

En este caso si estamos ofreciendo información adicional, no solo que elemento es el titular principal y cual secundario, sino que además estamos diciendo que están estrechamente relacionados.
En el ejemplo he usado el elemento header del cual no he comentado nada, pero esto lo dejaremos para otro post en el que explique mejor como usar dicho elemento.






lunes, 20 de septiembre de 2010

Introducción al objeto CANVAS de HTML5

Aprovechando el blog de mi compañero Sergio, me gustaria contaros mi experiencia con el objeto CANVAS de html5.

¿Que es canvas?

Para que os hagais una idea de que es CANVAS es lo mas parecido a tener un trozo de papel en blanco encima de la mesa para poder dibujar, pintar, escribir y borrar lo que nos de la gana de forma no estructurada.

¿Por qué nace el objeto canvas?

Hasta ahora cuando un programador queria mostrar alguna animación en la pantalla una de las posibilidades que tenia era usar el plugin flash o cualquier otro plugin del estilo. Si queria crear una grafica estadistica podia llamar a alguna libreria de php que le creara la imagen en el servidor.
En cualquier caso siempre se dependia de algo externo al navegador. Asi pues era necesario que el propio navegador pudiese hacer este tipo de cosas, la solucion: CANVAS.

Basta de tanto rollos queremos verlo.

Para ver algo necesitamos poner un objeto CANVAS en nuestro html y cogerlo en javascript por ejemplo:

<html>
<head>
<script>
   function cargado(){
      var objetoCanvas = document.getElementById("html5pasoapaso");
      if(objetoCanvas.getContext){
         var contextoCanvas = objetoCanvas.getContext('2d');
         contextoCanvas.font = "20px Times New Roman";
         contextoCanvas.textAlign="center";
         contextoCanvas.fillText("Hola Mundo. HTML5 paso a paso" ,300, 150);
      }
   }
</script>
</head>
<body onLoad="cargado();">
<canvas id="html5pasoapaso" width="600" height="300"><b>Este navegador no soporta canvas.</b></canvas>
</body>
</html>

Si vuestro navegador no soporta el objeto canvas aparecera lo que pongamos dentro de la etiqueta canvas (podemos aprovechar para enlazarlo a descargar otro navegador).

Si lo soporta podremos ver el texto "Hola Mundo..."

¿Muy bien, que hemos hecho?

Pues muy simple hemos creado un objeto canvas y hemos dibujado dentro de él un texto. Si os fijais hemos esperado a que este cargado el html, ya que si hubiesemos intentado dibujar antes da un error al no existir el objeto.

¿Solo sirve para dibujar textos?

No, sirve para dibujar puntos, lineas, poligonos, circulos, curvas, textos, imagenes previamente cargadas, etc... y en un futuro (no muy lejano) poligonos en 3d con texturas.

¿Funciona en todos los navegadores?

Casi, hasta el momento funciona en todas las versiones actuales menos IE8, aunque esta confirmado que funcionará en la version 9. Esta dentro de la especificación standard de HTML5 y por lo tanto no debemos preocuparnos porque todos los navegadores lo implementaran.

¿Que se puede hacer con esto?

Practicamente todo lo que se podia hacer con flash y más, graficas, juegos, mapas y todo dinamico con javascript.

¿Por qué es mejor elegir canvas que cualquier otra opción?

Porque el trabajo duro lo hace el cliente, dejando libre al servidor, canvas usa aceleraccion por hardware lo cual lo hace muy rapido. No necesita instalar nada en el navegador. Se maneja de forma sencilla con javascript. Y un sinfin de ventajas.

Esto solo ha sido una introducción, en el proximo tutorial nos adentraremos más en el dibujo estatico con canvas.

sábado, 18 de septiembre de 2010

Nuevo colaborador para este blog

Este blog amplia su lista de autores con la incorporación al mismo de Israel Román el cual va a compartir con nosotros su experiencia en HTML5, principalmente con el uso del elemento canvas.

Israel, "Isra para los amigos", ha sido compañero mio durante varios años y espero que pueda aportar mucha información a este blog para todos vosotros.
Muy pronto tendremos un primer tutorial básico sobre canvas el cual irá ampliando con el tiempo.
Aprovecho este post para invitar a todo aquel que tenga ganas de compartir sus conocimientos sobre HTML5 a unirse a este proyecto, para ello podéis contactar conmigo a través del correo: sergio.raposo (AT) opencmshispano.com

viernes, 17 de septiembre de 2010

Nuevo ranking de navegadores de Agosto de 2010: Buenas noticias!!

En desarrolloweb.com se ha publicado un nuevo ranking de uso de navegadores de Agosto del 2010. De este nuevo ranking estaba claro que Internet Explorer sigue siendo el navegador de referencia, pero una cosa llama la atención, el tan "problemático" IE6 ha caído a la 3 posición, pasando de un 20% de uso a un 16,18%. Ahora es firefox 3.6 quien ocupa la 2 posición con un 16.80%. Poca diferencia, pero que al menos marca una tendencia a la baja de Internet Explorer 6.
Esto es una buena noticia en lo que se refiere a la implantación de HTML5, ya que es en estos navegadores donde más problemas tendremos para hacer nuestros maquetas con html5 compatibles en todos los navegadores.
Os dejo el ranking completo:
Ranking de navegadores en Agosto 2010:

   1. Microsoft Internet Explorer: 60.40%
   2. Firefox: 22.93%
   3. Chrome: 7.52%
   4. Safari: 5.16%
   5. Opera: 2.37%

Ranking de navegadores por versiones:

   1. Internet Explorer 8: 27.90%
   2. Firefox 3.6: 16.80%   
   3. Internet Explorer 6: 16.18%
   4. Internet Explorer 7: 11.89%
   5. Chrome 5: 6.77%
   6. Internet Explorer 8.0 (C.M.): 3.54%
   7. Firefox 3.5: 3.41%
   8. Safari 5.0: 2.29%
   9. Firefox 3.0: 2.04%
   10. Opera 10.x: 1.99%

lunes, 13 de septiembre de 2010

Nueva semántica con HTML 5

Una de las grandes innovaciones de HTML5 ha sido la de introducir semántica en nuestro código html de forma que de nuestra web se pueda extraer más información de la que ofrecemos mediante nuestros contenidos.
Vamos a centrarnos un poco en como trabajábamos hasta ahora, por ejemplo, a la hora de hacer un menú:
<div class="menu">
<ul>
<li><a href="seccion1.html">ir a sección 1</li>
<li><a href="seccion2.html">ir a sección 2</li>
<li><a href="seccion3.html">ir a sección 3</li>
<li><a href="seccion4.html">ir a sección 4</li>
</ul>
</div>
Esto que vemos pinta una lista de enlaces, y será el menú principal de nuestra web. Hasta el momento con html4 no podíamos diferenciar entre estos enlaces que formaban el menú de nuestra web, con un enlace externo relacionado con, por ejemplo, una noticia de nuestro portal.
La idea de html5 es darle semántica a nuestro código, es decir, dar significado al mismo. Por ejemplo, ese trozo de código con html 5 podría ser algo parecido a:



<nav>
<ul>
<li><a href="seccion1.html">ir a sección 1</li>
<li><a href="seccion2.html">ir a sección 2</li>
<li><a href="seccion3.html">ir a sección 3</li>
<li><a href="seccion4.html">ir a sección 4</li>
</ul>
</nav>
De esta forma estamos diciendo, de una forma transparente a los visitantes de nuestro sitio web, que esa lista de enlaces es nuestro menú de navegación.
Ahora la pregunta es, realmente, ¿para qué sirve todo esto?
Evidentemente, el darle significado a las cosas solo tiene sentido si luego hay alguien que es capaz de interpretar ese significado (sino sería como hablarle a los sordos por teléfono). En nuestro caso, los motivos pueden ser desde un mejor posicionamiento SEO (mientras más información le demos a los rastreadores más información podrán sacar de nuestros sitios), hasta una mejor interpretación de los lectores para ciegos u otros tipos de software similares.
La nueva lista de elementos que tenemos en html5 es:
  • section
  • nav
  • article
  • aside
  • hgroup
  • header
  • footer
  • time
  • mark

No es motivo de este post describir estos elementos, para ello ya tendremos tiempo de verlos uno a uno, pero para el que tenga más interés recomiendo el libro "Dive into html5" o el articulo de Alejandro Castillo.
Pero quizás la referencia más amplia que he encontrado de los nuevos elementos de html5 es este link. Más que una lectura un lugar de referencia a la hora de maquetar nuestros contenidos con esta versión de html.
Como siempre pasa, no todo el mundo está de acuerdo con el camino que los creadores de html5 han tenido para darle semántica a los elementos, para ver un poco más afondo esta polémica os aconsejo el articulo de John Allsopp o el comentario sobre el mismo de Julio Loayza en su blog Realidad Aparte.

viernes, 10 de septiembre de 2010

Compatibilidad de html5 con navegadores antiguos


Una de las primeras preguntas que me hice a mi mismo cuando empecé a leer cosas de html5 es, vale, todo esta muy bien, y parece que todo es más fácil y más potente y tal y tal, pero ..., ¿qué pasa con los navegadores antiguos?
El último ranking de uso de navegadores que vi por internet (de enero de 2010) ofrece la siguiente información:
1. Microsoft Internet Explorer: 62.12%
2. Firefox: 24.43%
3. Chrome: 5.22%
4. Safari: 4.53%
5. Opera: 2.38%

Mientras que por versiones:

1. Internet Explorer 8: 22.37%
2. Internet Explorer 6: 20.00%
3 Firefox 3.5: 17.08%
4. Internet Explorer 7: 14.53%
5. Firefox 3.0: 5.24%
6. Chrome 3: 3.85%
7. Safari 4.0: 3,57%
8. IE8 Compatibility Mode: 2.80%
9. Opera 10: 1.65%
10 Chrome 4.0 1.24
11. Firefox 3.6 : 1.15
12 Firefox 2.0: 0.78%

Para los que no sabéis del tema, en Internet Explorer se espera que a partir de la versión 9 sea compatible con algunas funcionalidades nuevas de html5, en las anteriores no hay ningún tipo de compatibilidad. En lo que respecta a Chrome, Firefox, Safari y Opera, la cosa cambia, desde hace tiempo vienen dando soperte a algunas características de html5, y cada nueva versión la lista de funcionalidades soportadas aumenta. 

Pero que hacemos con esa mayoría de usuarios que todavía usan versiones antiguas de Internet Explorer (de verdad que me mata que IE6 esté en segundo lugar con un 20%!!!!!) o versiones antiguas del resto de navegadores (mucho menos como podéis ver).

Pues era evidente que esta pregunta no solo me la he planteado yo, sino que desde el principio, los promotores de esta versión han ido pensando como hacerlo compatible.

Para ello se ha creado un javascript llamado Modernizr el cual nos ofrece una serie de funciones que detecta si el navegador es compatible con cada una de las nuevas funcionalidades de HTML 5.
Esto me recuerda mucho a cuando teníamos los problemas para hacer accesible nuestros portales, la eterna lucha con el javascript y el ofrecer alternativas a aquellos navegadores que no tienen javascript.

Pues eso, tenemos la opción de preguntar si la opción que queremos usar es compatible con el navegador cliente, si lo es, pues todo perfecto, en caso contrario mostramos una alternativa.
Por ejemplo, para saber si nuestro navegador interpreta los objetos canvas:

if (Modernizr.canvas) {
// pintamos el objeto canvas
} else {
// hacemos por ejemplo una llamada a un flash o imagen alternativa
}


Para el que quiera profundizar más en este tema recomiendo el capitulo 2 del libro “Dive Into HTML 5”.

Existe otra buena herramienta llamada html5.js. Este javascript se utiliza para hacer compatibles las nuevas etiquetas de html5 como header, footer, canvas, video, ..., en las versiones anteriores a la 9 del navegador Internet Explorer.

El script es el siguiente:

<!--[if lt IE 9]>
<script>
var e = ("abbr,article,aside,audio,canvas,datalist,details," +
"figure,footer,header,hgroup,mark,menu,meter,nav,output," +
"progress,section,time,video").split(',');
for (var i = 0; i < e.length; i++) {
document.createElement(e[i]);
}
</script>
<![endif]-->

Básicamente lo que hace es detectar si el navegador es un Internet Explorer anterior a la versión 9, y si es el caso crear los elementos propios de html5 en el objeto document (darlos de alta en el DOM de la página).
Para entender este script hay que profundizar en como se comportan los navegadores ante elementos desconocidos. 

La mayoría de los navegadores (firefox, safari, opera, chrome), cuando se encuentran un elemento que desconocen, lo cargan en el DOM marcándolo como elemento desconocido. Esto nos permite que, aun siendo un elemento desconocido por el navegador, podremos darle estilo mediante CSS sin problemas ya que es un elemento activo del DOM, y por tanto podremos trabajar con él sin problemas.

En los IE el criterio es distinto, en este caso cuando se encuentra un elemento desconocido pues lo ignora, y ni siquiera lo mete en el DOM. El problema en este caso es que, al ser ignorado, no podremos darle estilos ni poder operar con él.

En este último caso, el script toma un papel fundamental, lo que hace es crear a mano los elementos html5 en el DOM. En este momento, cuando IE se encuentra uno de esos elementos ya no lo considera como un elemento desconocido y lo introduce en el DOM. Esto hace que el comportamiento sea el mismo que en el resto de navegadores. Tener en cuenta que, para que todo esto funcione, el script debe iniciarse en el head de nuestra página, nunca en el footer ya que en este caso ya sería demasiado tarde.

Nuevamente, recomiendo para aquellos que quieran saber más del tema la lectura del libro “Dive Into HTML 5” (Capitulo 3).

Cuando descubra nuevas técnicas de compatibilidad entre html5 y navegadores antiguos os la seguiré contando.

miércoles, 1 de septiembre de 2010

HTML 5 - Mis inicios


Recientemente he empezado a investigar sobre lo que parece será el futuro del desarrollo web, HTML 5, una nueva versión de este lenguaje de marcado que, si es cierto lo que se dice de él, nos va a simplificar mucho la maquetación web junto con CSS3.

Pero vayamos poco a poco. Antes de empezar quiero dejar claro una cosa, yo no me considero un experto en maquetación (de hecho no es mi especialidad), y por supuesto en lo que respecta a html5 parto de cero, es decir, estos son mis primeros pasos y mi intención es compartir con todos vosotros mi experiencia durante esta fase de aprendizaje.

Para empezar, lo de siempre, consultas a nuestro buscador favorito, y a buscar el tiempo para leer todo lo que encontramos. Os dejo unos cuantos links interesantes:

http://html5demos.com/
http://www.htmlcinco.com/
http://www.anexom.es/tecnologia/diseno-web/las-novedades-de-html5-i/
http://www.desarrolloweb.com/articulos/que-es-html5.html

y muchos más .... No olviden seguir buscando en internet más información (y si encuentran algún enlace que merezca la pena me lo pasáis y lo publicamos todos juntos).

Pero, sinceramente, la mejor lectura que he encontrado y la que me tiene totalmente enganchado es el libro “Dive Into HTML 5”. Un libro bajo mi punto de vista muy bueno (ojo, todavía estoy empezandolo, es una impresión inicial) y gratuito (lo que también ayuda bastante).

Mi intención con este blog es comentar todo lo que me parezca interesante sobre html5 durante mi lectura de este libro u otra información que me encuentre.

Espero que esta información le sea útil a mucha gente, y no olviden que seguramente como vosotros, estoy en proceso de aprendizaje, por lo que espero me disculpen si encuentran algún error grave.

Lo primero que quiero compartir, que me llamó mucho la atención cuando lo leí, es que HTML 5 realmente no es una gran cosa, es decir, no es nada más que un conjunto de nuevas funcionalidades que vienen a completar lo que actuamente tenemos. Y muy importante, es una extensión de HTML 4 y totalmente compatible con esa versión, es decir, todos nuestros desarrollos basados en versiones anteriores no se van a ver afectados. Ya podemos ir respirando tranquilos, para los que lo deseen pueden seguir trabajando tal cual se ha estado haciendo hasta el momento sin problemas.

Pronto empezaremos a descubrir que encierra HTML 5.