La típica distribución de una página web

Desarrollo de software, Web October 13th, 2008

Distribución típica de una página web

Distribución típica de una página web

Esta es la distribución típica de una página web.  Esta compuesta por los siguientes elementos.

  • Cabecera.
  • Columna izquierda.
  • Contenido central.
  • Columna derecha.
  • Pies.

De acuerdo con los estándares actuales, es preferible utilizar divs en lugar de tables (donde sea humanamente posible) ya que el documento HTML debería encargarse de definir el contenido mientras que a través de la definición de estilos (CSS) se debería establecer la presentación, es decir, como se ordena y distribuye el contenido a lo largo y ancho de la página web.

Como lo he mencionado en otras ocasiones para mi CSS es todavía una ciencia oculta, hay muchas cosas que frecuentemente se me enrredan cuando utilizo CSS.  Sin embargo ultimamente lo he estado utilizando un poco mas y he adquirido mas práctica y cada vez me siento mas a gusto con utilizándolo.

Ahora implementar este diseño es algo sencillo para mi ... bueno, casi.

Parto de la siguiente estructura de contenido.

        <div id='pagina'>
            <div id='cabecera'>
                Cabecera <br />
            </div>

            <div id='colizq'>
                Columna Izquierda <br />
            </div>

            <div id='contenido'>
                Contenido <br />
            </div>

            <div id='colder'>
                Columna Derecha <br />
            </div>

            <div id='pies'>
                Pies
            </div>
        </div>

El resultado inicial es claramente inaceptable.

Resultado #1

Resultado #1

Agregamos un poco de estilo para enrriquecer a la presentación.

    #pagina
    {
        width: 1024px;
        margin: auto;
        background-color: pink;
    }

Con esto le damos un ancho suficiente para visualizar correctamente el contenido del sitio y lo centramos para que se vea bonito en monitores mas anchos.

    #cabecera
    {
        padding: 5px;
        background-color: orange;
    }

    #colizq
    {
        padding: 5px;
        background-color: yellow;
        width: 300px;
    }

    #contenido
    {
        padding: 5px;
        background-color: blue;
        width: 394px;
    }

    #colder
    {
        padding: 5px;
        background-color: red;
        width: 300px;
    }

    #pies
    {
        padding: 5px;
        background-color: green;
    }

Les damos colores diferentes a cada una de las partes para diferenciarlas, un padding para separar un poco el borde del contenido de cada uno de los divs y en el caso de la parte central, el ancho específico que se requiera.

Resultado #2

Resultado #2

Ya tiene cara de algo, pero no necesariamente lo que estamos buscando.  Es necesario ordenar las columnas izquirda, centro y derecha para que se ubiquen de la forma como sus mismos nombres lo indican.

En CSS esto equivale a decirle a los divs que floten (float) en la dirección que queramos.

    #colizq
    {
        float: left;
        padding: 5px;
        background-color: yellow;
        width: 300px;
    }

    #contenido
    {
        float: left;
        padding: 5px;
        background-color: blue;
        width: 394px;
    }

    #colder
    {
        float: left;
        padding: 5px;
        background-color: red;
        width: 300px;
    }

El atributo adicionado les indica a los divs que vayan flotando y arreglándose a la izquierda cada vez que son agregados a la presentación.

Resultado #3

Resultado #3

En algunos casos, cuando continúan mas divs y necesitamos que se alineen en una la siguiente fila, es necesario indicarle a un div específico que no permita que otros divs floten a uno/ninguno de sus lados.  Para esto se utiliza el atributo clear (left, right, none, both).

Para el caso de la sección de los pies se complementaría de la siguiente manera.

    #pies
    {
        padding: 5px;
        background-color: green;
        clear: left;
    }

Hasta ahí todo es muy fácil: un pequeño paso para el lector, pero hace un año fue un gran paso para mi.  Pero aún me queda una duda por solucionar.

Qué pasa cuando las columnas -patriotas- tienen altos de diferente longitud ?

Resultado #4.

Resultado #4.

Se nota ese sobrante rosado bajo las columnas izquierda y derecha ?

Si revisamos las clases CSS, la rosada es la #pagina, esto significa que #colizq y #colder no están ocupando el mismo espacio vertical que #contenido hasta #pies y está dejando ver la capa inmediatamente inferior.

Para los "diseños" que comúnmente utilizo esto no es un problema ya que me gustan los diseños minimalistas y el blanco es mi fondo preferido.  Pero que va a pasar el día en que necesite que una columna sea de un fondo diferente del resto ?

Mi pregunta es: cómo hago para que las columnas ocupen la totalidad del espacio vertical disponible entre #cabecera y #pies ?  La duda persiste.

Enlace: código de demostración.

Tags: ,

Estructura de un documento XHTML

Desarrollo de software, Internet, Web April 2nd, 2008

Cabecera XML con la codificación del contenido (estilo nuevo).

<?xml version="1.0" encoding="UTF-8" ?>

Tipo de documento XML. Utilizar sólo una de ellas.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">

Cabecera HTML con el espacio de nombres y la especificación del lenguaje del contenido (estilo nuevo y antíguo).

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="sp" lang="sp">
<head>

Etiqueta http-equiv para especificar el tipo de contenido y su codificación (estilo antíguo).

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

