Armonía | En definitiva...

Estás viendo las entradas catalogadas dentro de la categoría "XHTML".

Puntos de final de frase en atributos XHTML

Desde hace unos días llevo planteandome una cosa que me trae de cabeza, aunque no es más que una tontería, pero me gustaría saber vuestra opinión al respecto: ¿cuándo se deben colocar puntos de final de frase en los textos de ciertos atributos XHTML?

Estoy hablando de atributos como title, alt o summary. ¿Se deben terminar los textos contenidos en estos atributos con punto final? ¿Se deben dejar sin punto? Nunca he leido nada al respecto, y me planteo cuál es la forma más correcta de hacerlo. ¿Vosotros qué opinais?

Los microformatos y la semántica: Vote Links

  • Martes, 20 de Septiembre de 2005 a las 09:56 CET
  • Guardado en: Web Semántica
    Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85

Continuando con los microformatos, hoy vamos a comentar uno de los que más me gustan: el microformato Vote Links. Gracias a este microformato podemos "votar", (positiva o negativamente), los enlaces que queramos. Gracias a este "voto", se podría, por ejemplo, sacar un listado de los enlaces que consideramos de calidad.

La forma de usar este microformato es muy sencilla. Como en todos de ellos, hay que colocar ciertos valores en un determinado atributo para el elemento que queramos marcar. En este caso, el elemento a marcar será un hipervínculo, y el atributo que usaremos será rev, (en versiones antiguas se usaba rel, pero acabó desechandose ya que no reflejaba correctamente la relación del enlace con el documento enlazado, aunque para mantener la compatibilidad las aplicaciones que vayan a manejar este microformato deben tener en cuenta el atributo rel).

Los valores que puede tomar el atributo rev para este microformato son tres:

rev="vote-for"
Este valor se debe usar cuando queremos dar un "voto" positivo al enlace que marquemos. Cuando damos un "voto" positivo a un enlace estamos indicando que recomendamos, o que estamos de acuerdo con lo que se dice en la página que enlazamos.
rev="vote-abstain"
Cuando marcamos un enlace con este valor en el atributo rev estamos indicando que no votamos ni positiva ni negativamente. Es decir, ni recomendamos, ni indicamos que no estamos de acuerdo con lo dicho en la página enlazada.
rev="vote-against"
Marcando con este valor un enlace estamos indicando que no recomendamos, o que no estamos de acuerdo, con la página enlazada. Le estamos dando un "voto" negativo.

Y para terminar, nada mejor que unos ejemplos de su uso:

<p><a href="http://pviojo.net/posts/microformatos-los-bloques-de-la-web-semantica/" title="Artículo de Pablo Viojo sobre los microformatos" rev="vote-for">Microformatos: Los bloques de la Web semántica</a></p>
<p><a href="http://www.16bits.net/archivos/argentina-cuando-las-cosas-no-funcionan/" title="Artículo de Rodrigo Galindez sobre el estado burocrático en Argentina" rev="vote-abstain">Argentina, cuando las cosas no funcionan</a></p>
<p><a href="http://www.alt1040.com/archivo/2005/09/19/algunos-pensamientos-sobre-comentarios-en-los-blogs/" title="Artículo de Eduardo Arcos sobre su concepción de los comentarios en los blogs" rev="vote-against">Algunos pensamientos sobre los comentarios en los <span xml:lang="en">blogs</span></a></p>

Tal y como podeis ver he marcado tres enlaces, y he usado el atributo rev para marcar mi "voto" a cada uno de ellos. Con el primero, de Pablo Viojo, en el que hace una pequeña introducción a los microformatos, estoy totalmente de acuerdo, y me parece un artículo bueno y digno de recomendación, así que lo he marcado con rev="vote-for"

El segundo, de Rodrigo Galindez, es un artículo del que no puedo opinar realmente, ya que habla sobre el estado de los temas burocráticos en Argentina, cosa de la cual no sé absolutamente nada. Por tanto la marco con rev="vote-abstain".

