Búsqueda personalizada

Elemento de lista Tutorial sobre el Modelo de Cajas en CSS.

Documento HTML.
Tutorial para conocer cómo funciona el modelo de cajas de CSS y todas sus peculiaridades.
Autor: Wmasterfacil www.wmasterfacil.com
En este tutorial voy a explicar el modelo de cajas, es decir, las propiedades que se le pueden aplicar a cualquier caja y su forma de funcionamiento.
Muchas de las definiciones son extraidas tal cual o simplificadas de la Recomendación de W3C sobre las Hojas de Estilo en Cascada, Nivel 2 Revisión 1 (CSS2.1), y de la Recomendación del W3C "HTML 4.01 Specification" que están en la Sección HTML/CSS de esta web.
El modelo de caja de CSS describe las cajas rectangulares que son generadas por los elementos en la estructura del documento. Cualquier texto o elemento de nuestra web está contenido dentro de una caja. Estas cajas tienen unas propiedades como son la altura y la anchura, los bordes, el relleno (padding) y los márgenes (margin).
El siguiente gráfico muestra la estructura de una caja segun CSS y donde se encuentran ubicados cada uno de los componentes que he citado antes.
tabla
Sobre la altura y la anchura de la caja (HEIGHT y WIDTH) ya he hablado muy detalladamente en los anteriores tutoriales. Solo diré aquí que lo que definen en principio es la altura y anchura del "contenido", tal y como lo especifica el W3C (mirar el gráfico anterior). El resto de propiedades quedan fuera de esas medidas.
Esto significa, que la anchura total de cualquier elemento es la resultante de sumar el ancho de los márgenes izquierdo y derecho, el ancho de los bordes izquierdo y derecho, el ancho de los rellenos izquierdo y derecho, y el ancho del contenido (especificado con la propiedad WIDTH).
Del mismo modo, la altura de una elemento es el resultado de sumar el ancho de los márgenes superior e inferior, el ancho de los bordes superior e inferior, el ancho de los rellenos superior e inferior, y la altura del contenido (especificada con la propiedad HEIGHT).
 

Elemento de lista  MARGIN (MARGIN-TOP, MARGIN-BOTTOM, MARGIN-LEFT, MARGIN-RIGHT)

Esta propiedad determina la anchura del margen de la caja. Entendemos como margen al espacio que hay entre el borde de la caja y los elementos que la rodean. La anchura de los márgenes se puede establecer por separado permitiendo dar a la caja diferente margen por cada lado, utilizando para ello sus derivaciones para cada orientación (MARGIN-TOP (superior), MARGIN-BOTTOM (inferior), MARGIN-LEFT (izquierdo), MARGIN-RIGHT derecho)).
Los márgenes verticales (margin-top y margin-bottom) sólo tienen efecto en los elementos de bloque y las imágenes, mientras que los márgenes laterales (margin-left y margin-right) se pueden aplicar a cualquier elemento.
Los valores que puede tomar son los siguientes:
Elemento de lista  Valor exacto:
Es decir, una anchura determinada. Hay muchas formas de establecer las medidas en una web. En este caso utilizaré px, que son píxels y reflejan medidas absolutas.
Elemento de lista  Porcentaje:
Este porcentaje se calcula con respecto a la anchura del bloque que contiene a la caja con la que estamos trabajando.
Elemento de lista  Auto:
Buscará un margen equivalente a izquierda y derecha que deje centrada la caja respecto al bloque o caja que la contiene (el auto no hace nada en los margenes verticales).
 
NOTA: Se permite utilizar valores negativos de margen.
Como ejemplo, para ponerle un margen superior de 5px a una caja que tiene como identificador, por ejemplo, 'recuadro', escribiremos en nuestra hoja de estilos:
#recuadro {margin-top: 5px;}
Si lo que deseamos es poner un margen a todos los lados del elemento:
#recuadro {margin: 5px;}
Pero tambien podemos poner diferentes combinaciones con la propiedad margin y definir sólo con ella los cuatro márgenes, con diferentes valores. Así, si ponemos dos valores:
#recuadro {margin: 5px 10px;}
el primer valor se aplica a los márgenes superior e inferior, y el segundo valor a los márgenes izquierdo y derecho.
Para tres valores, el primero es para el margen superior, el segundo para los dos márgenes laterales y el tercero para el margen inferior.