Autor del documento.

<meta name="author" content="Jorge Iván Meza Martínez" />

Título de la página web.

<title>This is a demo</title>

Referencia a hoja de estilos externa.

<link href="/css/style.css" rel="stylesheet" type="text/css" />

Referencia a código JavaScript externo.

<script src="/js/script.js" type="text/javascript"></script>

Código JavaScript interno (inline).

<script type="text/javascript">
<![cdata[
    // Contenido del script.
]]>
</script>
</head>

Contenido de la página web.

<body>
    <!-- Contenido de la pagina -->
</body>
</html>

Tags:

Consideraciones a tener en cuenta con XHTML

Desarrollo de software, Internet, Web April 1st, 2008

- Los documentos deben ser gramaticalmente correctos:

  • Todos los elementos deben tener una apertura y un cierre.
  • Debe respetarse el anidamiento jerárquico durante el cierre de etiquetas: <p><b>x</b></p>

- Los nombres de los elementos, los atributos y sus valores por defecto deben escribirse en minúsculas:

<input type='submit' value='Enviar' />

- Los valores de los atributos deben ir entre comillas, ya sean sencillas ( ' ) o dobles ( " ).

<table rows="5" class="tabla_principal"></table>

- Los atributos no pueden ser minimizados, es decir, su valor no puede omitirse por ningún motivo.

<input type="checkbox" checked="checked" id="caja_verificacion" />

- Todas las etiquetas deben cerrarse de una de las dos formas válidas.

Etiquetas vacías:

  • <hr></hr>
  • <hr />

Etiquetas no vacías:

  • <p>Este es un parrafo</p>

- Los elementos de bloque no pueden ser declarados dentro de elementos en línea. El siguiente ejemplo es inválido: <b><div class='ejemplo'>Error</div></b>

- El atributo alt siempre debe estar presente en un elemento img. Los textos deben ir enmarcados en etiquetas p.

- Los siguientes carácteres: &, <, ]]> y --, interfieren con el documento XHTML motivo por el cual deben reemplazarse, incluso en URLs, por sus correspondientes entidades: & y <.

- Para bloques extensos de código que adolecen de la situación anterior es posible enmarcar dichos códigos entre un bloque CDATA, por ejemplo para el uso de script y style en línea. Esta necesidad no aplica para documentos externos.

<script>
<![CDATA[
// ... contenido del script ...
]]>
</script>

- Los elementos deben usar el atributo id como su identificador de fragmento, incluso los que históricamente habían tenido el atributo name.

- Los atributos desaprobados por HTML 4.01 no son incluidos por XHTML. Por ejemplo, la siguiente expresión es inválida: <font color="red">texto</font>, debe escribirse de la siguiente manera: <span style="color: red">texto</span>.

- Los siguientes elementos no pueden estar compuestos por los dispuestos a continuación.

  • <a> no puede contener elementos <a>.
  • <pre> no puede contener elementos <img>, <object>, <big>, <small>, <sub>, <sup>.
  • <button> no puede contener elementos <input>, <select>, <textarea>, <label>, <button>, <form>, <fieldset>, <iframe>, <isindex>.
  • <label> no puede contener elementos <label>.
  • <form> no puede contener elementos <form>.

Para preservar la compatiblidad se realizan las siguiente recomendaciones.

- Para los elementos vacíos cuyo cierre es inmediato, incluya un espacio antes de la terminación: />. Ejemplo: <br />.

- Para los elementos no vacíos utilice la forma ampliada de cierre, en lugar de la minimizada, aunque estos no tengan contenido. Ejemplo: <p> </p>.

- Se debe evitar el encerrar los fragmentos de código JavaScript y las hojas de estilo entre comentarios (<!-- -->) toda vez que su contenido se ignorará y no serán tenidos en cuenta.

- Deben evitarse los espacios extra en blanco y los saltos de línea en el valor de los atributos ya que son interpretados de manera incosistente por los diferentes clientes.

- Los posibles carácteres a utilizarse para crear los nombres de los atributos id deben ser: las letras minúsculas y mayúsculas, los números del 0 al 9, los guiones (-), los guiones bajos (_), los dos puntos (:) y el punto (.). El valor debe empezar siempre con una letra.

- Utilice conjuntamente los atributos lang y xml:lang entendiéndose que xml:lang tiene precedencia. Ejemplo: <a href="enlace.html" lang="es" xml:lang="es">

- Para las entidades que así lo requieran utilice atributos id y name sabiendo que XHTML es compatible con el primero y no con el segundo.

- Para especificar la codificación de carácteres de un documento se sugiere utilizar las dos formas posibles: en la declaración XML y como una sentencia meta http-equiv.

<?xml version="1.0" encoding="UTF-8" ?>
<meta http-equiv="Content-type" content='text/html; charset="UTF-8"' />

- Algunos atributos booleanos tienen tienen problemas con la forma ampliada que requiere XHTML en clientes que soportan especificaciones anteriores a HTML 4.0.

compact, nowrap, ismap, declare, noshade, checked, disabled, readonly, multiple, selected, noresize, defer.

- Para efectos de manipulación DOM, HTML retorna los nombres de los elementos y atributos en mayúsculas, XML tal y como fueron escritos y en XHTML se escriben en minúsculas.

Tags: