HTML semántico

Cuando desarrollamos sitios web normalmente no pensamos en usar etiquetas o herramientas que se salen del HTML que todo el mundo conoce. Pero lo que muchos no saben es que el HTML permite algunas cosas semánticas que habitualmente no se utilizan. También lo permite el XHTML, que fue el precursor de esto hace ya algún tiempo, aunque en este caso existen algunas reglas.

Antes de comenzar con lo que se podría hacer en un futuro en el HTML5, voy a poner un ejemplo en XHTML y a explicar brevemente su funcionamiento, ya que es algo distinto si comparamos la versión XHTML de la del HTML:

<ul role="navigation sitemap">
  <li href="/downloads/">Downloads</li>
  <li href="/docs/">Documentation</li>
  <li href="/news/">News</li>
</ul>

Como se puede ver, tampoco es que que haya mucho cambio… simplemente se incluye un atributo nuevo llamado role que permite una serie de parámetros. Y aquí llega lo interesante: la lista de parámetros es el secreto de la semántica, ya que es bastante extensa y permite hacer bastantes cosas.

Voy a destacar aquellos que me parecen más interesantes de cara a aplicaciones y a buscadores ya que, de cara al usuario esto no se verá nunca y no tiene aplicación. En resumen: esto está creado para las máquinas.

Los que habitualmente se usan como link rel=”algo”:

  • bookmark: Indica que ese enlace contiene información extendida del contenido actual.
  • cite: Indica que el contenido de destino es el origen de la cita actual.
  • contents: indica dónde encontrar la tabla de contenidos.
  • stylesheet: Indica la hoja de estilos que se ha de utilizar.

Los que podrían usarse dentro de contenedores (div y similares):

  • banner: Indica que ese bloque de contenido tiene el nombre del sitio y la título principal.
  • complementary: Indica que ese contenido no es el principal, pero lo complementa.
  • contentinfo: Ofrece meta-información del contenido de la página.
  • definition: Da la definición de una palabra o concepto.
  • main: Es el contenido principal de la página.
  • navigation: Indica que eso es la navegación principal de la página.
  • note: Ese contenido es una anotación, acotación o nota del contenido principal.
  • search: Indica que esa zona marca permite realizar búsquedas.

Para acabar, encontramos los elementos más especiales… en este caso habría que ver dónde ubicarlos (pueden ser contenedores o simples span):

  • alert: Mensajes importante y normalmente limitados en tiempo.
  • article: Sección de la página que forma parte del contenido principal pero que tiene significado independiente.
  • heading: La cabecera de la una sección de la página.
  • img: Una colección de imágenes que unidas formas una imagen única.
  • log: Sección que indica una serie de información antigua en relación con el contenido principal.
  • menubar: Menú, habitualmente horizontal, que suele estar siempre visible.
  • region: Una sección grande de la página o del sitio que el autor cree lo suficientemente importante para ser incluida en un sumario.
  • separator: Separador de secciones o de grupos de “menuitems”.
  • status: Contiene información interesante, pero no tan importante como un “alert”.

La cuestión principal es que esto está pensado para el XHTML… pero, ¿se puede usar en HTML5? La respuesta es sí. Aunque hay que decir que normalmente las etiquetas ya llevan implícitos algunos roles… por ejemplo, un <h1> ya lleva implícito un “heading”. O sea, que si se cumples las normas (no sobreeescribir lo que ya se da por implícito y no poner roles a cosas que no se permiten), debería funcionar. Un ejemplo:

<figure role="img" aria-labelledby="fish-caption">
  <pre>
 o           .'`/
     '      /  (
   O    .-'` ` `'-._      .')
      _/ (o)        '.  .' /
      )       )))     >< <
      `\  |_\      _.'  '. \
        '-._  _ .-'       '.)
            `\__\
  </pre>
  <figcaption id="fish-caption">
    Joan G. Stark, "fish".
    October 1997. ASCII on electrons. 28×8.
  </figcaption>
</figure>

Para tener esto en cuenta, es importante ver las anotaciones ARIA según lo que nos espera en HTML5, donde vienen detalladas las excepciones de las que os hablaba antes…

Sin duda, bastante interesante esto que aportan los roles, y su actuación sobre los buscadores, ya que ayudan a mejorar las búsquedas de aquellos contenidos que se encuentran en los roles más concretos y a los que se les da más importancia…

HTML MicroDatos: Personas y Empresas

Tras ver el otro día qué son los MicroDatos, hoy voy a explicaros lo que antiguamente eran los hCard. Este microformato es de los más extendidos y extensibles, y ahora se ha convertido, usando la misma base, en un MicroDato bastante interesante, sobretodo porque ya viene documentado en el HTML 5.

En la actualidad conozco 3 formatos en los que se habla de cómo dar formato a las fichas de personas y/o empresas… que son:

Teniendo en cuenta que de los 3, el primero es el más completo, y que tal como dice Google en los otros 2, es capaz de interpretar similitudes entre unos y otros, voy a enfocarme en el más completo de todos.

  • fn: Es el nombre completo (u organización), el campo principal.
  • n: Es un contenedor para indicar el nombre (u organización) de forma más específica… puede incorporar los siguientes sub-elementos:
    • family-name: Da el apellido(s) familiar de la persona o el nombre completo de la organización.
    • given-name: El nombre (de pila) que habitualmente se usa con la persona.
    • additional-name: Si tiene un nombre adicional.
    • honorific-prefix: Si tiene un prefijo honorífico.
    • honorific-suffix: Si tiene un sufijo honorífico.
  • nickname: El nick o sobrenombre de la persona u organización.
  • photo: Será una URL con la fotografía de la persona u organización.
  • bday: Fecha de cumpleaños de la persona o de creación de la organización.
  • adr: indica la dirección postal de la persona u organización. Es un contenedor formado por:
    • type: Indica el tipo de dirección, que puede ser uno de los siguientes:
      • dom: Doméstico.
      • intl: Internacional.
      • postal: Entrega postal.
      • parcel: Entrega de paquetería.
      • home: Residencial.
      • work: Trabajo.
      • pref: De todas las opciones, la preferida.
    • post-office-box: Apartado de correos.
    • extended-address: Dirección extendida.
    • street-address : La calle.
    • locality: Población.
    • region: Provincia.
    • postal-code: Código postal.
    • country-name: País.
  • label: Dirección de entregas de la persona u organización (viene a ser el nombre del sitio de entrega). Puede contener:
    • type: Son los mismos que los anteriores de direcciones.
    • value: La información, con formato.
  • tel: El teléfono (esta era muy obvia)… Puede incorporar un par de elementos:
    • type: Indica el tipo de teléfono, que puede ser uno de los siguientes:
      • home: El de casa.
      • msg: Envío de SMS.
      • work: Trabajo.
      • voice: De voz.
      • fax: Fax.
      • cell: Móvil / Celular.
      • video: Vídeo conferencia.
      • pager: Buscapersonas.
      • bbs: BBS.
      • modem: Módem.
      • car: Teléfono en el coche.
      • isdn: Línea RDSI.
      • pcs: Servicio de comunicación personal.
      • pref: De todas las opciones, la preferida.
    • value: La información, con el formato correspondiente.
  • email: La dirección de correo electrónico. También es un contenedor y puede llevar lo siguiente:
    • type: Indica el tipo de correo electrónico, que puede ser uno de los siguientes:
      • internet: La mayoría de cuentas de correo.
      • x400: cuenta de tipo x.400.
      • pref: De todas las opciones, la preferida.
    • value: La información, con el formato correspondiente.
  • mailer: Indica el software de correo que usa la persona.
  • tz: Indica el desfase horario de la persona (la Zona horaria con respecto al UTC). Por ejemplo: +06:30.
  • geo: Indica la la latitud y longitud. Por ejemplo: +41.383333;+2.183333.
  • title: El puesto de trabajo o función de la persona.
  • role: El rol, departamento o categoría profesional.
  • logo: El logotipo de la persona u organización, que será una dirección URL.
  • agent: Persona que actúa de intermediario de contacto (secretaria, etc…).
  • org: Nombre detallado de la organización. Puede incorporar algunos elementos:
    • organization-name: Nombre de la organización / empresa.
    • organization-unit: Unidad o Subsector de la empresa u organización.
  • categories: Categorías, palabras clave o lugar donde categorizar esa persona u organización.
  • note: Añade algunos comentarios a la ficha de la persona u organización.
  • rev: Última fecha de revisión de la información que se ofrece.
  • sort-string: Forma de ordenar la información de la persona u organización.
  • sound: Sonido relacionado con la persona u organización. Ha de corresponder con una dirección URL.
  • url: La dirección URL de la persona u organización.
  • class: Cómo ha de tratarse la información que se ofrece. Puede tener estos valores:
    • public: Pública.
    • private: Privada.
    • confidential: Confidencial.
  • impp: Ofrece el sistema de comunicación instantánea con la persona u organización.
    • type: Indica el tipo de sistema, que puede ser uno de los siguientes:
      • personal o business: Si es personal o de negocios.
      • home o work o mobile: Si está en casa, en el trabajo o es móvil.
      • pref: De todas las opciones, la preferida.
    • value: La dirección URL, con el formato correspondiente.

Y ahora el ejemplo:

<section id="jack" itemscope itemtype="http://microformats.org/profile/hcard">
  <h1 itemprop="fn">Jack Bauer</h1>
  <div itemprop="n">
    <meta itemprop="given-name" content="Jack">
    <meta itemprop="family-name" content="Bauer">
  </div>
  <img itemprop="photo" alt="" src="jack-bauer.jpg">
  <p itemprop="org" itemscope>
    <span itemprop="organization-name">Counter-Terrorist Unit</span>
    (<span itemprop="organization-unit">Los Angeles Division</span>)
  </p>
  <p>
    <span itemprop="adr" itemscope>
      <span itemprop="street-address">10201 W. Pico Blvd.</span><br>
      <span itemprop="locality">Los Angeles</span>,
      <span itemprop="region">CA</span>
      <span itemprop="postal-code">90064</span><br>
      <span itemprop="country-name">United States</span><br>
    </span>
    <span itemprop="geo">34.052339;-118.410623</span>
  </p>
  <h2>Assorted Contact Methods</h2>
  <ul>
    <li itemprop="tel" itemscope>
      <span itemprop="value">+1 (310) 597 3781</span> <span itemprop="type">work</span>
      <meta itemprop="type" content="pref">
    </li>
    <li><a itemprop="url" href="http://en.wikipedia.org/wiki/Jack_Bauer">I'm on Wikipedia</a>
    so you can leave a message on my user talk page.</li>
    <li><a itemprop="url" href="http://www.jackbauerfacts.com/">Jack Bauer Facts</a></li>
    <li itemprop="email"><a href="mailto:j.bauer@la.ctu.gov.invalid">j.bauer@la.ctu.gov.invalid</a></li>
    <li itemprop="tel" itemscope>
      <span itemprop="value">+1 (310) 555 3781</span> <span>
      <meta itemprop="type" content="cell">mobile phone</span>
    </li>
  </ul>
  <p itemprop="note">If I'm out in the field, you may be better off contacting <span
  itemprop="agent" itemscope itemtype="http://microformats.org/profile/hcard"><a
  itemprop="email" href="mailto:c.obrian@la.ctu.gov.invalid"><span
  itemprop="fn"><span itemprop="n" itemscope><span
  itemprop="given-name">Chloe</span> <span
  itemprop="family=name">O'Brian</span></span></span></a></span>
  if it's about work, or ask <span itemprop="agent">Tony Almeida</span>
  if you're interested in the CTU five-a-side football team we're trying to get going.</p>
  <ins datetime="2008-07-20T21:00:00+01:00">
    <span itemprop="rev" itemscope>
      <meta itemprop="type" content="date-time">
      <meta itemprop="value" content="2008-07-20T21:00:00+01:00">
    </span>
    <p itemprop="tel" itemscope><strong>Update!</strong>
    My new <span itemprop="type">home</span> phone number is
    <span itemprop="value">01632 960 123</span>.</p>
  </ins>
</section>

Si queremos comprobar si este fragmento sería válido de cara a Google, podemos usar su herramienta para comprobarlo…

http://javiercasares.net/jack-bauer.html

Que en los resultados de Google quedaría similar a esto:

HTML MicroDatos (antes MicroFormatos, antes RDFa)

Los que me conocéis sabéis que desde hace tiempo he sido un seguidos de los microformatos, y una de las mejoras que descubrí al hacer la serie de artículos de HTML 5 fue la incorporación “oficial” de lo que antiguamente se denominaba microformatos en lo que actualmente pasan a ser los midrodatos (microdata en inglés) y que vienen de la antigua implementación denominada RDFa.

Pero ¿qué son los microdatos? Pues básicamente son pequeñas mejoras del HTML que, en apariencia no han de modificar nada, pero que hacen que las máquinas (buscadores, navegadores, aplicaciones…) sean capaces de interpretar y mejorar semánticamente el significado de parte de la información que se muestra por pantalla.

Hasta ahora los microformatos eran bastante complejos de integrar ya que no existía un sistema estándar, algo que con los microdatos se acaba consiguiendo. Algunos ejemplos muy básicos podrían ser estos:

<div itemscope>
  <p>My name is <span itemprop="name">Elizabeth</span>.</p>
</div>

o este:

<div itemscope>
  <p>My name is <span itemprop="name">Neil</span>.</p>
  <p>My band is called <span itemprop="band">Four Parts Water</span>.</p>
  <p>I am <span itemprop="nationality">British</span>.</p>
</div>

o este:

<div itemscope>
  <img itemprop="image" src="google-logo.png" alt="Google">
</div>

Hasta aquí no hay mucho que decir… aunque estos ejemplos son tan sencillos como, casi, me atrevería a decir que inútiles, ya que no se especifica ningún sistema identificativo para que se pudieran interpretar de forma semántica.

Los microdatos pueden anidarse entre sí, lo que los convierte en una herramienta escalable, además de poderse agrupar por distintos elementos:

<div itemscope id="amanda" itemref="a b"></div>
<p id="a">Name: <span itemprop="name">Amanda</span></p>
<div id="b" itemprop="band" itemscope itemref="c"></div>
<div id="c">
  <p>Band: <span itemprop="name">Jazz Band</span></p>
  <p>Size: <span itemprop="size">12</span> players</p>
</div>

Como decía, hasta ahora los ejemplos son “inútiles” ya que no siguen un estándar… para ello se integra la posibilidad de informar de un “tipo”. Los tipo se darán en referencia a una dirección URL en la que se informa de la estructura de cada elemento.

<section itemscope itemtype="http://example.org/animals#cat">
  <h1 itemprop="name">Hedral</h1>
  <p itemprop="desc">Hedral is a male american domestic shorthair, with a fluffy black fur with white paws and belly.</p>
  <img itemprop="img" src="hedral.jpeg" alt="" title="Hedral, age 18 months">
</section>

¿Y qué elementos son los que han de incorporar los microdatos?

  • itemscope
  • itemtype
  • itemid
  • itemref
  • itemprop

itemscope

Este será el indicador de que el bloque, ese elemento, será el contenedor de información importante. Es un elemento booleano, es decir, se pone o no se pone… y ya está.

itemtype

Al indicar un itemscope podemos querer indicar qué tipo de información vamos a encontrar, que diccionario, que vocabulario vamos a utilizar. Para ello indicaremos este atributo que contendrá una dirección URL donde encontrar la información correspondiente.

itemid

Este atributo puede dar información sobre un elemento común que encontremos en el resto de Internet. Viene a ser como crear una ficha única (o no) que contenga la información que queremos dar.

itemref

Si dentro del contenido queremos hacer referencia a varios elementos, podemos asignarles como un nombre a cada uno de ellos. Para eso usaremos el itemref, que será el que haga referencia a los distintos elementos.

itemprop

Es la propiedad y el valor en sí que queremos indicar. Simple y llanamente.

Y, como último ejemplo:

<!DOCTYPE HTML>
<html>
  <head>
    <title>Photo gallery</title>
  </head>
  <body>
    <h1>My photos</h1>
    <figure itemscope itemtype="http://n.whatwg.org/work" itemref="licenses">
      <img itemprop="work" src="images/house.jpeg" alt="A white house, boarded up, sits in a forest.">
      <figcaption itemprop="title">The house I found.</figcaption>
    </figure>
    <figure itemscope itemtype="http://n.whatwg.org/work" itemref="licenses">
      <img itemprop="work" src="images/mailbox.jpeg" alt="Outside the house is a mailbox. It has a leaflet inside.">
      <figcaption itemprop="title">The mailbox.</figcaption>
    </figure>
    <footer>
      <p id="licenses">All images licensed under the <a itemprop="license" href="http://www.opensource.org/licenses/mit-license.php">MIT license</a>.</p>
    </footer>
  </body>
</html>

El resultado de este ejemplo es que, según la información que encontremos en esta URL: http://n.whatwg.org/work tenemos que:

  • work: images/house.jpeg
  • title: The house I found.
  • license: http://www.opensource.org/licenses/mit-license.php

y

  • work: images/mailbox.jpeg
  • title: The mailbox.
  • license: http://www.opensource.org/licenses/mit-license.php

Y esto es todo… y a lo largo de los próximos días os pondré ejemplos de elementos que ya han sido creados para un objetivo claro, y que los buscadores podrían ya utilizar para extraer información.

Para qué navegador he de programar

En muchas ocasiones escucho una grandiosa frase del estilo: es que eso que me dices no funciona en Internet Explorer 6. A parte de que Explorer 6 es un producto caducado, y no lo digo yo, lo dice la propia Microsoft con una página sobre el upgrade a Explorer 8 que me parece especialmente divertida por la imagen que ofrece (verdad que no beberías leche caducada hace 9 años?), creo que vale la pena hacer cosas para cumplir el Principio de Pareto, también conocido como la regla del 80-20.

¿Esto que significa? Pues que, como en muchas ocasiones, Yahoo! dispone de una pequeña gráfica que viene a explicar qué navegadores son los que hay que utilizar, y lo lanza una vez por quarter (cada 4 meses). En este caso voy a hacer referencia a la que está en el momento de escribir esta entrada, que es el 1Q2010.

Windows XPWindows 7Mac OS 10.5Mac OS 10.6
x
x
xx
xxx
xx

¿Qué interpretación se puede hacer de esta tabla? Por un lado, que para determinadas versiones antiguas hay que simplemente obviar: Firefox < 3, Explorer < 7, Chrome < 4 y Safari < 4. Opera queda excluido por ser un navegador raro, como lo llaman ellos. Yo en estos casos lanzaría un mensaje de aviso de que tu navegador está caducado, actualiza gratis….

¿Qué otras más cosas? Pues que los navegadores nuevos pueden no estar preparados para ser 100% compatibles en los sistemas operativos, como pasa con Chrome.

En resumen: ¿para qué hay que desarrollar? Hay que desarrollar para Explorer 7 y 8 además de Firefox 3.6 (si hablamos de Windows) y para Safari 4 (si hablamos de Mac OS). Aunque no venga, yo para Linux dejaría el uso de Firefox 3.6 igualmente.

Con esto llegaremos a más del 80% de la población de Internet, con un trabajo simple, sin necesidad de dedicarle tiempo a la mayoría de tonterías que pueden dar los navegadores “raros” (entre comillas).

Otra cosa, como añadido… en un proyecto que tenemos actualmente en marcha, hemos puesto un mensaje de aviso a los usuarios de Explorer 5 y 6, y, la gente SÍ que actualiza su navegador, ya que desde que hemos puesto el mensaje, el 80% de las consultas para soporte que llegaban sobre “que la web no se veía bien”, han pasado a ser un 20% de las quejas… y si le sumamos a que según la analítica sólo tenemos un 10% de usuarios de Explorer < 7…

En definitiva, que cada uno haga lo que quiera con sus sitios, pero yo hace ya un tiempo que me he cansado de dar soporte y trabajar extra por culpa de un 10% de los usuarios de Internet que no se preocupan de su seguridad… así que si ellos no se preocupan por navegar correctamente, yo tampoco me preocupo por gente que no quiere preocuparse… y que seguramente luego me va a hacer perder tiempo.