Y para terminar, he marcado con rev="vote-against" un artículo de Eduardo Arcos, en el que expone su opinión sobre cerrar los comentarios en los blog, opinión con la que no estoy de acuerdo.

Enlaces de interés

Los microformatos y la semántica: hCalendar

  • Sábado, 17 de Septiembre de 2005 a las 16:40 CET
  • Guardado en: Web Semántica
    Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85

Después de unos días retomamos el tema de los microformatos, (rel="license", hCard, rel="nofollow", rel="tag"), esta vez para hablar de un microformato "de los gordos", el microformato hCalendar.

Como el microformato hCard, hCalendar está basado en un estándar, el iCalendar, usado por ejemplo en la aplicación iCal de Mac. Como ya os imaginareis, hCalendar se usa para marcar con XHTML cualquier tipo de evento, con sus fechas, lugar, etc.

Como siempre, como mejor se ven las cosas es con ejemplos, así que vamos a marcar un evento con iCalendar, a ver qué tal queda:

<div class="vevent">
<p>
<a class="url" href="http://www.findelmundo.org/">
<abbr class="dtstart" title="20051001">1 de Octubre</abbr> - <abbr class="dtend" title="20051002">2 de Octubre  </abbr> <span class="summary">Fin del mundo </span> - en <span class="location">el Planeta Tierra </span>
</a>
</p>
<p class="description">Nos vamos todos a tomar por culo.</p>
</div>

Como podeis ver, he englobado todo dentro de un div con class="vevent", para marcar que contiene datos relativos a un evento marcado con hCalendar. Dentro de ese div está la información del evento, que también he marcado aproviadamente.

Para marcar un enlace hacia una página con información relevante sobre el evento he usado el atributo class="url". El texto del enlace puede ser el que queramos, incluso más datos del evento, ya que lo que interesa del enlace es la URL, contenida en el atributo href.

Otro dato importante que hay que marcar convenientemente es el resumen, (summary), del evento. Para no complicarse la vida lo mejor es colocar en este dato el nombre del evento, y marcarlo con su correspondiente class="summary". Normalmente, junto al nombre del evento se suele colocar el lugar donde se celebra. Este dato hemos de marcarlo con class="location". No hay que olvidar que los elementos que usemos para marcar los datos no tienen por qué ser únicamente div o span, de hecho tienen preferencia aquellos elementos con mayor semántica para el documento.

Un punto con el que no estoy muy de acuerdo con la especificación del microformato es el relativo a las fechas, tanto de comienzo como de final. En la especificación se recomienda marcarlas con abbr, cuyo texto sería la fecha en formato "humanizado", y en su title se colocaría la fecha en "formato máquina". Yo para nada usaría abbr, no me parece lógico, pero como así lo dice la especificación, así lo reproduzco yo.

La fecha de comienzo del evento se ha de marcar con el atributo class="dtstart", para la fecha de fin se debe usar class="dtend". Recordar que para la fecha "formato máquina", colocada en el title del abbr se ha de usar el formato: AAAA-MM-DD.

Por último, en mi ejemplo he escrito también una pequeña descripción del evento, la cual hay que marcar con class="description". Por supuesto hay muchos más datos que se pueden colocar, los podeis encontrar todos en el estándar de iCalendar.

Los microformatos y la semántica: rel="tag"

  • Martes, 13 de Septiembre de 2005 a las 15:34 CET
  • Guardado en: Web Semántica
    Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85

Otro día más vamos a comentar a modo de introducción un microformato, en esta ocasión el microformato rel="tag", destinado a marcar enlaces a páginas de un tag en concreto.

Con todo esto de la, (mal llamada a mi parecer), Web 2.0, y la moda de las folksonomies, los tags se han convertido en una forma "buena, bonita y barata" de catalogar contenido. Por este motivo surge el microformato rel="tag".

Para poder usar este microformato se deben seguir una serie de reglas básicas:

  • El texto del enlace ha de ser el tag en cuestión
  • La página a la que enlacemos debe ser la página que muestre la información catalogada bajo ese tag
  • La URL del enlace debe tener, en el último segmento de la ruta, el tag que estemos marcando, (si contiene espacios se traducen a su entidad para URL)

