Por qué pasamos de marcos

Aunque por el título pueda parecer lo contrario, no tengo nada contra nadie que se llame Marcos. Hablamos, naturalmente, de los marcos de HTML, los famosos frames, uno de los más odiados y más amados inventos de Netscape.

Se sabía. Se veía venir. Se lo dijeron. Los marcos eran una mala idea. Pero aun así, los implementaron.

¿Y por qué es tan mala idea?, te estarás preguntando. He aquí el porqué.

Los marcos van en contra de la propia esencia del HTML

Es como si inventaras el tapón para mangueras.

El objetivo del lenguaje HTML es dotar a un texto de estructura lógica: párrafos, listas, citas, etc. En HTML, no dices cómo se representa cada cosa; únicamente qué es cada cosa. El cómo se representa depende del navegador que estés usando. En un navegador gráfico, los títulos saldrán más grandes, los párrafos separados entre sí, saldrán marcadores en las listas, etc. Un sintetizador de voz hará pausas, inflexiones en la voz, utilizará sonidos auxiliares, etc. Un motor de búsqueda lo ignorará todo y se dedicará simplemente a indexar las palabras. Etc., etc.

Esto es el punto fuerte de HTML: es flexible, cualquier documento se adapta a cualquier modo de navegar. Cualquier aplicación puede obtener el documento y representarlo de la mejor manera posible.

Los marcos rompen con ese esquema y lo vuelven inservible. Los marcos no son información lógica, sino de presentación. No dice qué es cada cosa, sino dónde está cada cosa. Esto, obviamente, sólo tiene sentido para navegadores gráficos. Para todas las demás aplicaciones, en las que el concepto de "dónde" no tiene ningún significado (motores de búsqueda, sintetizadores de voz, etc.), el documento puede fácilmente tornarse inaccesible, o difícilmente accesible en el mejor de los casos.

En cualquier caso, introducen una componente de presentación en un lenguaje cuya misión es describir estructuras lógicas. Si lo que queremos es especificar el modo en que se representan nuestros documentos, debemos usar hojas de estilo, que son el complemento del HTML y la herramienta apropiada para ello.

Pero si esto no es razón suficiente para ti (lo cual me hace sospechar que no tienes muy claro por qué estás haciendo páginas para la Web), aquí tienes una ristra más de buenos motivos para evitar el uso de marcos.

No se puede enlazar a una combinación particular de marcos

Una de las primeras cosas que se aprende del diseño web, es que cada recurso tiene un "nombre propio" que lo identifica y lo distingue de todos los demás. Esto muy importante, porque la esencia de la Web es que todos los recursos que forman parte de ella se encuentran enlazados entre sí (y de ahí su nombre). Naturalmente, para que un recurso sea referenciado por otro, necesita algo que lo identifique. En la red, ese identificador es un URI (identificador uniforme de recursos).

