HTML 5: los “malditos” iframes

Aunque es uno de los elementos que se utilizan todavía, la verdad es que el consumo que provoca en los navegadores es tan alto que si nos paramos a pensar fríamente, no es nada recomendable su uso… aún así, el HTML 5 todavía lo mantiene ya que para algunas cosas sigue siento un elemento valioso (aunque, como digo, yo no lo recomiendo, ni yo ni Google ni Yahoo!…)

iframe

El elemento iframe básicamente permite integrar lo que se podría decir como una ventana de navegador dentro de otra, o sea, una página dentro de otra, en un espacio definido. De esta forma podemos abrir el contenido de una página propia o externa dentro de una parte de la que actualmente visualizamos.

El principal atributo que lo acompaña es el src que como en muchos otros elementos, hace referencia a una dirección URL, que será la página que abrirá dentro. También se le puede indicar el srcdoc que hace referencia al nivel de profundidad que tendrá el elemento. El atributo name hará referencia al nombre del elemento (por si hay que acceder a él a través del DOM).

Uno de los mayores problemas que tienen los iframes es la seguridad que puede comportar abrir “cualquier” elemento externo a nuestro sitio. Es por esto que existe el atributo sandbox (al que por ejemplo ya da soporte Google Chrome) y que restringe algunas acciones. Algunos de los valores que puede generar excepciones son:

  • allow-same-origin
  • allow-top-navigation
  • allow-forms
  • allow-scripts

<iframe sandbox="allow-same-origin allow-forms allow-scripts" src="http://www.example.com/incrustado.html"></iframe>

Otro atributo que parece muy interesante es seamless. Con este atributo le decimos al navegador que “renderice” el contenido del iframe como si fuera parte del sitio. Esto implicará que haya algunas restricciones y ampliaciones, como que el contenido ha de estar en el mismo dominio, que los CSS que haya en el iframe pasarán a formar parte del CSS principal…

Para acabar, y como es lógico, hemos de indicar el tamaño de la ventana, y para ello utilizaremos los atributos width y height, que indicarán el ancho y alto de la ventana.

Sin duda el elemento iframe va a ser uno de los más criticados por los buscadores y optimizadores de la red, pero parece que va a seguir aquí durante bastante tiempo.

Open Standard Media (OSM) Player

Uno de los poyos que siempre me he encontrado a la hora de poner un reproductor de vídeo en la web es que en la mayoría de casos sólo aceptaba vídeos flash (.flv). La cosa es que con el HTML 5 y con jQuery se han montado un reproductor llamado Open Standard Media que tiene muy buena pinta, es código abierto y gratuito.

Entre otras cosas, permite el uso de HTML 5, soporta los nuevos elementos audio y video del HTML 5 con los formatos estándar, para el resto de formatos monta un reproductor Flash, se le puede cambiar el diseño de una forma sencilla gracias al uso de ThemeRoller, permite la integraciónd e vídeos de Vimeo y Youtube (simplemente indicando la URL), tiene la opción de listados de vídeos.

La instalación es muy sencilla, ya que sólo hay que añadir un par de JavaScript en la cabecera, poner el código básico del reproductor, y al final de la página, puedes incorporar un listado de los vídeos o una llamada a un XML que los tenga. Aun así, creo que la opción más sencilla es la de usar la librería en PHP, que con unas pocas líneas funcionaría:

<?php
include("OSMPlayer.php");
$player = new OSMPlayer(array(
  'file' => 'http://www.mysite.com/files/myvideo.flv',
  'image' => 'http://www.mysite.com/files/myimage.jpg',
  'disablePlaylist' => true
));
?>
<html>
  <head>
    <title>Open Standard Media (OSM) Player: PHP Demo</title>
    <script type="text/javascript" src="jquery-ui/js/jquery.js"></script>
<?php
print $player->getHeader();
?>
  </head>
  <body>
    <h2>Open Standard Media (OSM) Player</h2><br/>
<?php
print $player->getPlayer();
?>
  </body>
</html>

Con esto tendríamos un reproductor sencillo, aunque también se puede complicar un poco si le añadimos una lista de reproducción que nos permita visualizar decenas de vídeos… o si queremos modificar algunos parámetros, aquí está la lista de todos los disponibles…

font dragr: prueba tus fuentes sólo arrastrándolas

Aunque hago un parón en cuanto a publicar de HTML 5, he encontrado esta herramienta, web o como queramos llamarlo que tiene su gracia, sobretodo si te dedicas a maquetar o eres diseñador.

El sitio se llama font dragr y básicamente es una página en la que arrastrando un fichero de tipo de letra -truetype (ttf), opentype (otf), scalable vector graphics (svg) o Web Open Font Format (WOFF)- te actualizará los textos de la página con esa fuente. Además, el contenido original de la página es editable, por lo que puedes poner un texto de ejemplo y así ver cómo quedaría directamente en el navegador web.

Otro detalle que ya avisan es que lo de arrastrar sólo funciona con in Firefox 3.6, que es, en estos momentos, el único que soporta esas funcionalidades de HTML5. Entre las cosas que se usan encontramos el uso del sitio en modo offline, la API de arrastrar y soltar, la de gestión de ficheros, la de editar contenidos, la del uso del @font-face, gradientes, bordes redondeados, sombras…

HTML 5: formularios, el elemento 2.0 (parte 2)

Hace unos días explicaba principalmente el elemento input de los formularios en HTML 5 y hoy toca el resto de elementos. Y es que no es moco de pavo todo lo que hay.

fieldset

Este elemento se utiliza para agrupar varios elementos de un formulario… si un formulario tiene varios “bloques” o contenidos distintos, se deberían agrupar con este elemento. Si se le indica el atributo disabled entonces los elementos contenidos en él también lo están. También se le puede indicar el atributo form que hace referencia al formulario padre, y el atributo name, para acceder externamente con un nombre único.

legend

Si se le quiere poner una cabecera descriptiva a cada uno de los fieldset, el legend es el elemento que debemos utilizar. Con este texto podremos poner una cabecera a cada uno de los bloques que pueden formar un formulario compuesto de muchos contenidos.

label

Los label son los textos que acompañan a un elemento, como puede ser un input y que vienen a decir qué es de lo que se habla (que no una ayuda sobe el campo en sí). Este elemento puede tener el atributo for que se usaría para hacer referencia al name del elemento.

<label><input type="checkbox" name="lost"> Lost</label<

button

Es simplemente un botón, y es que los button son los elementos que permiten acabar de interactuar con el formulario. Botones hay de 3 tipos que se indican con el atributo type:

  • submit: que permite que la información del formulario se envíe.
  • reset: que deja el formulario en su estado inicial.
  • button: que simplemente, no hace nada.

El atributo form indica el nombre del formulario al que hace referencia, y el name es el nombre que le asignamos al propio botón. Además de estos, también está disponible el atributo disabled que básicamente hace que el botón no pueda ejecutarse, y de esta forma queda limitado a una serie de verificaciones previas. Con el atributo autofocus el sistema automáticamente mandará el foco al botón.

select

Los select hacen referencia a un listado de opciones. Esta selección por defecto es simple (sólo un elemento) aunque si se le añade el atributo booleano multiple podremos seleccionar más de una opción. De la selección se elegirá uno o más option que son los elementos que se usan para indicar cada una de las opciones.

El atributo size permite definir la cantidad de opciones visibles por defecto, que puede ser una o más. En el caso de que haya el atributo multiple activo, por defecto habrá 4.

<select name="allowedunits" multiple size="3">
  <option value="1" selected>Miner</option>
  <option value="2" selected>Puffer</option>
  <option value="3">Snipey</option>
  <option value="4">Max</option>
  <option value="5" selected>Firebot</option>
</select>

optgroup

Como ya el nombre deja ver, optgroup representa una agrupación de elementos option que tienen una agrupación común. Aunque en sí no tiene mucho significado, básicamente es eso, una agrupación de elementos de una misma temática, tipo o como se le quiera llamar, pero poco más.

Puede llevar varios atributos, como el disabled si queremos desactivar todas las opciones contenidas, o el label, que será el nombre que tenga ese grupo de cara a los usuarios.

option

El elemento option puede formar parte de un select, de un optgroup o de un datalist y básicamente es una de las opciones a elegir de entre unas cuantas. Al igual que muchos otros elementos, puede estar disabled y por tanto no ser utilizada en la selección.

Por norma general suele ir acompañado de un valor value que será lo que realmente se mande como información a la hora de enviar o trabajar con el formulario. Como información añadida podemos usar el label, que podría tratarse como el título o mini-descripción de esa opción. Por supuesto, otro de los atributos importantes es el selected que se usa en aquellos momentos en que queremos tener elementos seleccionados por defecto.

datalist

El elemento datalist está pensado para ser un sistema de “sugerencias”. Básicamente es un contenedor en el que se incluyen distintas opciones que corresponderían a un campo. De esta forma, si alguien empeiza a escribir en un input y coindice de alguna manera con alguno de los contenidos, le aparecerá como una sugerencia.

<input type="text" name="favcharacter" list="characters">
  <datalist id="characters">
    <option value="Homer Simpson">
    <option value="Bart">
    <option value="Fred Flinstone">
  </datalist>

textarea

Un textarea es un elemento de entrada de datos libre y multilínea, es decir, un sitio donde escribir “lo que te da la gana”. Este elemento tiene bastantes atributos que le permiten hacer algunas cosas.

Para empezar podemos aplicarle el elemento readonly que básicamente impide que los usuarios puedan cambiar el contenido del elemento. Para indicar el tamaño del elemento podremos usar los atributos cols y rows que indican la cantidad de caracteres por columna y filas que se permiten; por defecto hay 20 caracteres por columna y 2 filas. Además, para que no se corten, o sí, las palabras que se puedan incluir en este elemento, podemos usar el wrap indicando el valor soft (por defecto) o hard con el qe controlamos saltos de línea y similares. En el caso de indicar un valor de maxlength le estamos diciendo al textarea que hay un límite máximo de caracteres, y que a partir del límite no ha de dejar continuar. SI queremos que el usuario tenga que rellenar obligatoriamente el campo, hay que indicarle el valor booleano required; también es posible deshabilitarlo con un disabled.

Un detalle interesante, es que, al igual que el input, este elemento también permite el atributo placeholder, que es una pequeña ayuda (de unas pocas palabras) que explique qué ha de contener el elemento.

keygen

Sin duda uno de los elementos más enigmáticos del HTML 5 es el elemento keygen. Este elemento básicamente lo que hace es generar una clave privada y una pública para que el navegador y el servidor puedan comunicarse. La clave la genera automáticamente el navegador, y supongo que mediante AJAX o algún otro sistema se podrá mantener una “conversación” entre el navegador y servidor… A ver si encuentro algún ejemplo de uso, porque no he visto nada todavía.

Permite algunos atributos como challenge o el keytype que es el tipo de codificación de la clave, que por ahora sólo acepta un valor que es rsa.

output

Otro de los nuevos elementos es el output… y es que si hay input, ¿por que no output? Y básicamente es eso… los inputs son los “cajetines” para escribir cosas, y en alguna ocasión, los propios inputs han servidor como “cajetín” de cálculo o similar… pues esto es un “cajetín” que se usa como resultado de algo.

<form onsubmit="return false">
  <input name=a type=number step=any> +
  <input name=b type=number step=any> =
  <output onforminput="value = a.valueAsNumber + b.valueAsNumber"></output>
</form>

progress

Este es uno de los elementos que todavía no queda claro si estará en la versión final de HTML 5 o se quedará por el camino, como ya ha ocurrido con algún otro en versiones anteriores. Y es que progress viene a indicar el proceso que lleva una tarea, como si de una barra de progreso se tratase… y está pendiente de aprobación porque no existe nada que haga referencia la tarea en sí.

El elemento tiene dos posibles parámetros que son value y max que indicarían el valor a mostrar y el valor máximo que puede tener, partiendo de la base de que va entre 0 y max.

meter

Y el elemento que mataría el progress es el meter, que hace lo mismo pero diferente… básicamente es un sistema que permite crear “escalas” de cosas, independientemente de lo que sea. Un ejemplo podría ser el tamaño ocupado o libre de un disco duro.

Este elemento tiene bastantes atributos, y casi diría que hay que ponerlos todos:

  • value: Es el valor actual de todos los posibles.
  • min: El valor mínimo posible para el rango. Por defecto es 0.0
  • max: El valor máximo posible para el rango. Por defecto es 1.0
  • low: Es el valor por el que, por debajo, sería “un problema”. Por defecto es el mismo que min.
  • high: Es el valor por el que, por encima, sería “un problema”. Por defecto es el mismo que max.
  • optimum: Es el valor óptimo para la medidicón. Por defecto es la media entre min y max, o 0.5

Algunos ejemplos:

Storage space usage: <meter value=6 max=8>6 blocks used (out of 8 total)</meter>

Voter turnout: <meter value=0.75><img alt="75%" src="graph75.png"></meter>

Tickets sold: <meter min="0" max="100" value="75"></meter>

<dl>
<dt>Radius: <dd><meter min=0 max=20 value=12>12cm</meter>
<dt>Height: <dd><meter min=0 max=10 value=2>2cm</meter>
</dl>

Y hasta aquí lo que corresponde a los formularios del HTML 5. Algunas novedades interesantes sobretodo pensadas para lo que en el futuro puede traernos “la web 2.0″ e incluso, si hace falta la 2.5 o la 3, quién sabe…

HTML 5: formularios, el elemento 2.0 (parte 1)

Si hay un elemento que ha evolucionado enormemente con respecto a las versiones anteriores sin duda es el de los formularios. Y es que en estos últimos 10 años de ha construido lo que se llama web 2.0 (también conocido como yo ya había visto eBay en el 98 y era una web 1.0, así que alguien me está tomando el pelo). En fin, no quiero discutir sobre cómo se llaman las cosas en internet, porque la gente las llama como le da la gana.

Aunque sí que es cierto que hay algo que no se puede obviar, y es que el hecho de que los sitios web sean más interactivos con el usuarios ha hecho que las necesidades de diferencias y complementar algunos elementos y atributos crezcan.

Y esa es una de las razones por las que la parte de formularios hay que dividirla en 2 partes, porque hay algunos elementos que son “casi interminables”… Comenzamos.

form

El elemento form es el que agrupa cada uno de los formularios. Actúa como contenedor y a la vez permite que se ejecuten las entradas de datos. Tiene algunos atributos que permiten que el usuario interactúe de formas distintas:

  • accept-charset: Indica el MIME-type con el que se mandará la información del formulario.
  • action: Indica la dirección URL a la que se enviará la información del formulario.
  • autocomplete: Permite sólo on y off (por defecto on) y permite que el navegador rellene aquellos campos input de forma automática
  • enctype: Indica la codificación de la información que se enviará. Tiene 3 posibles estados: application/x-www-form-urlencoded (por defecto si no se indica), multipart/form-data y text/plain.
  • method: Indica el tipo de cabecera por el que se enviará la información. Permite 4 estados: GET (por defecto), POST, PUT y DELETE.
  • name: Es el nombre del formulario. Si se indica no puede estar vacío, pero puede no ponerse (y el sistema lo creará automáticamente de forma interna).
  • novalidate: Un atributo booleano que indica si la información se validará o no.
  • target: Al igual que los enlaces, permite los valores: _blank, _self (por defecto), _parent o _top.

input

El principal elemento para la introducción de datos sigue siendo el input, y en esta ocasión llega con muchísimos atributos y con muchos tipos de entradas.

El principal atributo del sistema de entrada de datos es el type. Hasta ahora los valores más habituales eran hidden o text que básicamente eran textos alfanuméricos, pero ahora eso ha cambiado, y la lista de tipos es bastante grande:

  • hidden: Es un contenido oculto que suele corresponder a una serie de caracteres alfanuméricos. Este valor no puede ser manipulado por el usuario.
  • text: Campo de texto que no permite saltos de línea. Si se añade el atributo value será el contenido original del campo.
  • search: Campo de texto que no permite saltos de línea y que indica que será usado como contenido de una búsqueda. Si se añade el atributo value será el contenido original del campo.
  • tel: Campo de texto que indica un número de teléfono. No tiene ningún formato en particular, por lo que se pueden incluir espacios o guiones, por ejemplo.
  • url: Campo de texto en el que se pueden incluir direcciones URL absolutas. Se puede hacer una especie de autosuggest junto a otros elementos (ver ejemplo más abajo).
  • email: Campo de texto que permite incluir correo electrónico. Principalmente si se incluye el atributo value permite una única dirección, y si es el multiple puede incluir varias.
  • password: Campo de texto, pero que aparece oculto para el usuario y así proteger la información.
  • datetime: Permite una fecha y hora válida en un formato como 0037-12-13T00:00Z, 1979-10-14T12:00:00.001-04:00 o 8592-01-01T02:09+02:09. Si se indica un número, serán los milisegundos transcurridos desde el 01/01/1970.
  • date: Permite indicar una fecha. El atributo value indica la fecha en cuestión y el min y max los límites del rango de fecha. El atributo step marca los milisegundos (por defecto 1 día) entre un valor y otro. El formato sería 2010-03-09.
  • month: Permite indicar un mes. Tiene los mismos atributos que date. El formato sería 2010-03.
  • week: Permite indicar la semana del año. Tiene los mismos atributos que date. El formato sería 2010-W03 (tercera semana).
  • time: Permite indicar una hora. Tiene los mismos atributos que date. El formato sería 17:23 y opcionalmente los segundos, 17:23:59.
  • datetime-local: Es igual que el datetime pero no permite indicar ningún tipo de desfase horario.
  • number: Representa un valor numérico. Este puede ser negativo (si empieza con un guión -), seguido de un número y con decimales (si se le indica un punto .) y para acabar, un exponente, empezando con una letra e, seguida de un símbolo positivo + o negativo – y la cantidad exponencial. Un ejemplo completo sería: -12345.678e+90.
  • range: El tipo range permite un slide en donde el número (valor) no es lo 100% importante, sino que es el formato en el que se muestra. Un poco más abajo, un ejemplo.
  • color: Este elemento representa un color. El formato es del estilo #A0F59E (o sea, el RGB).
  • checkbox: Este elemento ya existía, y es el que permite elegir unas cuantas opciones de un grupo de ellas.
  • radio: Al igual que el anterior, permite elegir de un grupo, pero sólo una de las opciones.
  • file: Éste permite la opción de subir archivos. Con él se pueden seleccionar archivos que luego serán enviados al sistema. Si se le indica el atributo multiple se podrán seleccionar varios ficheros a la vez. Además, si se indica el atributo accept se puede limitar ficheros según su MIME-type, por ejemplo con audio/*, video/* o image/*.
  • submit: Este es el botón que permite el envío de información al sistema. Puede ir acompañado de otros atributos que hacen que “ese botón” haga cosas que no son las generales del formulario. Los parámetros son: formaction (que hace ese botón), formenctype (la codificación), formmethod (la forma de envío), formnovalidate (la validación) y formtarget (en qué “ventana” se abre).
  • image: Es igual que el submit pero permite ser una imagen en vez de un botón en sí. Para ello ha de ir acompañado del atributo src que indica la dirección URL de la imagen.
  • reset: Otro botón que si pulsas deja los valores del formulario en su valor inicial.
  • button: Un botón que “no hace nada”. Suele utilizarse habitualmente con funcione JavaScript que son los que realizan la acción.

Ejemplo de autosuggest gracias al type=”url”

<input type="url" name="location" list="urls">
<datalist id="urls">
  <option label="MIME: Format of Internet Message Bodies" value="http://www.ietf.org/rfc/rfc2045">
  <option label="HTML 4.01 Specification" value="http://www.w3.org/TR/html4/">
  <option label="Form Controls" value="http://www.w3.org/TR/xforms/slice8.html#ui-commonelems-hint">
  <option label="Scalable Vector Graphics (SVG) 1.1 Specification" value="http://www.w3.org/TR/SVG/">
  <option label="Feature Sets - SVG 1.1 - 20030114" value="http://www.w3.org/TR/SVG/feature.html">
  <option label="The Single UNIX Specification, Version 3" value="http://www.unix-systems.org/version3/">
</datalist>

que quedaría algo como:

Ejemplo de range

<input type="range" min="-100" max="100" value="0" step="10" name="power" list="powers">
<datalist id="powers">
  <option value="0">
  <option value="-30">
  <option value="30">
  <option value="+60">
</datalist>

que quedaría algo como:

Además de los distintos tipos que puede haber, existen distintos atributos, como ya he ido comentando en algunos de los tipos…

  • autocomplete: Permite el estado on y off y hace que el campo se rellene o no automáticamente si el sistema es capaz de identificar la información.
  • list: Es el valor de una lista identificada por el datalist. Con esto se pueden crear sistema de “autosugerencias”.
  • readonly: Es un valor booleano, y permite o no que el usuario pueda modificar el contenido.
  • size: Es el número de caracteres que se muestran por pantalla.
  • required: Otro atributo booleano que indica que ese elemento ha de incluirse obligatoriamente.
  • multiple: Permite que algunos elementos seleccionen más de un valor. Un ejemplo más adelante.
  • maxlength: Es la cantidad máxima de caracteres que se permite.
  • pattern: Indica el formato de contenido que tiene que tener… Por ejemplo: [0-9][A-Z]{3} sería un número seguido de 3 letras en mayúsculas.
  • min y max: Indican los valores mínimo y máximo que se permiten.
  • step: Indica el valor de paso cuando hay elementos que permiten saltar.
  • placeholder: Es un “ejemplo” del valor que se puede incluir.

Ejemplo de selección múltiple de cuentas de correo:

<label>Cc: <input type=email multiple name=cc list=contacts></label>
<datalist id="contacts">
  <option value="hedral@damowmow.com">
  <option value="pillar@example.com">
  <option value="astrophy@cute.example">
  <option value="astronomy@science.example.org">
</datalist>

Que se mostrará de una forma similar a esto:

Ahora sólo queda el resto de elementos que puede incorporar en un formulario, pero eso será otro día.

CSS Reset para HTML 5

Llevo varios días intentando encontrar un CSS Reset pero para HTML 5. Hasta ahora usaba el de Yahoo! YUI, pero incluso la versión 3 no da soporte a las nuevas etiquetas. Por eso me he decidido a revisar un poco los elementos que hay hasta ahora e intentar ofrecer una primera versión del CSS Reset para HTML 5.

html{color:#000;background:#FFF;}body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,code,form,fieldset,legend,input,button,textarea,p,blockquote,th,td,hr,iframe,embed,object,legend{margin:0;padding:0;}table{border-collapse:collapse;border-spacing:0;}fieldset,img{border:0;}address,caption,cite,code,dfn,em,strong,th,var,optgroup,a,small,q,time,samp,kbd,sup,sub,mark,col,colgroup,tbody,thead,tfoot,tr,td,th,label,input,button,textarea,select,optgroup,option,label,output{font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;font-variant:normal;}i{font-style:italic;}b{font-weight:bold;}del,ins{text-decoration:none;}li{list-style:none;}caption,th{text-align:left;}h1,h2,h3,h4,h5,h6{font-size:100%;font-weight:normal;}q:before,q:after{content:'';}abbr,acronym{border:0;font-variant:normal;}sup{vertical-align:baseline;}sub{vertical-align:baseline;}legend{color:#000;}input,button,textarea,select{*font-size:100%;}header,article,section,aside,footer,nav,hgroup,address,figure,figcaption,video,audio,legend,datalist,optgroup,details,summary,command,menu{display:block;margin:0;padding:0;}

Se puede descargar el CSS Reset para HTML 5.

NOTA: Que conste que es una propuesta personal, basándome en la mayoría de los elementos que propone el HTML 5.

ACTUALIZACIÓN: Me han pasado este de Rich Clark.

HTML 5: las tablas… ¿de multiplicar?

Y aquí un día más para seguir hablando de HTML 5. Por cierto he creado una sección especial en la que he recopilado todas las entradas sobre ello.

En esta ocasión toca hablar de las tablas, y es que, aunque las tablas han sido un elemento que parecía que iba a desaparecer, no es así aunque sí que se le quiere dar un uso muy concreto. Y es que las tablas representan información en una o más dimensiones que se pueden representar en forma de tabla (qué frase más retroalimentada…).

Lo que sí queda muy escrito es que las tablas no pueden ser parte del layout de un sitio web.

table

Las table son un elemento muy interesante ya que disponen de muchos subelementos, y son un contenedor de información en sí que hay que tratar de forma muy distinta al de un texto corriente.

Además, sus elementos han de estar en un orden determinado, ya que sino no se pueden formar correctamente e implican una lentitud excesiva al tener que crearlas por parte sobre todo de los navegadores.

Así, en este orden, puede haber un elemento caption seguido de cero o más colgroup, seguidos opcionalmente de un thead, seguido opcionalmente de un tfoot, seguido de cero o más tbody o uno o más tr seguido opcionalmente de un tfoot (aunque sólo puede haber uno en toda la tabla como máximo).

Esto, como veis, hace que construir una tabla no sea algo trivial, sino que requiere de un buen hacer por parte de los creadores. También hay que tener en cuenta que no puede haber filas o columnas en blanco. Además, para que se comprendan mejor, se solicita a los editores que incluyan una cabecera en la tabla, para su mejor comprensión. De todas formas, lo mejor es hacer la tabla tan sencilla que no hagan falta muchas explicaciones.

El único atributo que soporta el elemento table es el summary, que será muy parecido a la cabecera explicativa de la tabla en sí. Aun esto, es interesante indicar en este atributo la interpretación de la tabla o cómo hacer un uso de ella, quedando la cabecera como el título y el summary como la explicación de la tabla, por ejemplo, para alguien que no pudiera leerla.

caption

El caption es el primer elemento que puede haber en una tabla y representa el título de dicha tabla. En el caso en el que la tabla está dentro de un elemento figure, entonces el texto del título cambiará del caption al figcaption.

El título ha de ser lo más breve posible, pero lo suficientemente identificativo como para poder explicar de qué va el contenido de la tabla en sí.

colgroup

El elemento colgroup representa la agrupación de una o más columnas de una tabla. En caso de que no incluya elementos col, sí que deberá incorporar el atributo span que indique la cantidad, siempre mayor que cero.

col

En el caso en que un colgroup no tenga el atributo span, utilizaremos col para indicar cada una de las columnas. De igual manera que el anterior, puede incorporar el atributo span.

thead

El elemento thead representa el bloque de filas que contienen la cabecera (nombre) de las distintas columnas de la tabla.

tbody

El elemento tbody representa un bloque de filas que contienen la información principal de la tabla. En resumen, es el bloque que agrupa las filas principales (que no son cabecera o pie).

tfoot

El elemento tfoot representa el bloque de filas que contienen el pie (resultados, por ejemplo) de las distintas columnas de la tabla.

tr

Los tr son las distintas filas que puede tener una tabla. Cada una de ellas ha de tener cero o más celdas (td o th).

td

Cada una de las td son las celdas de una tabla. Han de formar parte de un elemento tr (fila).

Puede tener distintos atributos como colspan, rowspan y headers.

  • colspan: indica el número de columnas en las que se divide esa celda.
  • rowspan: indica el número de filas en las que se divide esa celda.
  • headers: este elemento ha de contener el identificador de un elemento th que forma parte de la misma tabla. Con esto se pueden relacionar los datos de la tabla y así interpretarlos.

th

Al igual que los td, los th hacen la misma funcionalidad pero indican el nombre del contenido de la fila, o su valor principal destacado.

Además de disponer de los mismos elementos que las celdas normales, puede incluir el atributo scope. Este atributo puede tener 4 posibles valores:

  • row: es el indicador de todos los elementos de esa fila.
  • col: es el indicador de todos los elementos de esa columna.
  • rowgroup: es el indicador de esa fila y de las siguientes integradas en el contenedor (que suele ser un tbody).
  • colgroup: es el indicador de esa columna y de las siguientes integradas en el contenedor (que suele ser un colgroup).

Ejemplo 1


<table>
  <caption>Specification values: <b>Steel</b>, <b>Castings</b>, Ann. A.S.T.M. A27-16, Class B;* P max. 0.06; S max. 0.05.</caption>
  <thead>
    <tr>
      <th rowspan=2>Grade.</th>
      <th rowspan=2>Yield Point.</th>
      <th colspan=2>Ultimate tensile strength</th>
      <th rowspan=2>Per cent elong. 50.8mm or 2 in.</th>
      <th rowspan=2>Per cent reduct. area.</th>
    </tr>
    <tr>
      <th>kg/mm<sup>2</sup></th>
      <th>lb/in<sup>2</sup></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Hard</td>
      <td>0.45 ultimate</td>
      <td>56.2</td>
      <td>80,000</td>
      <td>15</td>
      <td>20</td>
    </tr>
    <tr>
      <td>Medium</td>
      <td>0.45 ultimate</td>
      <td>49.2</td>
      <td>70,000</td>
      <td>18</td>
      <td>25</td>
    </tr>
    <tr>
      <td>Soft</td>
      <td>0.45 ultimate</td>
      <td>42.2</td>
      <td>60,000</td>
      <td>22</td>
      <td>30</td>
    </tr>
  </tbody>
</table>

Specification values: Steel, Castings, Ann. A.S.T.M. A27-16, Class B;* P max. 0.06; S max. 0.05.
Grade.Yield Point.Ultimate tensile strengthPer cent elong. 50.8mm or 2 in.Per cent reduct. area.
kg/mm2lb/in2
Hard0.45 ultimate56.280,0001520
Medium0.45 ultimate49.270,0001825
Soft0.45 ultimate42.260,0002230

Ejemplo 2


<table>
  <colgroup>
    <col>
  <colgroup>
    <col>
    <col>
    <col>
  <thead>
    <tr>
      <th>
      <th>2008
      <th>2007
      <th>2006
  <tbody>
    <tr>
      <th scope=rowgroup>Research and development
      <td>$ 1,109
      <td>$ 782
      <td>$ 712
    <tr>
      <th scope=row>Percentage of net sales
      <td>3.4%
      <td>3.3%
      <td>3.7%
  <tbody>
    <tr>
      <th scope=rowgroup>Selling, general, and administrative
      <td>$ 3,761
      <td>$ 2,963
      <td>$ 2,433
    <tr>
      <th scope=row>Percentage of net sales
      <td>11.6%
      <td>12.3%
      <td>12.6%
</table>

200820072006
Research and development$ 1,109$ 782$ 712
Percentage of net sales3.4%3.3%3.7%
Selling, general, and administrative$ 3,761$ 2,963$ 2,433
Percentage of net sales11.6%12.3%12.6%

HTML 5: imagen grande, ande o no ande

Ahora que ya tenemos la mayor parte del HTML formateado, toca hacer revisión del resto de elementos más detallados. Y, al igual que pasó con los enlaces, con las imágenes voy a dedicar un capítulo entero para ello ya que aunque la configuración no es tan compleja, se lo merece.

Las imágenes se representan con el elemento img. Una imagen puede ser un mapa estático (png, gif, jpg…), vectorial (pdf, xml con svg…), imágenes anmadas (gif, apng…) y otra serie de elementos que cada navegador soporte, pero que el propio HTML 5 no especifica, ya que queda en manos de cada uno de ellos.

src

Este atributo es obligatorio al añadir una imagen e indica la dirección URL donde se encuentra el elemento a mostrar.

alt

Este elemento es el “texto alternativo” en una imagen. Dependiendo de una serie de combinaciones hay que ponerlo o no…

  • Si el alt está en blanco, significa que esa imagen es decorativa o suplementaria.
  • Si el alt dispone de información, el contenido ofrece información alternativa o sustitutiva de la imagen.
  • Si el alt no existe, la imagen debe ser parte del contenido y no hay ningún elemento equivalente. En este caso, los navegadores pueden usar la información del title o del figcaption como sustituto.

Por norma general el atributo alt debería existir, aunque hay casos excepcionales. Algunos casos donde en principio ha de estar son:

  • Si la imagen está dentro de un enlace, y ese enlace sólo contiene la imagen, entonces es obligatorio que tenga contenido.
  • En el caso de algún diagrama o gráfica, swe recomienda explicar con mucho detalle el contenido de la imagen.
  • Si tenemos una imagen como si fuera un icono, y al lado de la imagen hay un texto que la define (y viene a ser el mismo), en estos casos el elemento ha de estar vacío.
  • En el caso de logos, insignias, banderas… el contenido ha de ser el nombre de la entidad a la que representa, y no alguna palabra del estilo “logo”. En caso de que el logo no se muestre como logo, sino como una imagen descriptiva, es recomendable incluir una descripción de cómo es el logo en sí: formas, colores, etc…
  • Si la imagen es un texto sustitutivo, se recomienda que se incluya la misma información que indica el texto.
  • Si la imagen es simplemente algo que representa lo que se está hablando alrededor de ella, con un buen fragmento de texto, el atributo debe estar vacío. En estos casos es recomendable usar un título o similar.
  • En el caso en que haya varias imágenes complementarias unas a otras (por ejemplo, un logo dividido en varios ficheros), la primera de las imágenes será la que incluirá un texto alternativo, quedando el resto vacíos.
  • En el mismo caso, pero que alguna imagen tenga algunos de sus elementos como enlaces, cada una de estas sí que deberán incorporar un texto alternativo.
  • En los casos en los que la imagen tiene un valor excesivamente importante, el texto deberá ser muy detallado y significativo.
  • Si no se conoce el contenido de una imagen, entonces no debe existir el atributo alt, aunque en estos casos sí que deberá haber un title o un figcaption. Un ejemplo de esto podría ser una imagen de “captcha”.

Un detalle importante es que el alt es un elemento que ha de reemplazar la imagen en caso de que no se pueda mostrar, y no es información descriptiva (que sería el title).

En el caso en que las imágenes no estén pensadas para los usuarios (no sé, se me ocurre un contador de visitas de los “muy antiguos”) no debe existir el atributo alt y, en este caso, el width y height deben estar forzados a tamaño 0.

width / height

Las imágenes pueden llevar el tamaño de las mismas. Por norma general es interesante indicarlas ya que de esta forma el navegador no tendrá que esperar a finalizar la carga de la página para poder acabar de renderizarla correctamente.

usemap

Este elemento, si existe, indica la información del mapa asociado y será el nombre del mapa.

ismap

Si la imagen es un mapa y se encuentra dentro de un enlace a, entonces hay que indicarlos con este parámetro booleano. Con esto el enlace quedaría en entredicho ya que necesitará de un mapa.

HTML 5: dándole color a lo que escribimos

Si por algo se inventó el HTML en su día fue para hacer “markup” de los textos, lo que, en el fondo, significa que se inventó para hacer que los textos de la red de redes tuvieran una forma de darles color, formato y, sobretodo, vinculación.

Pero como ya he hablado de la vinculación de los elementos, ahora toca hablar de los elementos que hacen que podamos tener negritas, cursivas, y una serie de cosas que cualquier texto debería poder tener.

em

Aunque muchos asocian el elemento em a las cursivas, no es así. Habitualmente se representa como una cursiva pero el elemento em básicamente lo que implica es dar énfasis a una palabra para que, dentro de una frase, se haga un mayor esfuerzo en ello. Es interesante porque este elemento es “anidable”, es decir, podemos poner un em dentro de otro em para así enfatizar aun más algo.

Es habitual que en una conversación o en un texto queramos enfatizar algún detalle en concreto, resaltarlo, y para ello deberemos utilizar este elemento.

Atención, este texto es <em>exclusivamente</em> informativo.

En este caso, el “exclusivamente” queda enfatizado por encima del resto del texto.

strong

Al igual que en el caso anterior, muchos utilizan el elemento strong como una negrita, y no es correcto. El significado y uso de este elemento es el de dar importancia a algo en concreto, sin ser decorativo. Al igual que el anterior, este elemento es anidable, por lo que podremos encontrar un strong dentro de otro strong.

<strong>Atención</strong>, este texto es exclusivamente informativo.

En este caso, el “atención” queda reforzado por encima del resto del texto.

small

El elemento small representa un pequeño comentario en un tamaño más reducido. Habitualmente hará referencia a disclaimers, restricciones legales, copyrights y similares. Este elemento no le restará importancia a lo que haya enfatizado con em o reforzado con strong.

Este elemento no debe utilizarse con bloques largos de contenido, múltiples parágrafos, listados… sólo debe utilizarse con pequeñas porciones de texto.

<p>Este producto no debe ser utilizado junto al otro producto.</p>
<p>El eslógan de la compañía Fulanito de Tal es el de "dar el poder de Internet a los usuarios".</p>
<p><small>Esta información ha sido vista en el sitio web de <a href="http://example.com/nosotros.html">fulanito de tal</a>.</small></p>

cite

El elemento cite representa el título de un trabajo (libro, poema, canción, película…), pero no la cita en sí, sino, sólo su título. En el caso de los nombres de autores no se debe hacer uso de este elemento, sino que podría estar bien una negrita b.

<p><cite>Universal Declaration of Human Rights</cite>, United Nations, December 1948. Adopted by General Assembly resolution 217 A (III).</p>

q

Y si el elemento anterior era el título de una cita, el elemento q es la cita en sí, siempre y cuando sea una línea. Las “comillas” no hay que ponerlas, ya que el propio navegador las añadirá.

Este elemento puede incorporar un atributo cite que será la dirección URL de donde se ha extraido la información referente a ese texto.

<p>The W3C page <cite>About W3C</cite> says the W3C's mission is <q cite="http://www.w3.org/Consortium/">To lead the World Wide Web to its full potential by developing protocols and guidelines that ensure long-term growth for the Web</q>.</p>

dfn

El elemento dfn representa la definición de un término. Los contenidos alrededor de este elemento seran la definición del mismo. En el caso en que el elemento tenga un title, éste será el que de la definición exacta del término, sin tener en cuenta el resto del contenido. En este caso, sólo podrá incluirse la definición exacta del término.

<p>The <dfn id="gdo"><abbr title="Garage Door Opener">GDO</abbr></dfn> is a device that allows off-world teams to open the iris.</p>
<p>...</p>
<p>Teal'c activated his <a href="#gdo"><abbr title="Garage Door Opener">GDO</abbr></a> and so Hammond ordered the iris to be opened.</p>

abbr

Cuando tengamos que hacer alguna abreviatura, acrónimo o similar utilizaremos el abbr que permite la incorporación de un title en el que añadir el significado extendido de lo que son las siglas.

Hay que tener en cuenta que no siempre hay que utilizar este elemento, aunque sí se recomienda el uso en documentos en los que esas siglas son poco conocidas, en las que hace falta una presencia semántica añadida o en las que los autores quieren dar la definición sin necesidad de escribirlo después entre paréntesis, por ejemplo.

time

Este es uno de los nuevos elementos que tiene cierta gracia su uso. Básicamente con time debemos ofrecer horas en formato de 24horas que permitan a las máquinas leer fechas, de forma que los navegadores puedan interpretarlas y generar recordatorios con ellas. Estas horas a las que representa han de ser precisas.

Este elemento permite algunos parámetros. Por ejemplo, si se incluye el booleano pubdate significará que esa hora es la que corresponde al article más cercano o, en caso de no haberlo, al documento en el que se encuentra. El atributo datetime es el que puede incluir un valor exacto de la fecha y hora en la que se quiere establecer el momento.

Aunque los navegadores no son capaces de renderizarlos en este momento, creo que puede ser muy interesante la forma en la que lo harán. Si vemos estos ejemplos que pongo a continuación, os explicaré el porqué:

<p>I usually have a snack at <time>16:00</time>.</p>

En este caso, el navegador ha de mostrar algo como:

I usually have a snack at 4pm. o I usually have a snack at 16h00.

En este caso, supongo que dependerá de la configuración del sistema operativo, navegador o dispositivo… pero no es el único caso:

<p>Published <time pubdate datetime="2009-08-30T07:13Z"></time>.</p>

Aquí, el sistema podría mostrar varias opciones como:

Published 30/08/2009 07:13. o Published 30 Aug 2009.

code

El elemento code representa código informático… cualquier tipo de código que un ordenador podría reconocer de alguna manera…

<pre><code class="language-pascal">var i: Integer;
begin
  i := 1;
end.</code></pre>

var

Aunque es muy probable que el elemento var se utilice en casos más elaborados, su función es la de indicar que el elemento que hay hace referencia a una variable matemática o de programación.

La hipotenusa <var>a</var> es la suma de los cuadrados de <var>b</var> y <var>c</var>

samp

El elemento samp representa el contenido que muestra la pantalla de un sistema operativo.

kbd

El elemento kbd es lo que un usuario ha de introducir en un sistema (normalmente a través del teclado).

<pre><samp><span class="prompt">jdoe@mowmow:~$</span> <kbd>ssh demo.example.com</kbd>
Last login: Tue Apr 12 09:10:17 2005 from mowmow.example.com on pts/1
<span class="prompt">jdoe@demo:~$</span> <span class="cursor">_</span></samp></pre>

sub / sup

Estos dos elementos muestran la información sobre (sup) la línea y bajo (sup) la línea. Normalmente se utiliza en casos muy contados, aunque habitualmente elementos matemáticos.

f(<var>x</var>, <var>n</var>) = log<sub>4</sub><var>x</var><sup><var>n</var></sup>

i

Otro de los clásicos es el i, que representa un bloque de texto como voz alternativa, designación taxonómica, término técnico, frase en otro idioma, o cualquier elemento que quieta ponerse en cursiva.

<p>The <i class="taxonomy">Felis silvestris catus</i> is cute.</p>
<p>The term <i>prose content</i> is defined above.</p>
<p>There is a certain <i lang="fr">je ne sais quoi</i> in the air.</p>

b

Y el otro clásico, el b que representa un texto con una importancia extra, como alguna palabra a destacar, el extracto de un documento, nombres de productos o cualquier otra cosa que deba ir en negrita.

<p>The <b>frobonitor</b> and <b>barbinator</b> components are fried.</p>

hay que tener en cuenta que el uso de b es el caso extreño, ya que para encabezados hay que utilizar los h1-h6, para dar énfasis a un contenido el em y para remarcar algo el strong o el mark.

mark

El elemento mark ofrece a un fragmento de texto el verse remarcado o destacado con respecto a otro fragmento. En principio este elemento puede ser utilizado para dar importancia a un fragmento según el uso de cada usuario.

El ejemplo más claro y que en alguna ocasión se ha podido ver, sería en de analizar la búsqueda que llega un referrer de un buscador y marcarla en el texto, como si de un rotulador amarillo fluorescente se tratase.

<p>El usuario ha realizado la búsqueda <mark>coche rojo</mark> desde Bing.</p>

ruby / rt / rp

Estos elementos se utilizan para dar anotaciones sobretodo en texto asiático como el chino o japonés.

...
<ruby>
汉 <rt> hàn </rt>
字 <rt> zì  </rt>
</ruby>
...

bdo

Este elemento reconozco que no lo acabo de entender… Sé que tiene que ver con la dirección del texto que se incluye, y que por lo tanto ha de ir acompañada del atributo dir (el que indica la dirección del texto), pero poco más puedo decir…

En principio tampoco creo que sea de mucha importancia a menos que se haga uso de textos en idiomas que “escriben al revés” al estilo del árabe y similares…

span

El elemento span es el elemento más absdurdo, porque básicamente “no sirve para nada”. Este elemento por sí sólo no hace nada de nada, aunque existe porque es últi a la hora de acompañar hojas de estilo, idiomas, etc…

br

Otro de los elementos clásicos es el br, el salto de línea, que permite, en el ligar donde se incluya, hacer un salto de línea del bloque de texto en el que se esté escribiendo…

Hay que tener en cuenta que los saltos de línea no deben utilizarse con propósito de diseño, por lo que este elemento sólo debe utilizarse para dividir textos en varias líneas.

wbr

Y, aunque no sé hasta que punto es útil hoy en día, en el caso en el que haya palabras o frases excesivamente largas, pero que se puedan dar oportunidades para dividir, se podría usar este elemento. Por sí mismo no hace nada aunque permite que, en caso de necesitarse un salto de línea, se haga en uno de estos puntos.

<p>So then he pointed at the tiger and screamed "there<wbr>is<wbr>no<wbr>way<wbr>you<wbr>are<wbr>ever<wbr>going<wbr>to<wbr>catch<wbr>me"!</p>

ins / del

Aunque estos elementos no son expresamente de formateo de texto he creído interesante integrarlos en este punto.

El ins representa un fragmento de cntenido que se ha añadido al documento. Es importante tener en cuenta que no puede incluir varios párrafos o similar (vaya, no debería) y es recomendable que incluya el atributo datetime indicando la fecha de la inserción e incluso el cite si la nueva información proviene de otra URL.

El caso del del es igual, aunque en este caso se usa para eliminar un contenido (aunque en la página siga apareciendo, habitualmente tachado).

Os dejo, como la otra vez, un ejemplo de cómo se ven actualmente estos elementos en los navegadores actuales… os recomiendo ver el código fuente del fichero en cuestión.

Y, hasta aquí los elementos que hacen referencia a lo que a los textos se refiere, a su presentación en la pantalla y todo eso… El resto de elementos que queda y que iré mostrando más adelante, hace referencia más a otro tipo de elementos, muchos “multimedia” además de tablas y formularios, que también han variado bastante con respecto a sus versiones anteriores…

Usa el tipo de letra que quieras en tu sitio

Estos días hablando con mi diseñadora favorita, Ana, hemos cruzado algunas cosas sobre la posibilidad de “incrustar tu fuente” en los sitios web. Ella últimamente hace diseños para algunos hoteles, y estos siempre quieren cosas especiales.

Al final de hablar sobre ello, comenzamos a ver el tema del @font-face del CSS3. Pero, claro está, nos encontramos con el asunto de que no funciona en todos los navegadores. Así que me he puesto a investigar y he encontrado un código, un poco extraño, pero que parece ser la solución a la compatibilidad con todos los navegadores, incluido Internet Explorer.


<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>Font Face Demo</title>
  <style type="text/css" media="screen">
    @font-face {
      font-family: 'AaarghNormal';
      src: url('Aaargh-webfont.eot');
      src: local('☺'), url('Aaargh-webfont.woff') format('woff'), url('Aaargh-webfont.ttf') format('truetype'), url('Aaargh-webfont.svg#webfont') format('svg');
      font-weight: normal;
      font-style: normal;
    }
    h1 {font: 28px 'AaarghNormal', Arial, sans-serif;}
    p {font: 16px 'AaarghNormal', Arial, sans-serif;}
  </style>
</head>
<body>
  <h1>Font-face de Aaargh Font</h1>
  <p>Aaargh Normal - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p>
</body>
</html>

Para que quede claro que esto funciona, os dejo con la página tal y como se cargaría

Un detalle interesante es el uso de esa “carita sonriente”, y es el parche para que funcione en todos los navegadores, ya que sino en algunos de ellos no funciona… parece ser que gracias a un código en UTF-8 que no es compatible con el navegador de turno hace que el resto no se siga leyendo y por tanto no de un error…

Otra cosa a tener en cuenta es de dónde sacar fuentes en EOT, WOFF, TrueType y SVG. El sitio así que mejor he encontrado se llama Font Squirrel.