Siguiendo estas directrices, podemos marcar los tags que mostremos en nuestras páginas con el microformato rel="tag". Por ejemplo, para marcar un enlace al tag "miventana", (donde guardo una serie de fotos hechas desde la ventana de mi habitación en Los Barrios):

<a href="http://flickr.com/photos/spiral-static/tags/miventana/" hreflang="en" title="Página con mis fotos marcadas con el tag: miventana" rel="tag">miventana</a>

Hay que recordar que los enlaces marcados con el microformato rel="tag" han de ser enlaces visibles, por tanto no podríamos marcar un elemento link del head con este microformato.

Los microformatos y la semántica: rel="nofollow"

  • Lunes, 12 de Septiembre de 2005 a las 15:16 CET
  • Guardado en: Web Semántica
    Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85

Hace ya algunos meses salto a la palestra de los blogs una iniciativa de Google para evitar el spam en los comentarios: se dió a conocer el microformato rel="nofollow".

Desde ese momento, infinidad de blogs dieron su opinión al respecto, algunas favorables y otras desfavorables, pero desde luego no pasó desapercibido. Es por esto que lo más probable sea que a estas alturas todos conozcamos qué es y cómo se usa este microformato, pero de todas formas voy a comentarlo por si queda algún rezagado.

El microformato rel="nofollow" está pensado para especificar que un hipervínculo con este atributo no debe intervenir en el análisis por parte de los robots de búsqueda. Siguiendo un ejemplo simple:

<a href="http://www.yonkis.com/" title="Página principal de Yonkis.com" rel="nofollow">Yonkis</a>

Como podéis ver en el código anterior, el elemento a tiene el atributo rel="nofollow". Esto viene a significar que cualquier motor de búsqueda, (tipo Google, etc.), no debería tomar este enlace en cuenta a la hora de realizar sus cálculos para el resultado de las búsquedas y la generación de sus rankings. Es decir, Yonkis, a ojos de los motores de búsqueda, no recibiría ningún enlace de nuestra parte si nosotros hemos marcado ese enlace con rel="nofollow".

Los microformatos y la semántica: hCard

  • Domingo, 11 de Septiembre de 2005 a las 16:08 CET
  • Guardado en: Web Semántica
    Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85

Retomando el tema de los microformatos, hoy me gustaría comentar un poco algunos aspectos del microformato destinado a marcar los datos de cualquier persona: hCard.

Tal y como se puede leer en la especificación, el microformato hCard está basado en el estándar vCard, y permite, usando las mismas propiedades que vCard, marcar con XHTML todos los datos de una persona de manera semántica. Gracias a este microformato, los autores de documentos Web podrán incluir datos vCard directamente en sus documentos con XHTML, sin necesidad de utilizar documentos vCard externos. Además, aplicaciones específicas podrán recopilar datos vCard directamente de los documentos.

El uso del microformato hCard es relativamente sencillo, tan sólo hay que seguir unas determinadas reglas, incluidas todas en la especificación del microformato.

Lo primordial es encerrar todas las etiquetas que vayan a englobar los datos personales en una etiqueta de nivel superior con un atributo class cuyo valor sea "vCard". Comunmente este elemento sera un div, pero conviene recordar que si podemos usar un elemento más adecuado, ya sea porque aporta más sentido semántico o por cualquier otro motivo, lo usaremos.

<div class="vcard">
<p>Juan Hurtado</p>
<p>Los Barrios, (Cádiz)</p>
<p><a href="mailto:juan.g.hurtado@gmail.com" title="e-Mail del autor del blog">juan.g.hurtado@gmail.com</a></p>
<p><a href="http://armonia.spiral-static.org/" title="Armonía | En definitiva...">http://armonia.spiral-static.org/</a></p>
</div>

Como podeis ver en el ejemplo anterior, he encerrado algunos de mis datos personales en un elemento div cuyo atributo class tiene como valor la cadena "vcard". Eso, según el microformato, indicará que los datos contenidos dentro del div van a corresponder a una serie de datos personales.

El siguiente paso sería marcar cada uno de los datos personales que contiene la etiqueta <div class="vcard">. Para marcar estos datos se sigue un proceso parecido al anterior, se marcan con el atributo class los elementos que contengan el dato al que deseemos dar un valor específico. Los valores que se deben poner en el atributo class vienen determinados por la especificación del estándar vCard.

Cada dato de la ficha vCard viene identificado por un identificador específico, así, en hCard, marcaremos cada dato con su identificador concreto en su atributo class. Siguiendo con el ejemplo anterior, marcaremos cada dato de forma correcta usando el microformato hCard:

<div class="vcard">
<p class="fn">Juan Hurtado</p>
<p class="adr"><span class="locality">Los Barrios</span>, (<span class="region">Cádiz</span>)</p>
<p><a class="email" href="mailto:juan.g.hurtado@gmail.com" title="e-Mail del autor del blog">juan.g.hurtado@gmail.com</a></p>
<p><a class="url" href="http://armonia.spiral-static.org/" title="Armonía | En definitiva...">http://armonia.spiral-static.org/</a></p>
</div>

Como podeis observar, he marcado cada dato de mi ficha hCard con su atributo class con el valor correspondiente al dato en cuestión. Esta ficha no está completa, existen infinidad de datos posibles. Los podeis encontrar todos en el perfil XMDP del microformato hCard, o bien en la especificación del estándar vCard

Los que yo he usado son:

class="fn"
Representa el friendly name de la persona a la que representa la vCard. La primera palabra contenida en la etiqueta marcada con este atributo corresponde al nombre del individuo, (class="n"), y la segunda al Family Name, o apellido familiar, (class="family-name")
class="adr"
Indica que todos los datos contenidos dentro de la etiqueta marcada con este atributo forman parte de la dirección del individuo.
class="locality"
Indica la localidad o ciudad donde vive el individuo. La etiqueta marcada con este atributo ha de estar englobada por otra etiqueta con class="adr".
class="region"
Indica la región, provincia, estado, etc. donde vive el individuo. La etiqueta marcada con este atributo ha de estar englobada por otra etiqueta con class="adr".
class="email"
Normalmente se usa en un elemento a. Indica la dirección de correo electrónico del individuo.
class="url"
Normalmente se usa en un elemento a. Indica la URL de la página personal del individuo.

Los microformatos y la semántica: rel="license"

  • Jueves, 08 de Septiembre de 2005 a las 21:19 CET
  • Guardado en: Web Semántica
    Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85

Los microformatos se han alzado como una propuesta muy interesante para extender de forma simple el uso de la semántica en la web. Desde microformats.org, con gente como Dan Cederholm detrás, se han generado varias especificaciones de diversos microformatos, listos para poder usar y así, poco a poco, aumentar su importancia dentro de la red y, por qué no decirlo, mejorar y "humanizar" la Web.

Desde aquí, y tomando ejemplo de Pablo Viojo en su post Microformatos: Los bloques de la Web semántica, voy a escribir algunos posts relacionados con el tema, tratando de explicar de forma sencilla algunos de los microformatos existentes.

El primero de estos posts va a tratar sobre el microformato rel="license", un microformato realmente sencillo, y que sirve para marcar los enlaces a la licencia de la página en la que se utilice, bien sea la licencia de nuestro blog, de una página con un software desarrollado por nosotros, etc.

Su especificación en microformats.org es de las más simples que se pueden encontrar, y se puede resumir en lo siguiente: Coloca el atributo rel con el valor "license" en cualquier enlace que referencie la licencia de la página actual. Un ejemplo, sacado de este blog:

<a href="http://creativecommons.org/licenses/by-nc-sa/2.5/" title="Licencia de este Blog" rel="license"><abbr title="Attribution-NonCommercial-ShareAlike" xml:lang="en">by-nc-sa</abbr> 2.5</a>

