martes, 8 de septiembre de 2015

HTML: Formularios en HTML5 2/2

En la entrada anterior hemos visto las ventajas de HTML5 a la hora de desarrollar formularios, y una lista de los valores nuevos del atributo type. Ahora veremos una lista corta de nuevos atributos combinables.

Nuevos atributos para la etiqueta <input/>

En HTML5 también se han diseñado un conjunto de atributos nuevos que combinándolos correctamente con los ya aprendidos podremos construir formularios muy avanzados.

autocomplete="on/off"

La función de este atributo es controlar la opción de autocompletado en un campo de texto. Si seleccionamos el valor on, el cuadro de texto abrirá una pestaña con los textos escritos anteriormente, y si seleccionamos la opción off nos aseguramos de que la opción de autocompletado esté desactivada en caso de que el navegador la tenga activa de manera predeterminada.

Este atributo es compatible con los siguientes tipos de input:
  • text
  • search
  • url
  • tel
  • email
  • date pickers
  • password
  • range
  • color

autofocus

Este atributo es booleano y no necesita valor. Además solo debe haber un elemento con el atributo autofocus en toda una página.

Su función es colocar el foco automáticamente en el controlador con tan solo cargar la página web. Un ejemplo sería la página principal de Google, donde con solo cargarla ya aparece el cursor parpadeando en la barra de búsqueda.

Este atributo no debe emplearse a la ligera, pues podría causar problemas de usabilidad y accesibilidad, y solo debemos usarlo en caso de estar seguros que los usuarios necesitarán pasar por el cuadro de texto después de cargar la página.

min="número" y max="número"

Estos dos atributos nos ayudan a escoger un valor mínimo y un valor máximo para diferentes tipos de controladores. En caso de definir un mínimo y/o máximo, el usuario le será imposible insertar un valor fuera de estas restricciones.

Estos atributos son compatibles con los siguientes tipos de input:
  • number
  • range
  • date
  • datetime
  • datetime-local
  • month
  • time
  • week

step="número"

La utilidad de este atributo es definir el intervalo numérico válido para un elemento "input".

Un ejemplo sería definir con value="0" el número 0 como predeterminado, y con step="2" para que así solo sea posible escribir números pares. O bien podríamos empezar con value="1" para empezar con el número 1 como predeterminado y step="2" par que así solo sea posible escribir números impares.

Este atributo es compatible con los siguientes tipos de input:
  • number
  • range
  • date
  • datetime
  • datetime-local
  • month
  • time
  • week

pattern="expresión"

Este atributo permite validar un elemento "input" en base a una expresión regular. Si quisiéramos crear un código PIN deberíamos añadirlo de la siguiente manera: pattern="[0-9]{4}" definiendo que deben ser números del 0 al 9 y exactamente 4 dígitos.

Este atributo es compatible con los siguientes tipos de input:
  • text
  • search
  • url
  • tel
  • email
  • password

placeholder="ejemplo"

Nos permite añadir un texto en el campo que sea explicativo o una pista para que el usuario comprenda qué tipo de valores debe escribir en el cuadro de texto.

Un ejemplo para asegurarse que el usuario escriba una URL es el siguiente:

<input type="url" placeholder="http://www.ejemplo.com/">
Y el resultado sería:

URL:

required

Otro atributo booleano que especifíca que el elemento que lo contiene obliga al usuario a rellenarlo antes de enviar el formulario. Es el típico cuadro de texto señalizado con un asterisco.

Este atributo es compatible con los siguientes tipos de input:
  • text
  • search
  • url
  • tel
  • email
  • date
  • pickers
  • password
  • number
  • checkbox
  • radio
  • file

Y por último...

Ahora nos toca probar cada uno de los atributos con un par de combinaciones. Asegúrate de dominar estos atributos y de saber combinarlos adecuadamente. Luego pruébalos con diferentes navegadores y observa las diferencias. 

HTML: Formularios en HTML5 1/2

En una entrada anterior dejé escrito un enlace para conocer qué compatibilidad tienen los navegadores con las nuevas opciones de HTML5 para los formularios. Si ya conoces las opciones básicas para construir formularios es el momento de actualizarlos con la quinta edición del lenguaje HTML.

Ventajas de HTML5

Antiguamente podíamos usar JavaScript para mejorar nuestros formularios consiguiendo detectar valores incorrectos (como no escribir un correo electónico) o no rellenar campos obligatorios (como la contraseña de acceso).

Actualmente HTML5 ha suplantado la necesidad del uso de JavaScript para algunos conceptos, con nuevos atributos para la etiqueta <input/> que nos permiten poder conseguir los mismos efectos trabajando desde el lado del usuario.

Poder utilizar elementos nativos nos permite no tener que ampliar nuestro ancho de banda para tener que hacer calculos en el servidor en los casos de dar error, y nos permite avisar al usuario de que alguno de sus valores no siguen los requisitos necesarios.

En las dos entradas sobre formularios en HTML5 hago un resumen de los elementos más importantes. Si quieres profundizar más dejo aquí un enlace de Formularios en HTML5.

Nuevos valores para el atributo type

Es posible que no puedas notar las diferencias de los siguientes tipos de campo de texto de los ejemplos que hay a continuación. Si sucede es porque usas un navegador que no está preparado aún para leer todos los nuevos elementos de HTML5 (o que no lo has actualizado lo suficiente).


type="url"


Nos permite crear un campo de texto en el que solo se pueden introducir una dirección de página web. Si el formato del texto no es de una URL avisará al usuario de no haber completado correctamente el campo.

Algunos teléfonos móviles actualizados permiten introducir el texto en una interfaz de teclado táctil con opciones diseñadas para escribir una URL, como teclas de acceso rápido a la barra inclinada "/" o a finales de dominio ".com".

type="tel"


En este tipo de campo solo podemos escribir números de teléfono. El problema es que como existen tantos tipos diferentes de números de teléfono por todo el planeta, este valor no exige una sintaxis de por sí y deberás combinarlo con el atributo pattern para definir qué tipo de número de teléfono (ver en la segunda entrada del tema).

Algunos teléfonos móviles actualizados permiten introducir el número de teléfono en una interfaz de teclado táctil numérico con opciones diseñadas para escribir un número de teléfono, como autocompletado o acceso a la agenda.

type="email"

Con este valor podemos restringir el campo de texto para solo escribir direcciones de correo electrónico.

Algunos teléfonos móviles actualizados permiten introducir la dirección de correo electrónico en una interfaz de teclado táctil diseñada para correos electrónicos, con opciones como acceso rápido a la arroba "@".

type="number"



Gracias a este nuevo valor podemos conseguir un controlador en el que solo puedan introducirse valores numéricos. Muy útil combinado con otros atributos como min, max, value o step (ver en la segunda entrada del tema).

type="color"



Con este nuevo tipo de control podemos crear un botón que abra a una paleta de colores y dar la oportunidad del usuario a escoger un color. Con el atributo value podemos conseguir tener otro color que no sea el negro como predeterminado.

type="search"

Con este valor podemos dar a un campo de texto el diseño de un campo de búsqueda, añadiéndole una crucecita "X" que permita borrar todo lo que quede escrito por el usuario.

type="range"

Ahora podemos crear un controlador numérico que en este caso sea una pieza que se desplace horizontalmente para señalar un valor numérico dentro de un rango específico. Éste debe quedar completado con los atributos min y max.

type="datetime"


Aún no apto para todos los navegadores, con este valor podemos crear un campo de texto específico para insertar hora, fecha, año y zona horaria.

type="datetime-local"


Aún no apto para todos los navegadores, con este valor podemos crear un campo de texto específico para insertar hora, fecha y año, pero en este caso no podemos insertar la zona horaria.

type="date"


Aún no apto para todos los navegadores. Controlador muy útil para insertar fechas completas.

type="month"


Aún no apto para todos los navegadores. Controlador para definir tan solo un mes y un año específicos.

type="week"


Aún no apto para todos los navegadores. En este caso solo podemos escoger una semana y un año específicos.

type="time"


Bueno... supongo que te lo imaginas. Útil para definir tan solo una hora en formato de horas y minutos.

Y ahora...

Ahora a probarlos todos. Sí, abre tu editor de textos y crea un formulario con cada una de las opciones. Luego comprueba como funcionan con todos los navegadores posibles. Y cuando hayas terminado podrás leer la siguiente entrada.

lunes, 7 de septiembre de 2015

HTML: Crear secciones diferentes en una página web

Para poder aplicar estilos a una página web se combina con el lenguaje CSS. Muchas veces solo habrá que complementarlo con las pocas etiquetas que hemos aprendido hasta ahora, pero otras veces necesitaremos diferenciar las diferentes partes de una página web para poder aplicar más adelante el estilo por secciones.

<span></span>

Éste elemento lo usamos para definir una sección de un párrafo para más tarde aplicarle un estilo con CSS. El contenido entre las etiquetas será el texto que querramos darle algún formato específico. Los atributos necesarios para ello los trataremos más adelante, en otras entradas.

Un ejemplo sería el siguiente:

<p>Estamos probando un <span>ejemplo</span>.</p>

Luego, usando correctamente CSS, obtendríamos como resultado el siguiente ejemplo:

Estamos probando un ejemplo.

Aclaro que el ejemplo es incompleto. Nos faltaría añadir otro archivo en CSS para definir qué efecto haría la etiqueta <span>.

Si quisiéramos hacer que el párrafo entero tubiese el formato diferente no usaríamos la etiqueta <span>, sino que añadiendo un atributo a <p> que lo relacione con el archivo CSS ya conseguiríamos el mismo efecto de manera más ordenada.

<div></div>

Ahora ya no queremos definir una parte de un texto, sinó toda una sección de una página. Queremos separar el cabezal, el menú y el contenido de la página. Para ello usamos otra etiqueta: la etiqueta <div>.

Dentro del contenido de este elemento deberemos poner todos los párrafos que queremos que compartan estilo (quizás queremos añadirles un color de fondo, un recuadro que lo enmarque o tan solo cambiar el color del texto).

Los atributos necesarios para éllo los trataremos más adelante, en otras entradas.

Un ejemplo sería:

<div>
<h1>MENÚ</h1>
<p>Índice</p>
<p>Información</p>
<p>Contacto</p>
</div>

Luego, con los atributos correctos y usando el lenguaje CSS podríamos cambiar el formato hasta transformarlo en un margen izquierdo de la página, como se usa muy a menudo.

Aclaro que el ejemplo es incompleto. Nos faltaría añadir otro archivo en CSS para definir qué efecto haría la etiqueta <div>.

Ventajas de HTML5

Actualmente tenemos un conjunto de etiquetas que nos ayudan a facilitar las funciones de las etiquetas <span> y <div>. La utilidad de estas nuevas etiquetas nos permiten conseguir el mismo resultado pero de una manera más ordenada y cómoda para el desarrollador.

Dejo una lista de las etiquetas nuevas pero, aclaro de nuevo, hasta que tratemos CSS no voy a entrar en detalle de cómo se usan. Simplemente es importante conocerlas de antemano para profundizar más adelante.
  • <header></header> para definir la cabecera de la página
  • <nav></nav> para definir la barra o menú de navegación
  • <aside></aside> para definir un panel con información adicional (o anuncios).
  • <main></main> para la zona de contenido principal.
  • <article></article> para las entradas o artículos de la página que van en la zona principal.
  • <figure></figure> para las imágenes.
  • <footer></footer> para el pie de página.
  • <section></section> por si no fueran pocas las etiquetas, tenemos ésta que nos sirve para definir secciones de texto dentro de la página (algo como <div></div>) pero que su nombre no va referente a ninguna parte específica; simplemente una sección cualquiera, la que tu eligas ;)

HTML: Compatibilidad de navegadores con HTML5

Actualmente el lenguaje HTML ha evolucionado mucho y ya tenemos su quinta versión. Pero el HTML5 es algo joven a fecha de hoy y por ello es posible que a veces aparezcan algunos problemas de compatibilidad.

Navegadores compatibles

Los navegadores web son los encargados de interpretar el lenguaje HTML y lanzar en la pantalla del usuario la página web desarrollada. Para que sea posible los navegadores deben actualizar sus versiones para poder estar a la altura de las nuevas generaciones de lenguajes para el desarrollo web, como es el caso de HTML5 y CSS3.

Saber si tu navegador (como usuario) está al día o conocer cuán compatibles son los diferentes navegadores con HTML5 existen varias páginas webs. Aquí dejo escritas tres, pero en la red podrás encontrar muchas más.
  • https://html5test.com/ nos permite ver en una puntuación sobre 555 puntos la compatibilidad de nuestro navegador con HTML5 y ver al detalle qué etiquetas, atributos y valores son o no son comprensibles para él. También nos permite ver una rápida comparativa entre otros navegadores.
  • http://caniuse.com/ es un portal web donde hay una comparativa de la compatibilidad de cada navegador con los elementos nuevos de HTML5 o CSS3.
  • http://www.wufoo.com.mx/html5/ nos permite ver cómo de compatibles son los elementos necesarios para crear formularios en los diferentes tipos de navegadores.

domingo, 6 de septiembre de 2015

HTML: Imágenes

Las páginas web de hoy en día no serían nada sin la capacidad de mostrar imágenes. Hemos hablado de cómo estructurar contenido pero normalmente nos hemos referido a textos. Ya es hora de poder colocar en nuestras páginas web todo tipo de imágenes.

Imágenes

Habrás oído que las webs son un conjunto de hipertextos. También se dice que son archivos en formato hipermedia, una palabra que combina los conceptos hipertexto y multimedia. Es decir: las páginas web son un conjunto de archivos multimedia (que combinan diferentes formatos como texto, imágenes, audio o vídeo) enlazados entre sí de una manera lógica no lineal.

Qué formato de imagen usar

Aunque hay todo tipo de formatos para los archivos de imagen y la mayoría de los navegadores son compatibles con muchos de ellos, solo verás a tres tipos diferentes en casi todas las páginas web del mundo. Éstos son los archivos GIF, JPEG (o JPG) y PNG.

En mi opinión lo mejor es usar archivos PNG porque este formato fue inventado expresamente para las webs y permite crear partes invisibles que ayuda mucho al diseño web. Por otro lado los archivos JPEG son de peor calidad pero más ligeros, lo que nos permitiría almacenar un mayor número de imágenes en un sitio servidor con un espacio en disco escaso.

<img/>

En HTML usamos la etiqueta <img/> para insertar una imagen en nuestra web. Ésta necesita de dos atributos imprescindibles:
  • src="ruta" para indicar la dirección donde el servidor debe buscar la imagen (las imágenes no las "pegamos" al texto, sino que las tenemos guardadas en alguna de las carpetas contenedoras del sitio web o en una URL específica).
  • alt="texto" para escribir un texto alternativo que se mostrará en caso de que el proceso de subir la imagen de error.
Hay otros cuatro atributos que son opcionales pero muy útiles:
  • width="número" nos define el ancho de la imagen. En caso de no definir también la altura, la imagen quedará escalada a proporción.
  • height="número" nos define la altura de la imagen. En caso de no definir también la anchura, la imagen quedará escalada a proporción.
  • ismap="nombre" y usempa="nombre" sirven para crear mapas de imagen (leer más abajo).
Por último existen otros atributos para el tratar el estilo (align, border, hspace, vspace...) pero, una vez más, mejor dejamos esas cosas para el lenguaje CSS.

¡ATENCIÓN! El atributo longdesc="dirección" ha pasado a la historia. Los navegadores ya no lo interpretan y en HTML5 está obsoleto.

Un ejemplo de imagen sería:

<img src="http://wp.granollers.cat/musiknviu/wp-content/uploads/sites/13/2014/05/logomagret.jpg" alt="Magret De Paco"/>

Y el resultado sería:


Si lo deseamos podríamos utilizar los elementos <body background="ruta"> para poner una imagen de fondo de página o <table background="ruta"> para poner una imagen de fondo de tabla. Sin embargo sería mejor dejar estas cualidades para el lenguaje CSS.

Mapas de imagen (o imagen sensible)

Son imágenes con zonas activas o sensibles que nos permiten crear un enlace pero solo en la zona activa o sensible escogida de la imagen. Puedes hacer que solo una parte de una imagen mantenga el link, o que en una misma imagen haya varias zonas activas.

Se puede procesar en el lado del cliente (usemap) o en el lado del servidor (ismap). Es recomendable usar solo el lado del cliente y por eso no voy a tratar el atributo ismap="nombre".

Lo primero que debemos hacer para crear un mapa de imagen es escribir en la etiqueta de la imagen con el atributo usemap="#nombre". La almohadilla también debes escribirla delante del nombre.

Luego entra en juego el elemanto <map name="nombre"></map> donde el atributo name debe tener como valor el mismo nombre que en usemap, pero esta vez sin la almohadilla.

En el contenido de la etiqueta debemos escribir todas las zonas activas que querramos crear con el elemento <area shape="figura" coords="coordenadas" href="url" alt="texto"/>.
  • shape="figura" nos sirve para indicar el tipo de figura geométrica que tendrá la zona sensible.
  • coords="coordenadas" nos sirve para indicar las coordenadas que definen la zona sensible.
  • href="url" será donde escribiremos la dirección del enlace.
  • alt="texto" para escribir un texto alternativo para los casos en que no sea posible la visualización de la imagen.
Y los tres tipos de figuras geométricas son:

Rectángulo:

<area shape="rect" coords="x1,y1,x2,y2" href="url" alt="texto"/> 

Las dos primeras coordenadas indican el ángulo superior izquierdo del rectángulo en píxeles, y las otras dos el ángulo inferior derecho del rectángulo en píxeles.

Círculo:

<area shape="circle" coords"x,y,r" href="url" alt="texto"/>

Las coordenadas "x" e "y" indican el centro del círculo en píxeles, y la coordenada "r" el radio.

Polígono indefinido:

<area shape="poly" coords"x1,y1,x2,y2, ... xn,yn" href="url" alt="texto"/>

Éste sirve para conseguir cualquier tipo de forma geométrica. Cada grupo de coordenadas "x" e "y" son uno de los ángulos de la figura.

Usos de los mapas de imagen

No existe una razón específica para el uso de los mapas de imagen, así que sus utilidades están dentro de la imaginación del desarrollador web. Aun así ya se han usado para crear mapas geográficos o mapas de oficina, un método visual de navegación de la web (como una barra de menú especial) o una especie de portada de tu web con un mapa de las páginas del sitio web.

sábado, 5 de septiembre de 2015

HTML: Tablas

Las tablas son muy útiles para ordenar la información. Este conjunto de cuadros que aprendimos a hacer en la primaria nos ha acompañado siempre en nuestras vidas, sobretodo a la hora de estudiar o analizar alguna situación (por ejemplo económica). Construirlas con HTML parece complejo, pero no lo es. Observa.

Tablas



En HTML hay todo un conjunto de elementos que nos permiten construir tablas de cualquier manera. Lo bueno de hacerlas con este lenguaje es que permite una mayor flexibilidad que Microsfot Word o Microsoft Excel.

Aún así la complejidad de crear tablas reside en memorizar bien cómo ordenar las etiquetas.

Elementos principales

A diferencia de lo que hacemos normalmente para construir una tabla (contar el número de filas y el de columnas) con HTML trabajaremos el concepto de contar filas por celdas. Aunque en realidad viene a ser lo mismo.

Con los tres elementos siguientes podrás trabajar para construir un sinfín de tablas.

<table></table>

Este elemento define el principio y el final de la tabla. Si empezamos a escribir celdas y filas fuera del contenido de este elemento no formarán parte de ninguna tabla. Sin <table> y </table> no habrá tabla.

<tr></tr>

Con este elemento indicaremos cada una de las filas de la tabla. Por cada fila deberemos escribir <tr></tr>. En el contenido de estos elementos escribiremos el contenido de cada fila (las celdas, los textos...)

<td></td>

Este tercer elemento nos sirve para escribir las celdas de cada fila. Deberás escribir entre las etiquetas <tr> y </tr> de cada fila el número de <td></td> por cada celda quieras que haya. Es decir, el número de columnas de la tabla será el número de veces que deberás escribir este elemento dentro de cada fila.

Entre <td> y </td> es donde podrás escribir el contenido de cada celda.

Escribiré un ejemplo que deberás copiar en tu editor de texto y probarlo tu mismo:

<table>
  <tr>
    <td>Andrea</td>
    <td>10</td>
  </tr>
 
  <tr>
    <td>Guillermo</td>
    <td>8</td>
  </tr>
 
  <tr>
    <td>Fernando</td>
    <td>6</td>
  </tr>
</table>

Una vez lo hayas probado con tu navegador observarás que no hay bordes ni líneas que delimiten las celdas de la tabla, ni un cadrado que enmarce la tabla. Tranquilo: es normal. Todo eso va relacionado con el estilo y la estética de la web, así que ya puedes imaginarte que lo dejaremos para más adelante, cuando trabajemos con CSS.

Como ya he dicho todos los elementos de la tabla deben estar entre las etiquetas <table> y </table>. Cada elemento "tr" corresponde a una fila (que se lee de izquierda a derecha) y por eso debemos ordenar las celdas con el elemento "td" por filas (de izquierda a derecha). En el ejemplo hay un listado de tres alumnos y sus notas correspondientes, y en cada fila se debe poner un alumno y su nota correspondiente.

Puede que estés acostumbrado a escribir así las tablas, o puede que seas de los que primero escribe la columna de los nombres y luego la de las notas. En ambos casos recomiendo que dibujes primero la tabla a mano o la diseñes en otro programa para luego reconstruirla con HTML, siguiendo el orden de izquierda a derecha de las celdas para no desorientarte.

Etiquetas para el formato

<th></th>

Aunque con las tres etiquetas anteriores podrías hacer casi todas las tablas que quisieras hay otra etiqueta de celda que sustitue a las <td> y </td>. Ésta sirve para crear celdas con aspecto de cabecera para la columna. En el ejemplo podríamos poner una celda en la primera columna con la cabecera "Alumnos" y a la otra con la cabecera "Notas".

Añade el siguiente código al ejempo anterior (me salto el texto entre las etiquetas <tr> y </tr> para hacer más corta la entrada).

<table>
  <tr>
    <th>Alumnos</th>
    <th>Notas</th>
  </tr>

  <tr>...</tr> 
  <tr>...</tr>
  <tr>...</tr>
</table>

Observarás que el formato que da al texto de las celdas es parecido al de una cabecera (como podría ser el elemento "h4").

Puedes usar estas etiquetas de celda siempre que quieras, pero estan pensadas para utilizarlas al principio o al final de la tabla (donde podríamos poner la media de notas del curso, ¿sabrías hacerlo?).

<caption></caption>

A veces queremos poner dentro de la tabla una única celda de cabecera, como un título para la tabla en sí y que forme parte de ella.

Podemos conseguirlo escribiendo el título entre las etiquetas <caption> y </caption> al principio de la tabla.


<table>
  <caption>CURSO</caption>
  <tr>...</tr>
  <tr>...</tr> 
  <tr>...</tr>
  <tr>...</tr>
</table>

Realmente puedes escribirlo donde quieras del contenido del elemento "table" y siempre saldrá como el cabezal de toda la tabla. Pero si de verdad vas a escribir así tus páginas web vuelve a leer esta entrada ahora mismo y no vuelvas hasta terminarla.

Etiquetas para agrupar bloques para el estilo

Cuando trabajemos más adelante con CSS (u otros lenguajes que puedan combinarse con HTML) necesitarás agrupar los elementos a "decorar" en diferentes tipos de bloques para luego añadirles la orden de estilo.

Agrupar filas

Existen tres tipos de etiquetas para agrupar filas que además están relacionadas con el sector que representan: cabezal, cuerpo y pie de la tabla.

Estas etiquetas son <thead></thead> para el cabezal de la tabla, <tbody></tbody> para el cuerpo de la talba y <tfoot></tfoot> para el pie de la tabla.

<table>
<thead> 
  <caption>CURSO</caption>
  <tr>
    <th>Alumnos</th>
    <th>Notas</th>
  </tr>
</thead>
<tbody>

  <tr>
    <td>Andrea</td>
    <td>10</td>
  </tr>
  <tr>
    <td>Guillermo</td>
    <td>8</td>
  </tr>
  <tr>
    <td>Fernando</td>
    <td>6</td>
  </tr>
</tbody>
<tfoot>

  <tr>
    <th>Media</th>
    <td>8</td>
  </tr>
</tfoot>
</table>

Si copias el ejemplo y lo lanzas a tu navegador comprobarás que no hay ninguna diferencia de estilo. Repito: sirve para agrupar las filas con las que trabajaremos más adelante con CSS.

Agrupar columnas

<colgroup></colgroup> y <col/>


Como ya he explicado al principio, las tablas construidas en HTML se calculan con filas y celdas. Aunque no se defina el número de columnas, sí se pueden agrupar éstas para poder darles estilos con CSS (igual que con las filas).

Estos dos elementos sirven para lo mismo y el resultado es igual para los dos, así que escoge el que más te guste, combinalos o usa los dos a menudo para no olvidarlos. El elemento "colgroup" dispone tanto de etiqueta de apertura como de cierre pero el elemento "col" no dispone de etiqueta de cierre y debe ser cerrado adecuadamente con la barra "/" al final.

En este caso, a falta de un elemento que calcule el número de columnas, usaremos un atributo para definir el número de columnas que forman parte de la agrupación. Usaremos span="número" y en el valor escribiremos el número de columnas a agrupar.

Por ejemplo: si tenemos una tabla de dos columnas y queremos agrupar las dos para que tengan el mismo estilo (por ejemplo, las dos de color azul) usaremos solo uno de los elementos "colgroup" o "col" con el atributo span="2". Si queremos hacer dos agrupaciones diferentes (por ejemplo, una columna azul y la otra roja) usaremos dos elementos con el atributo span="1" (o podemos ahorrarnos poner el atributo, porque de manera predeterminada el valor es 1).

Si fuese una tabla de tres columnas con las dos primeras iguales (por ejemplo azules) y la tercera diferente (por ejemplo roja) usaremos una de las etiquetas con el atributo span="2" y después una de las etiquetas con el atributo span="1" (o sin el atributo).

El orden en que se escriban los elementos "colgroup" o "col" será el orden (de izquierda a derecha) en que se agruparán las columnas.

Combinación de celdas

Si lo deseamos podemos combinar diferentes celdas contiguas de una misma tabla.


Ésto se usa añadiendo a las etiquetas de celda ("td" y "th") el atributo colspan="número" y rowspan="número".

En el caso de querer juntar varias celdas de una misma columna el atributo será  colspan="número" donde el valor será el número de celdas que quieras combinar. El atributo deberás ponerlo en la primera celda de la columna y las otras no deben ser escritas con ninguna etiqueta, para que la celda original pueda ocupar el espacio de éstas.

En el caso de querer juntar varias celdas de una misma fila el atributo será rowspan="número" donde el valor será el número de celdas que quieras combinar. El atributo deberás ponerlo en la primera celda de la fila y las otras no deben ser escritas con ninguna etiqueta, para que la celda original ocupe el espacio de éstas.

Consejos

  • Utiliza las tablas solo para estructurar información en el contexto de tabla. No las uses nunca para estructurar tus páginas web. Es cierto que muchos desarrolladores han usado (y algunos siguen usando) el sistema de tablas para estructurar las partes de una página web, pero no es para nada aconsejable: puede crear problemas de visualización y existen etiquetas preparadas específicamente para ello.
  • Utiliza las agrupaciones de filas y columnas y deja el estilo de la tabla para el código CSS. Podrás trabajar mejor y en caso necesario será más rápido el proceso de rediseño de tu web.
  • Repasa bien la codificación de celdas. Asegúrate que la estructura de tu tabla es la correcta para que se vea como tú desees en todos los navegadores.

jueves, 3 de septiembre de 2015

HTML: Escribir código como un profesional

Con todo lo aprendido ya podríamos hacer muchas páginas web diferentes y el resultado sería bastante bueno. Pero aún no se han tratado algunos asuntos a tener en cuenta para conseguir una página web que se vea correctamente en todos los navegadores.

Cómo escribir correctamente una web


Hay algunas reglas que son imprescindibles para conseguir que tu web sea lo que deseas ver en cualquier ordenador conectado a la red. Algunas veces la falta de actualizaciones de algun navegador puede hacer que los usuarios no vean bien nuestras páginas web, pero eso no lo podemos controlar nostros.

Nuestro deber como desarrolladores web es asegurarnos de que nuestras páginas web se verán como nosotros deseamos en el máximo de servidores posibles.

Hay algunas cosas de sentido común que a veces cometemos el error de no darle importancia. Todas las etiquetas deben tener el nombre correcto (como sus atributos y valores) y sus cierres no solo deben existir (ya sea con la etiqueta final o terminar la etiqueta con "/>") sinó que deben estar en el lugar adecuado. Es muy importante mantener bien ordenados los cierres: las primeras etiquetas en abrirse son las últimas en cerrarse.

Asegurate también de que todas las comillas de los atributos esten en su lugar, porque también podrían causar muchos problemas.

No deberías publicar nada sin haber releido el código un par de veces y haberlo probado en diferentes servidores.

Pero ahora deberías aprender algunos elementos de los que no hemos hablado y de cómo validar un código.

El doctype

La palabra doctype (normalmente escrita como DOCTYPE) hace referencia al tipo de documento al que corresponde todo el texto de un archivo HTML. Es importante declarar este tipo de documento para advertir al servidor qué tipo de "traducción" debe hacer del lenguaje escrito posteriormente.

Resulta que de doctypes hay unos cuantos diferentes, con nombres muy complejos, y para muchos desarrolladores es un auténtico misterio saber cómo tratar este asunto. Hace tiempo se hizo un estudio en el que se analizaron 1.788.294 páginas web diferentes, donde encontraron 13.941 clases de doctype diferentes. Lo curioso del dato es ¡que no existían tantos doctype oficiales!