Actualización: para los que me habéis preguntado, así se ve TuManitas en Explorer 6…

Cómo precargar elementos CSS, JS y similares

Seguro que alguna vez habéis pensado cómo hacer que vuestro sitio vaya todavía más rápido. Pues hay forma de hacerlo, sobretodo si la gente suele visitar vuestra página principal y luego sigue navegando.

La cuestión es que en muchas ocasiones los CSS y JavaScript de las páginas principales de los sitios difieren mucho del resto de la web… ¿qué hacer para mejorar esto? Pues tener un CSS y JS específico sólo para la página principal y pre-cargar los CSS y JS del resto de la página en la caché del navegador.

Para esto, que puede ser un poco complejo, podemos usar un código que he encontrado y que parece funcionar correctamente en todos los navegadores.


window.onload = function () {
  var i = 0, max = 0, o = null,
    preload = [
      'http://example.com/imagen.png',
      'http://example.com/javascript.js',
      'http://example.com/estilos.css'
    ],
    isIE = navigator.appName.indexOf('Microsoft') === 0;
  for (i = 0, max = preload.length; i < max; i += 1) {
    if (isIE) {
      new Image().src = preload[i];
      continue;
    }
    o = document.createElement('object');
    o.data = preload[i];
    //o.width = 1;
    //o.height = 1;
    //o.style.visibility = "hidden";
    //o.type = "text/plain"; // IE
    o.width  = 0;
    o.height = 0;
    document.body.appendChild(o);
  }
};

Con esto en la página principal conseguiríamos que se pre-cargasen en caché (en background) esas 3 direcciones que podrían corresponder a la imagen del CSS Sprite, la hoja de estilo y las funciones JavaScript.

Aunque esto a priori podría hacer que la página principal vaya algo más lenta, la carga de las páginas sucesivas puede aumentar en un 30% la velocidad.

Buscando desarrollador web

Hoy comenzamos el día con una oferta de trabajo, que tal y como está la cosa, no es moco de pavo. El perfil es de desarrollador PHP y MySQL.

Quién se incorpore estará bajo mi supervisión y se dedicará principalmente a la continuidad de un proyecto que he estado elaborando estos últimos meses, por lo que si le gusta la emoción no ha podido caer en un sitio mejor…

También es interesante que tenga las ideas claras y que le guste Internet, ya que este proyecto se mueve a una velocidad bastante rápida y la evolución puede necesitar ir a la misma velocidad.

Con respecto a la jornada laboral, puede ser media jornada (si fuera de mañanas sería de 09:30 a 13:30; en caso de ser de tardes sería de 15:00 a 19:00) o jornada completa (de lunes a jueves de 09:30 a 19:30 y los viernes de 09:30 a 14:30). La zona de trabajo es Plaça de les Glories en Barcelona.

La retribución ahora mismo no la sé, pero lo más probable es que sea por convenio (que si no recuerdo mal, está por encima de lo mileurista).

Para enviar el curriculum y lo que queráis (algún proyecto que hayáis hecho de ejemplo o similar si os parece conveniente) podéis hacerlo en la cuenta de correo simple@kisslab.com donde una amable secretaria os atenderá (NOTA: la amable secretaria puede no ser tan amable, puede no ser secretaria, puede ser un tío e incluso diría que podría ser yo mismo).

Tanto va el webmaster a la fuente…

…que al final: Verdana.

Seguramente si eres de los que habitualmente hace sitios web te planteas usar tipos de letra estándar para que todo el mundo lo vea correctamente, en Windows, Linux, Mac, etc… El otro día, por un proyecto que estoy desarrollando, tuve que ponerme a investigar y he sacado “estas familias”:

Arial, Helvetica
style="font-family: Arial, Helvetica, sans-serif;"

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.

‘Arial Black’, Gadget
style="font-family: 'Arial Black', Gadget, sans-serif;"

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.

‘Arial Narrow’
style="font-family: 'Arial Narrow', sans-serif;"

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.

‘Century Gothic’
style="font-family: 'Century Gothic', sans-serif;"

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.

Copperplate, ‘Copperplate Gothic Light’
style="font-family: Copperplate, 'Copperplate Gothic Light', sans-serif;"

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.

‘Courier New’, Courier
style="font-family: 'Courier New', Courier, monospace;"

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.

Georgia
style="font-family: Georgia, Serif;"

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.

‘Gill Sans’, ‘Gill Sans MT’
style="font-family: 'Gill Sans', 'Gill Sans MT', sans-serif;"

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.

Impact, Charcoal
style="font-family: Impact, Charcoal, sans-serif;"

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.

‘Lucida Sans Unicode’, ‘Lucida Grande’
style="font-family: 'Lucida Sans Unicode', 'Lucida Grande', sans-serif;"

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.

‘Lucida Console’, Monaco
style="font-family: 'Lucida Console', Monaco, monospace;"

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.

Tahoma, Geneva
style="font-family: Tahoma, Geneva, sans-serif;"

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.

‘Times New Roman’, Times
style="font-family: 'Times New Roman', Times, serif;"

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.

‘Trebuchet MS’, Helvetica
style="font-family: 'Trebuchet MS', Helvetica, sans-serif;"

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.

‘Palatino Linotype’, ‘Book Antiqua’, Palatino
style="font-family: 'Palatino Linotype', 'Book Antiqua', Palatino, serif;"

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.

Verdana, Geneva
style="font-family: Verdana, Geneva, sans-serif;"

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.

HTML5 en Internet Explorer 8

Hace cosa de 2 años comencé a publicar alguna cosilla sobre HTML5. La verdad es que no era gran cosa, pero lo suficiente para hacernos una idea de que en SEO la cosa no iría nada mal. Y como hace ya 3 meses que puse este sitio web en HTML5 me he decidido ha hacer algún repaso poco a poco sobre los cambios.

Antes de nada comentar que “los buscadores” parece que ya leen el HTML5 y le están dando ya peso a las cosas como se las tiene que dar. Al cabo de las 4 semanas, sin cambios aparentes (ya que fui publicando lo mismo sin tener ningún enlace fuerte ni nada parecido) el tráfico del blog aumentó un 30%.

Eso sí, uno de los problemas más grandes que me he encontrado es que el CSS no se veía bien en Internet Explorer 8. Pero he encontrado una forma “un poco chapucera” pero efectiva de que funcione. Digo chapucera porque, como siempre, hay que meterle “algunas cosillas” al Explorer para que las trate antes de pintar por pantalla. Aún así, que conste, que no me quejo del navegador ya que HTML5 no es un estándar todavía y no tiene ninguna obligación de darle soporte, aunque he de reconocer que “lo poco que he usadO” en Opera, Chrome y Firefox se ve.

El problema

Si tenemos un código como el siguiente, todos los navegadores excepto Explorer saben tratar el nuevo DOM anidado…


<style type="text/css">
article { display: block; border: 1px solid red; }
</style>
...
<article>
<h1>Bienvenido a JavierCasares.com</h1>
<div>Esto es un mensaje de prueba.</div>
</article>

En este caso, el DOM debería ser anidado de forma que “article” incluye “h1″ que a su vez incluye “div”. Pero no, Explorer aún tiene que “article” está al mismo nivel que “h1″ que, en este caso, sí que incluye “div”.

La solución

El pollo gordo viene a ser que el DOM no tiene en cuenta los elementos como tales, por lo que “hay que crearlos” en Explorer y así los tendrá en cuenta a la hora de poder ofrecer diseño con CSS o ejecuciones de procesos con JavaScript.

para ello, hay que añadir en el “head” de nuestra página el siguiente código:


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

De esta forma creamos todos los nuevos elementos (tags) del HTML5 que no existen en versiones anteriores y “de repente” la web se verá igual que en el resto de navegadores si navegamos con Internet Explorer 8…

NOTA: no tengo Internet Explorer 7, por lo que no sé si funcionará en versiones anteriores… aunque la teoría dice que debería.

Letras especiales del HTML

Siempre que diseño una web he de tener en cuenta el hacerlas en ISO o UTF, sobretodo porque aunque la web esté en un formato, el editor de textos del ordenador suelo tenerlo en el contrario (¿para qué va a coincidir?)…