Como podeis ver es extremadamente sencillo, así que ya no teneis excusas para empezar a usar microformatos en vuestros documentos. Y no me digais que no teneis oportunidad, porque todos tenemos un blog con una licencia Creative Commons en el pie...

Carga semántica en XHTML: address

  • Domingo, 04 de Septiembre de 2005 a las 00:05 CET
  • Guardado en: XHTML
    Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85

Después de todos los elementos que ya hemos visto en esta serie de artículos relacionados con la carga semántica en los documentos XHTML, (disponibles todos en la sección XHTML de este blog), ya no quedan demasiados por revisar. Pero hoy, leyendo algunos correos electrónicos de la lista de distribución de Ovillo, he recordado un elemento del que todavía no hemos hablado, el elemento address.

No es un elemento para nada común, y la verdad es que lo he visto siendo utilizado en muy pocas ocasiones. De hecho yo mismo no hago uso de él en este blog, (estudiaré si es necesario o no). Como decía, es un elemento muy poco común, pero que, dado el caso de poder usarlo, no debemos dudarlo ni un instante, ya que añade un sentido muy específico al texto que marquemos, y mejorará la semántica global de nuestro documento.

El elemento address se usa para especificar una dirección de contacto con el autor del documento. Esta dirección puede ser tanto física como virtual, es decir, puede ser la dirección del hogar, de la oficina, o incluso el teléfono, o bien simplemente la dirección de correo electrónico del autor. Sea como sea, cualquier tipo de dirección desde la cual se pueda contactar con el autor del documento se debe marcar con el elemento address.

Un ejemplo del uso del elemento address podría ser:

<p>
<address>Pepe Pérez, en la Calle de la Piruleta número 15</address>
</p>

Conviene recordar que address es un elemento en línea, por lo que se debe colocar dentro de un elemento en bloque, como en el ejemplo, que lo hemos colocado dentro de un párrafo.

El uso de este elemento puede parecer un poco quisquilloso, pero si existe, y tiene una función definida que puede ayudar a mejorar el sentido de nuestros documentos, creo que debería usarse. Eso sí, única y exclusivamente cuando la situación lo requiera.

Formularios y mensajes de error

  • Domingo, 24 de Julio de 2005 a las 19:49 CET
  • Guardado en: XHTML
    Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85

    Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85

    Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85

    Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85

Una parte muy a tener en cuenta a la hora de desarrollar nuestras aplicaciones Web son los formularios. Estos han de ser simples, consistentes, comprensibles, accesibles, etc. En este artículo de hoy voy a enseñaros la forma en la que suelo hacer mis formularios, y los motivos por los que he elegido determinados detalles que acostumbro a usar.

Para hacer más sencilla la comprensión de todo esto he creado un sencillo ejemplo con un mismo formulario dividido en tres estados distintos, donde cada uno de ellos muestra una etapa de la "vida de un formulario".

Primera etapa: Formulario en estado normal

La primera etapa de todo formulario es aquella en la que nos lo encontramos por primera vez, impoluto, limpio completamente, esperando ser cumplimentado y enviado.

Es una etapa muy importante, ya que debemos conseguir que de un simple vistazo el formulario sea comprensible para el usuario. Y por si fuera poco, hemos de usar nuestro lenguaje de marcado favorito de forma correcta, preocupándonos además por la accesibilidad del formulario.

Hay diversas cosas que suelo realizar siempre que hago un formulario. Una de ellas es englobarlo con el elemento fieldset con un atributo title bien descriptivo, y colocándole su correspondiente legend:


<fieldset title="Formulario general en estado normal que realiza una función determinada">
  <legend>Formulario general en estado normal</legend>
</fieldset>

Otra cosa imprescindible es el uso de los label. A todos los controles del formulario, salvo a los botones, les coloco su label correspondiente. Debo destacar que normalmente acostumbro a englobar todo el control con el label además de usar el atributo for de este, me explico:

<label for="cajaTexto1">Caja de Texto 1 <span class="obligatorio">(Obligatorio)</span><br />
  <input type="text" id="cajaTexto1" name="cajaTexto1" maxlength="255" title="Caja de Texto. (Campo obligatorio, con un límite de 255 caracteres.)" />
</label>

Como podeis ver, toda la caja de texto se encuentra englobada dentro de un label, y este a su vez hace uso del atributo for para referenciar a la caja de texto. Hay personas que sólo hacen uso del atributo for, pero hay algunos agentes de usuario que todavía no soportan esta forma de referenciación, así que procuramos mantener ambas formas para evitar incompatibilidades.

Si os fijais, la caja de texto usa el atributo maxlength, que nos permite limitar el número de caracteres que van a poder introducirse en ella. Si se conoce este límite, es más que recomendable hacer uso de este atributo, para ahorrarnos sustos si, por ejemplo, los datos van a guardarse en una Base de Datos y al usuario le da por meter un capítulo entero de El Quijote.

Además también es recomendable dotar a todos y cada uno de los controles del formulario del atributo title, explicando brevemente qué se debe hacer en ese control, y si es posible, informar de las limitaciones: obligatorio o no, tipos de datos que acepta, (sólo números, sólo letras, etc.) Con respecto a este mismo tema, en el texto del label, y para que el usuario tenga acceso a esta información a golpe de vista, suelo añadir también de forma muy breve, las limitaciones del campo. Las englobo en un span para poder manejarlas posteriormente de forma sencilla con CSS.

Por destacar otro detalle, en el ejemplo podéis ver que en el desplegable hago uso de optgroup para dividir los grupos de elementos que componen el control. Es importante que useis este elemento si vuestros desplegables necesitan subdividir en grupos los elementos, nada de usar option con guiones ni nada de eso.

<label for="combo">Desplegable <span class="obligatorio">(Obligatorio)</span><br />
  <select id="combo" name="combo" title="Desplegable con 5 opciones divididas en 2 grupos. (Obligatorio elegir una opción)">
    <optgroup label="Grupo 1">
      <option selected="selected" value="1">Opción 1</option>
      <option value="2">Opción 2</option>
    </optgroup>
    <optgroup label="Grupo 2">
      <option value="3">Opción 3</option>
      <option value="4">Opción 4</option>
      <option value="5">Opción 5</option>
    </optgroup>
  </select>
</label>

Ver ejemplo para el formulario en estado normal

Segunda etapa: Formulario con mensajes de error

Esta etapa, obviamente, no siempre va a ocurrir, pero debemos tener especial cuidado a la hora de controlarla, porque un formulario con mensajes de error poco claros, e incluso liosos o inexistentes, hará que todo el proceso se vaya al garete.

Mis formularios suelen tener tres formas de aviso distintas para los errores:

  • Mensaje general con una lista de puntos a comprobar
  • Estilos CSS distintos en los controles incorrectos
  • Mensaje informativo breve junto a cada control incorrecto

Todos estos mensajes han de destacar de forma muy clara por encima del aspecto normal del formulario, para que así el usuario pueda localizarlos y comprenderlos sin el menor esfuerzo.

Si observais el ejemplo, lo podreis ver claramente. Tonos rojos para todos los mensajes, un grosor de borde significativo para los controles incorrectos, y un pequeño texto junto a cada uno de ellos.

Mirando el código del mensaje general justo al comienzo del fieldset os dareis cuenta de que he usado el elemento big con un span interno que contiene un texto llamativo que luego oculto con CSS. Esto lo hago pensando en los usuarios que no tienen los estilos CSS activados. Puesto que no se percataran de los estilos con tonos rojos y demás, les doy un elemento "distinto" y un texto impactante para que su atención se centre sobre el mensaje de forma más sencilla.

<div class="mensaje error">
  <p><big><span>*** !ATENCIÓN!</span> Encabezado error</big></p>
  <p>Etiam porta semper nisl. Aenean lacus risus, condimentum id, pharetra in, dictum vel, quam. Maecenas non mauris ut dolor cursus dignissim.</p>
  <ul title="Lista de puntos a verificar">
    <li>Debes rellenar el campo obligatorio "Caja de Texto 1"</li>
    <li>El campo "Caja de Texto 2" no tiene un formato correcto. Sólo se aceptan caracteres alfanuméricos</li>
  </ul>
  <hr />