^ Inicio de página

 
Elemento de lista  IMPORTANTE: MÁRGENES CERRADOS
Márgenes cerrados significa que los márgenes adyacentes (es decir, que no tienen entre ellos ningun contenido vacío, rellenos o bordes) de dos o más cajas se combinan en uno solo.
Ésta situación pasa en varias situaciones (ver Recomendación de W3C sobre las Hojas de Estilo en Cascada, Nivel 2 Revisión 1 (CSS2.1)), pero la más común, sobre todo cuando maquetamos una web, es cuando hay dos cajas adyacentes, o padre e hija, en flujo normal (es decir, con position relative). En estos casos, los margenes verticales adyacentes, se cierran (se funden en uno sólo).
 
Esto nos puede volver locos si no lo tenemos en cuenta.
NOTA: Los ejemplos siguientes no funcionan de la misma forma en IExplorer. IExplorer tiene un comportamiento que no está de acuerdo con las directrices del W3C. Hablaré de las diferencias de IExplorer en cuanto a margenes, bordes y rellenos en el siguiente tutorial.
Pongamos un fichero html con la siguiente estructura:
tabla
y con su hoja de estilos con este contenido:
tabla
En este caso, si ejecutamos el código ' EJEMPLO 1 ', el margen izquierdo de la caja "recuadro" es perfectamente visible, pero el margen superior no aparece. Ésto es porque al no haber ningún elemento entre la caja "principal" y la caja "recuadro" el margen superior (vertical) se cierra y se une al margen de la caja "principal". Como no tiene ninguno, ambas cajas se desplazan hacia abajo 5px. Visualmente parece que el margen superior no ha tenido efecto, pero sí que lo ha tenido, desplazando ambas cajas, y no la interior, que es lo que buscábamos.
Para estos casos, con posicionar la caja "recuadro" de forma absoluta, o con colocarle un borde a la caja principal (si no queremos ponerselo, siempre podemos ponerle el mismo color que a la caja), bastaría para que este comportamiento desapareciera.
tabla
Modificando la propiedad POSITION, el resultado es ' EJEMPLO 2'

^ Inicio de página

 

Elemento de lista  PADDING (PADDING-TOP, PADDING-BOTTOM, PADDING-LEFT, PADDING-RIGHT)

Esta propiedad determina la anchura del relleno de la caja. Entendemos como relleno al espacio que hay entre el contenido de la caja y el borde de la misma. La anchura del relleno se puede establecer por separado permitiendo dar a la caja diferente relleno por cada lado, utilizando para ello sus derivaciones para cada orientación (PADDING-TOP (superior), PADDING-BOTTOM (inferior), PADDING-LEFT (izquierdo), PADDING-RIGHT derecho)).
Los valores que puede tomar son los siguientes:
Elemento de lista  Valor exacto:
Es decir, una anchura determinada.
Elemento de lista  Porcentaje:
Este porcentaje se calcula con respecto a la anchura del bloque que contiene a la caja con la que estamos trabajando.
 
Para valores múltiples de padding, esta propiedad funciona de la misma forma que margin.
NOTA: En contraposicion a la propiedad margin, padding no permite utilizar valores negativos.
NOTA: El color del área de relleno es especificado a través de la propiedad background de la caja en cuestión.
Poniendo un ejemplo sencillo, si tenemos el fichero html siguiente:
tabla
y con la siguiente hoja de estilos:
tabla
Vemos al ejecutar el fichero ' EJEMPLO 3', que la palabra "HOLA" queda ubicada justo arriba a la izquierda de la caja que la contiene ("recuadro").
Si modificamos la hoja de estilos de la siguiente forma, añadiendo un pagdding superior:
tabla
Vemos al ejecutar el fichero ' EJEMPLO 4', que la palabra "HOLA" queda desplazada hacia abajo 10 pixels, que son los que hemos especificado en la hoja de estilos con la sentencia PADDING-TOP: 10px; .
Observe claramente como el padding es interior a la caja (se ve porque el espacio que queda sobre la palabra "HOLA" es de color amarillo, como el fondo de la caja "recuadro") mientras que el margin es exterior.

^ Inicio de página

 

Elemento de lista  BORDER-WIDTH (border-top-width, border-bottom-width, border-left-width, border-right-width)

Esta propiedad determina, la anchura del borde de la caja. El borde se situa entre el fin del area de relleno y el comienzo del area de margen. Como en los casos anteriores, la anchura del borde se puede establecer por separado para cada uno de sus lados.
Los valores que puede tomar son los siguientes:
Elemento de lista  thin:
Un borde fino.
Elemento de lista  medium:
Un borde mediano.
Elemento de lista  thick:
Un borde grueso.
Elemento de lista  Valor exacto:
Es decir, una anchura determinada.
 
Para valores múltiples de border-width, esta propiedad funciona de la misma forma que margin.
 

Elemento de lista  BORDER-COLOR (border-top-color, border-bottom-color, border-left-color, border-right-color)

Esta propiedad determina el color del borde de la caja.
Los valores que puede tomar son los siguientes:
Elemento de lista  valor:
la palabra clave que define al color o un código hexadecimal de 6 caracteres: maroon #800000, red #ff0000, orange #ffA500, yellow #ffff00, olive #808000, purple #800080, fuchsia #ff00ff, white #ffffff, lime #00ff00, green #008000, navy #000080, blue #0000ff, aqua #00ffff, teal #008080, black #000000, silver #c0c0c0, gray #808080.
Elemento de lista  palabra clave -transparent-
para hacer que los colores subyacentes se vean a través.
 
Para valores múltiples de border-color, esta propiedad funciona de la misma forma que margin.
 

Elemento de lista  BORDER-STYLE (border-top-style, border-bottom-style, border-left-style, border-right-style)

Esta propiedad determina el estilo de la línea del borde de la caja.
Los valores que puede tomar son los siguientes:
Elemento de lista  none:
ningún borde; el ancho del borde es cero.
Elemento de lista  hidden:
Igual que 'none', excepto en términos de resolución de conflictos de bordes para los elementos de tablas.
Elemento de lista  dotted:
El borde es una serie de puntos.
Elemento de lista  dashed:
El borde es una serie de pequeños segmentos de líneas.
Elemento de lista  solid:
El borde es un único segmento de línea.
Elemento de lista  double:
El borde son dos líneas sólidas. La suma de las dos líneas y el espacio entre ellas es igual al valor de 'border-width'.
Elemento de lista  groove:
El borde luce como si estuviera tallado en el lienzo.
Elemento de lista  ridge:
Lo opuesto a 'groove': el borde parece que estuviera sobresaliendo (en relieve) del lienzo.
Elemento de lista  inset:
El borde hace que toda la caja luzca como si estuviera empotrada (hundida) en el lienzo.
Elemento de lista  outset:
Lo contrario de 'inset': El borde hace que toda la caja parezca sobresalir (en relieve) del lienzo.
 
Para valores múltiples de border-style, esta propiedad funciona de la misma forma que margin.
 

Elemento de lista  BORDER (BORDER-TOP, BORDER-BOTTOM, BORDER-LEFT, BORDER-RIGHT)

Esta propiedad determina todas las propiedades de los bordes resumidas, es decir, la anchura, el color y el estilo del borde de la caja.
El orden de los valores es el siguiente:
border-width border-style border-color
 
NOTA: Con la propiedad border no se pueden definir distintos valores para cada lado del borde de la caja. Para ello hay que usar las propiedades específicas.
Por ejemplo, para definir el borde de la caja "recuadro" como de color azul, de estilo sólido y de ancho 3 pixels la instrucción en la hoja de estilos sería:
#recuadro { border: 3px solid blue;}

^ Inicio de página

En este ' EJEMPLO 5' se vé como actua cada BORDER.STYLE y cada BORDER-WIDTH
NOTA: Algunos efectos se visualizan de forma distinta en IExplorer y en otros navegadores. Recomiendo ejecutar el ejemplo en varios de ellos.
NOTA: Los efectos tridimensionales se ven mejor con anchuras amplias y es recomendable combinar varios colores para mejorar los resultados.
Comentarios a este tutorial

^ Inicio de página