En fin, simplemente esto es una tabla en la que encontrar los caracteres extraños y su conversión a código HTML:

SímboloCódigoSímboloCódigoSímboloCódigoSímboloCódigo
&lsquo;&rsquo;&sbquo;&ldquo;
&rdquo;&bdquo;&dagger;&Dagger;
&permil;&lsaquo;&rsaquo;&spades;
&clubs;&hearts;&diams;&oline;
&larr;&uarr;&rarr;&darr;
&trade;"&quot;&&amp;&frasl;
<&lt;>&gt;&ndash;&mdash;
 &nbsp;¡&iexcl;¢&cent;£&pound;
¤&curren;¥&yen;¦&brvbar;§&sect;
¨&uml;©&copy;ª&ordf;«&laquo;
¬&not;­&shy;®&reg;¯&macr;
°&deg;±&plusmn;²&sup2;³&sup3;
´&acute;µ&micro;&para;·&middot;
¸&cedil;¹&sup1;º&ordm;»&raquo;
¼&frac14;½&frac12;¾&frac34;¿&iquest;
À&Agrave;Á&Aacute;Â&Acirc;Ã&Atilde;
Ä&Auml;Å&Aring;Æ&AElig;Ç&Ccedil;
È&Egrave;É&Eacute;Ê&Ecirc;Ë&Euml;
Ì&Igrave;Í&Iacute;Î&Icirc;Ï&Iuml;
Ð&ETH;Ñ&Ntilde;Ò&Ograve;Ó&Oacute;
Ô&Ocirc;Õ&Otilde;Ö&Ouml;×&times;
Ø&Oslash;Ù&Ugrave;Ú&Uacute;Û&Ucirc;
Ü&Uuml;Ý&Yacute;Þ&THORN;ß&szlig;
à&agrave;á&aacute;â&acirc;ã&atilde;
ä&auml;å&aring;æ&aelig;ç&ccedil;
è&egrave;é&eacute;ê&ecirc;ë&euml;
ì&igrave;í&iacute;î&icirc;ï&iuml;
ð&eth;ñ&ntilde;ò&ograve;ó&oacute;
ô&ocirc;õ&otilde;ö&ouml;÷&divide;
ø&oslash;ù&ugrave;ú&uacute;û&ucirc;
ü&uuml;ý&yacute;þ&thorn;ÿ&yuml;
Α&Alpha;α&alpha;Β&Beta;β&beta;
Γ&Gamma;γ&gamma;Δ&Delta;δ&delta;
Ε&Epsilon;ε&epsilon;Ζ&Zeta;ζ&zeta;
Η&Eta;η&eta;Θ&Theta;θ&theta;
Ι&Iota;ι&iota;Κ&Kappa;κ&kappa;
Λ&Lambda;λ&lambda;Μ&Mu;μ&mu;
Ν&Nu;ν&nu;Ξ&Xi;ξ&xi;
Ο&Omicron;ο&omicron;Π&Pi;π&pi;
Ρ&Rho;ρ&rho;Σ&Sigma;σ&sigma;
Τ&Tau;τ&tau;Υ&Upsilon;υ&upsilon;
Φ&Phi;φ&phi;Χ&Chi;χ&chi;
Ψ&Psi;ψ&psi;Ω&Omega;ω&omega;

Micrositios

19pagesEn muchas ocasiones las empresas tienen que lanzar productos pequeños, sitios específicos que no van a necesitar más que unas pocas páginas y casi nada de actualización.

Me han pasado un sitio web / software que permite precisamente eso: crear micrositios de hasta 19 páginas.

El sistema es muy sencillo (se puede ver un vídeo presentación en el que queda muy claro). Además no necesita base de datos y permite crear varios templates y usarlos en nuestro proyecto.

El secreto del éxito de muchos sistemas a veces es su sencillez, y, como digo, este es el caso de uno de ellos… un simple programita en PHP que, a excepción de los diseños, puede ser utilizado por cualquiera sin necesidad de conocimientos de HTML o programación de ningún tipo.

Si alguien quiere montarse su sitio web, ahora puede hacerlo de una forma sencilla, y sin excusas de ningún tipo.