Las páginas web suelen identificarse con un tipo especial de URI llamado URL (localizador uniforme de recursos), que especifica dónde está localizado dicho recurso. Es la cadena que aparece en la barra de direcciones (por ejemplo, el URL de este documento es http://html.conclase.net/articulos/problemasmarcos).

Pues bien, resulta que este esquema se rompe con las páginas con marcos.

Una página con marcos está compuesta de dos grupos de elementos: por un lado el documento HTML que contiene la definición de los marcos (el elemento FRAMESET) junto con el estado inicial de la página, y por otro lado los documentos HTML que constituyen el contenido de cada marco, y que se almacenan por separado. El URL de la página con marcos es siempre el del documento que contiene el FRAMESET. Si comenzamos a navegar por el sitio, se van cargando páginas nuevas en cada marco, pero el URL es siempre el mismo. Si cualquier persona escribe ese URL en la barra de direcciones de su navegador, siempre llegará al estado inicial de la página web.

Eso quiere decir que si queremos hacer un enlace a una página particular... no podemos. Es decir, los marcos están impidiendo en gran medida el objetivo primario de la Web: enlazar unos documentos con otros. A lo sumo, lo más que podemos hacer es enlazar con el FRAMESET y dar instrucciones para avanzar desde allí.

Naturalmente, podríamos enlazar directamente con el documento HTML que nos interesa, pero como hemos quitado deliberadamente los elementos de navegación para ponerlos en un marco separado, llegaremos a una página sin salida, sin herramientas de navegación.

Dan problemas con los buscadores

Actualmente casi todos los motores de búsqueda conocen la sintaxis de los marcos y son capaces de seguir e indexar todos los documentos enlazados desde los documentos que forman el estado inicial de la página. Sin embargo, imagina esta situación: alguien busca algo en un buscador y da con uno de tus documentos. No con el FRAMESET, sino con uno de los documentos que, en teoría, debería ir en un marco. El usuario pincha, llega al documento y... no hay marcos, no hay elementos de navegación.

Sólo se puede cambiar el contenido de un marco al mismo tiempo

Imagina esta situación. Tenemos tres marcos. En el primero tenemos un índice general de capítulos. En el segundo tenemos un subíndice de secciones, y en el tercero los contenidos de la sección que queremos presentar. Al elegir un capítulo del índice de capítulos, queremos que cambien los contenidos del índice de secciones de ese capítulo, y que se muestren los contenidos correspondientes a la primera sección del capítulo elegido.

Pero eso no es posible, porque al elegir uno de los capítulos del índice general, sólo podemos cambiar el contenido de uno de los otros dos marcos.

Añaden más complejidad de la necesaria

Esto es especialmente cierto en páginas con más de dos marcos, sobre todo si queremos que cambien a la vez los contenidos de más de uno de ellos con los métodos de los que hablamos más adelante.

Hay que tener en cuenta que se tarda más en cargar dos documentos pequeños por separado que uno solo más grande que contuviera la suma de los dos (esto es así debido a la naturaleza del protocolo de red utilizado en Internet). Esto es especialmente sensible en lugares con conexiones muy lentas.

Más problemillas

  • El título deja de ser informativo. El título del documento es siempre el del documento que contiene el FRAMESET, y no el del documento individual que estamos leyendo.
  • En general no es posible almacenar una combinación específica de marcos en la lista de favoritos. Algunos navegadores sí pueden, pero otros no.
  • Los identificadores de fragmento dejan de ser útiles, porque no se puede apuntar hacia ellos, ya que si lo hacemos nos volvemos a quedar sin barra de navegación.
  • En cuanto hay más de dos marcos, la navegación por la historia del navegador (con los botones Atrás y Adelante) se hace bastante confusa (por no decir inservible).

Y las soluciones no son precisamente buenas

Más que soluciones son trucos, y a veces crean más problemas de los que resuelven.

El problema de cambiar los contenidos de más de un marco a la vez se suele resolver anidando FRAMESETs. En el ejemplo de arriba, en vez de definir tres marcos definiríamos sólo dos. En el primero tendríamos el índice de capítulos y en el segundo cargaríamos un nuevo frameset con dos marcos, en uno de ellos cargaríamos el índice de secciones y en el segundo presentaríamos cada sección. Esto tiene la ventaja de que se puede apuntar a un capítulo en particular, aunque nos quedaríamos sin el índice de capítulos, y seguiríamos sin poder apuntar a una sección en particular o a un fragmento de ella. Además sigue sin resolver el problema de los motores de búsqueda y hará que la navegación por el sitio sea más lenta, ya que cada vez que cambiemos de capítulo habrá que cargar tres nuevos documentos en lugar de sólo dos.

Este método se puede extender al límite, y hacer que cada documento sea en realidad un FRAMESET, de modo que cada vez que queramos abrir un documento, la ventana se vacía (usando target="_top") y se vuelven a dibujar todos los marcos y a rellenarlos con los documentos apropiados. Ahora podemos cambiar todos los marcos que queramos al mismo tiempo, y tenemos más libertad para apuntar a diferentes combinaciones de marcos, pero a cambio la navegación se hace mucho más lenta, ya que cada vez que seguimos un vínculo hay que volver a cargar un FRAMESET y uno o normalmente más documentos en cada marco. Además persiste el problema de los motores de búsqueda y el de los identificadores de fragmento. Y además uno de los motivos por el que mucha gente decide usar marcos es que un documento queda fijo en la pantalla sin necesidad de volver a cargarlo cada vez, cosa que con este método ya no ocurre.

Por último, existen scripts de JavaScript para resolver algunos problemas (por ejemplo, cargar automáticamente el FRAMESET cuando se accede directamente a uno de los documentos desde un motor de búsqueda). Sin embargo, uno de los principios del diseño web es que cualquier página debería funcionar aunque el usuario no pueda o no quiera activar JavaScript en su navegador. Por tanto, estos métodos constituyen una solución parcial, no una solución de ningún problema.

En consecuencia

A primera vista, los marcos son una buena idea. En el fondo, no dan más que problemas y no son tan necesarios como te podrías imaginar. Mi consejo es que, siempre que puedas, los evites.

Si de todos modos vas a usarlos o tienes que hacerlo, hazte un favor: no te unas al club de los 500.000 maleducados. Está muy bien que utilices el elemento NOFRAMES para los navegadores que no soportan marcos, pero es absurdo utilizarlo para decir Su navegador no acepta marcos. Y es una auténtica falta de respeto decir Actualice su navegador, o Quizá sea un buen momento para modernizarse cuando no sabes si la persona que está leyendo tu mensaje puede realmente actualizar su navegador o no. Incluso podría estar usando un lector de pantalla carísimo para utilizar con un navegador de texto. La verdad es que Lo siento, no soporto su navegador está más cercano a la realidad. Pero en todo caso, si vas a poner algo en el elemento NOFRAMES, que sea información. Recuerda que todo esto va de transmitir información. Pon un vínculo a una página, o a varias. Sé amable con todos tus visitantes y no despidas a algunos de ellos con un mensaje grosero sólo porque no navegan como tú. Y piensa en ir diseñando una nueva versión de tu página... sin marcos.

Más información

Este artículo se basa en el tutorial sobre marcos de Stephanos Piperoglou en webreference.com. En allmyfaqs.com puedes encontrar muchos más documentos con información sobre los problemas de los marcos, algunos más modernos que otros, pero todos ellos con información interesante.

© 2001-2003 Juan R. Pozo