Esta característica que debemos definir antes de escribir el código no es más que una referencia para que el navegador sepa qué tipo de lenguaje vas a utilizar en la página. Es decir, una vez elegido el tipo de HTML que vayas a usar debes declararlo con la etiqueta <!DOCTYPE>.

Atención con la etiqueta que ésta va con signo de exclamación: <!DOCTYPE> (se puede escribir en minúsculas, pero se escribe en mayúsculas por compatibilidad con otros lenguajes).

Dentro de esta etiqueta (y no en el contenido del elemento) deberás escribir el código referente al tipo de HTML que vayas a usar:
  • HTML4.1 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  • XHTML1.0 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  • XHTML1.1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
Pero mi favorito de todos es el de HTML5, que es fácil de recordar y dentro de poco será el que usaremos siempre:
<!DOCTYPE html>
Fíjate que no tiene una etiqueta de cierre ni termina con el cierre de la barra inclinada "/". La colocación correcta del doctype es en la primera lína de todo el código, antes de la etiqueta <html>.

<!DOCTYPE html>
<html>
...
</html>

Idioma de tu web

Es recomendable escribir siempre una aclaración del idioma en que va a estar la página web. Ésto permite al servidor conocer el idioma predeterminado de la página para que éste pueda trabajar mejor.

El atributo que se encarga de ello es lang="idioma" y para el castellano usamos el valor "es". La lista de valores para este atributo es extensa, y es muy probable que encuentres el idioma con el que quieras escribir tu web.

Juego de caracteres

No escoger un correcto juego de caracteres a la hora de desarrollar tu web puede crear grandes problemas. Es probable que algunos usuarios, por más que estén en un ordenador del mismo país que tú, no puedan leerla correctamente (o mejor dicho, como tu querias que se viese).

Lo más importante de todo es saber que debes escribir todos tus ficheros de la misma web con el mismo juego de caracteres (tus páginas html, css, los archivos de datos del servidor de producción, etc...). Pero realmente es algo muy difícil de conseguir.

Lo mejor que puedes hacer es asegurarte que siempre escribas todas tus páginas web con la codificación UTF-8 sin BOM (UTF-8 without BOM) que te permite mezclar en un mismo documento textos de cualquier idioma (y por lo tanto mezclar caracteres de todo tipo). En el caso de no poder usar UTF-8 sin BOM también puedes codificar en ISO-8859-1 (conocido como Latin1) que sirve para los idiomas de Europa Occidental, o si necesitas escribir el símbolo del euro "€" deberás hacerlo con ISO-8859-15 (Latin9).

A parte de todo lo comentado, también deberías hacer uso de un nuevo elemento HTML, la etiqueta <meta/>. Si en ella le ponemos el atributo charset="juego de caracteres" le estaremos indicando al servidor qué juego de caracteres será el necesario para los textos que deben salir en pantalla.

Los valores de este atributo son muchos en relación al tipo de HTML que usemos, pero actualmente vamos a trabajar en dirección al HTML5 ya que es un lenguaje que nos hace el trabajo más fácil, así que usaremos la etiqueta de la siguiente manera:

<meta charset="utf-8"/>

Así de sencillo.

Al ser una etiqueta meta, es decir, un metadato, deberemos escribirlo en el contenido del elemento "head".

<head>
  <meta charset="utf-8"/>
</head>

En resumen: asegúrate de que tu editor de textos codifique ya de entrada tus textos en UTF-8 sin BOM, y si no lo hace combiertelos, y no olvides escribir en el código la etiqueta "meta" para declarar que usarás el juego de caracteres UTF-8.

Validación del código

Por último, y si ya tenemos tooodo nuestro sitio web desarrollado y diseñado (e incluso publicado) es el momento de la prueba del algodón.

La W3C ha creado una página web para poder validar tu código. Tan solo debemos escribir la URL o subir los archivos de tu web, y su programa estudiará el código para comprobar que no hay ningún error.

Si todo es correcto, saldrá un mensaje en color verde que dibujará una sonrisa en tu cara. Pero si detecta errores de código aparecerá un mensaje en rojo con el número de errores y advertencias.

Si no corriges estos es posible que los usuarios tengan problemas al visitar tu web por más que la veas correctamente desde tu casa.