</div>

Ver ejemplo para el formulario con mensajes de error

Tercera etapa: Formulario ejecutado de forma satisfactoria

Esta es una etapa meramente informativa, y no es absolutamente necesario, ya que un formulario puede terminar con una redirección a otra página, con un mensaje simple porque no se necesite tener el formulario de nuevo, etc.

De todas formas la estructura es exactamente igual que la del mensaje general de errores de la etapa anterior, salvo que con unos estilos distintos en tonos "menos preocupantes" que el rojo. También, del mismo modo que antes, pienso en los usuarios con CSS desactivado colocando un mensaje llamativo que capte su atención incluso sin estilos.

Ver ejemplo para el formulario ejecutado satisfactoriamente

Poemas en XHTML

  • Miércoles, 29 de Junio de 2005 a las 15:51 CET
  • Guardado en: XHTML
    Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85

    Warning: sprintf() [function.sprintf]: Too few arguments in /home/armoniaspiralstatic/armonia.spiral-static.org/ecrire/tools/multicat/functions.php on line 85

Hace algunas semanas se comenzó a discutir en la lista de correo del grupo AccesoWeb del SIDAR sobre cómo se debe marcar de forma semántica y correcta un poema, o una canción, con XHTML. Se vertieron muchas opiniones, todas muy interesantes, pero bajo mi punto de vista, y desde el de otros tantos en la lista, la forma correcta sería la que voy a explicar a continuación.

Normalmente, un poema o una canción se componen de estrofas, y cada una de estas estrofas está formada por uno o varios versos. En XHTML no existe ningún elemento que se encargue explícitamente de marcar este tipo de textos, por lo que habría que recurrir a elementos existentes para conseguir un marcado correcto y semántico, y además, que sea accesible. Ahora bien, ¿qué elementos son los correctos?

Bajo mi punto de vista, se puede considerar cada estrofa de un poema, o de una canción, como un párrafo normal de texto, con la salvedad de que las lineas están "partidas", no son contínuas. Una de las opciones contrarias al uso del elemento p para marcar las estrofas era usar el elemento pre, y escribir el poema tal y como se quiere que aparezca. Para mí esto no es una opción válida, ya que no se le da al poema un marcado semántico adecuado, se obvian los párrafos, etc.

A raiz de la sugerencia de usar pre, alguien apuntó el uso de párrafos, pero añadiendo la propiedad CSS white-space con el valor pre para "imitar" el resultado del elemento pre, pero sin usarlo. Desgraciadamente esta opción tampoco me parece correcta. Un usuario con CSS desactivado no podría comprender que lo que esta leyendo es un poema, ya que los versos desaparecerían y solo vería párrafos.

Para mí, la mejor opción es usar párrafos para marcar las estrofas, y saltos de línea para separar los versos. Parece un poco contradictorio, porque el elemento br suele estar desaconsejado cuando hablamos de XHTML y demás, pero creo que en este caso hemos encontrado una situación en la que es, además de correcto, aconsejable usarlo.

Usando esta forma, nos aseguramos de que los usuarios con CSS desactivado puedan leer correctamente el poema. Pero se nos plantea otro problema, ¿qué ocurre con los lectores de pantalla? ¿Cómo leerian el poema estos lectores? Es ahora cuando saltan a la palestra una serie de propiedades CSS normalmente desconocidas para la gran mayoría: los estilos aurales.

Estos estilos sirven para controlar la forma en la que los lectores de pantalla van a leer nuestro documento. Desde las pausas, hasta la velocidad, pasando por el tono, etc. Desgraciadamente muy pocos lectores de pantallan soportan este tipo de estilos. Aún así es algo que está ahí, y que hay que aprovechar, puesto que es importante.

Teniendo en cuenta todo lo comentado, y siempre según mi punto de vista, la forma más correcta para marcar un poema sería la siguiente:

<p>Siempre nos piden que entendamos<br />
el punto de vista de los otros,<br />
sin importar si es anticuado,<br />
necio,<br />
asqueroso.</p>

<p>A uno le piden<br />
que entienda<br class="pausa" />
amablemente<br class="pausa" />
todos los errores de los otros,<br />
sus vidas desperdiciadas,<br />
sobre todo si son de edad avanzada.</p>

<p>Pero su edad es lo único<br />
en lo que nos fijamos.<br />
Han envejecido mal<br class="pausa" />
porque han vivido sin enfoque,<br />
se han negado a ver.<br />
¿Que no es culpa suya?</p>

<p>Se me pide que oculte<br />
mi opinión ante ellos<br class="pausa" />
por miedo a su miedo.</p>

<p>La edad no es un crimen,<br />
pero la vergüenza de una vida<br />
deliberadamente desperdiciada<br />
entre tantas vidas,<br />
deliberadamente desperdiciadas,<br  class="pausa" />
sí lo es.</p>

Siendo su CSS:

.pausa {pause-after:700ms;}

Como veis, hago uso de un estilo CSS con la propiedad pause-after asociado a algunos elementos br del marcado del poema para determinar una pequeña pausa al final de ese verso. Obviamente esto es muy personal, y según como interpretemos que debe ser la lectura del poema, tendremos que jugar con más propiedades aurales de CSS, como pitch, volume, etc.

Por cierto, el poema es de Charles Bukowsky, y se titula "Siempre nos piden que entendamos...":

Siempre nos piden que entendamos
el punto de vista de los otros,
sin importar si es anticuado,
necio,
asqueroso.

A uno le piden
que entienda
amablemente
todos los errores de los otros,
sus vidas desperdiciadas,
sobre todo si son de edad avanzada.

Pero su edad es lo único
en lo que nos fijamos.
Han envejecido mal
porque han vivido sin enfoque,
se han negado a ver.
¿Que no es culpa suya?

Se me pide que oculte
mi opinión ante ellos
por miedo a su miedo.

La edad no es un crimen,
pero la vergüenza de una vida
deliberadamente desperdiciada
entre tantas vidas,
deliberadamente desperdiciadas,
sí lo es.

Paginación: 1 2 3

Búsqueda

Acerca de este blog

Armonía es el blog personal de Juan G. Hurtado, (C. V.). Aquí se tratarán muchos temas, pero sobre todo los relacionados con la programación, la tecnología, el desarrollo y los estándares en la World Wide Web.

Si quieres puedes visitar también las galerias de fotos guardadas en su cuenta Flickr, o su colección de enlaces en del.icio.us.

Velas en la oscuridad Mano del autor del blog en blanco y negro Trozo del paisaje desde la ventana del autor del blog Palma de la mano del autor del blog en blanco y negro

Lectura

CSS Mastery, de Andy Budd
Portada del libro Bulleproof Web Design
Muy buen libro, escrito por Andy Budd en el que nos muestra un repaso muy bien detallado por infinidad de técnicas ingeniosas para conseguir que nuestras hojas de estilo "hagan magia"
[Leer revisión]
Bulletproof Web Design, de Dan Cedelhorm
Portada del libro Bulleproof Web Design
Un libro genial en el que Dan Cedelhorm nos enseña cómo blindar nuestras páginas para evitar que se "rompan" ante configuraciones no habituales de los navegadores de los visitantes, (aparte de otras muchas cosas)
[Leer revisión]
Agile Web Development With Rails, de Dave Thomas y David Heinemeier
Portada del libro Agile Web Development With Rails
Una perfecta introducción a Ruby on Rails, el framework de desarrollo Web que está causando furor en estos momentos...
[Leer revisión]

Contacto

  • e-Mail: juan.g.hurtado@gmail.com
  • Jabber: juan.g.hurtado@jabberes.org
  • Skype: juan.g.hurtado
  • Messenger: the_micro_cuts@hotmail.com