
En este vídeo, que forma parte del curso Introducción al desarrollo web, te voy a explicar que es el modelo de caja.
En la primera parte de este vídeo, vimos el concepto de modelo de caja, que organiza una caja en cuatro partes: el contenido, el relleno, el borde y el margen.
CSS3, la última especificación de CSS, incorpora numerosas novedades que ayudan a controlar mucho mejor el diseño de una página. CSS Basic User Interface Module es una especificación independiente que forma parte de CSS3.
En esta especificación, se añade una nueva propiedad, box-sizing, que define la forma de calcular el tamaño de una caja en el modelo de caja. Box-sizing puede tomar tres valores: content-box, padding-box y border-box.
Content-box es el valor por defecto. La anchura y la altura se calculan según la especificación de CSS2.1, por tanto, width y height, se aplican únicamente al contenido. En padding-box, la anchura y la altura del elemento, incluyen el padding.
Por último, en border-box la anchura y la altura del elemento incluyen el padding y el borde.
Si consultamos la documentación de Microsoft encontramos un par de cosas importantes. En primer lugar, vemos que esta propiedad es de CSS3 y está disponible a partir de Internet Explorer 8. Por otro lado, vemos que esta propiedad solo puede tomar dos valores, content-box y border-box, pero en la especificación oficial aparece un tercer valor, padding-box, ¿qué está pasando? Ahora después lo veremos.
Los dos posibles valores que admite en Microsoft Internet Explorer son content-box, el valor por defecto, y border-box, que es justo la forma de calcular la anchura que aplicaban las versiones antiguas de Internet Explorer.
Vamos a ver un ejemplo para ver cómo afecta esta propiedad al tamaño de visualización de los elementos. En esta página hay dos div, el primero con el identificador content-box y el segundo con el identificador border-box. Las dos cajas tienen las mismas propiedades de CSS, excepto la propiedad box-sizing. En la primera caja, se emplea content-box y en la segunda border-box. Esto afecta la forma de interpretar el valor de la anchura de las cajas. Este es el resultado, la primera caja es más ancha que la segunda caja. ¿Por qué? En concreto, la primera caja es 40 píxeles más ancha que la segunda, esto se debe a que en la primera caja a los 200 píxeles se refieren solo al contenido, no incluyen el padding o el borde. En la segunda caja los 200 píxeles incluyen el padding y el borde, por eso la caja es más pequeña.
En Mozilla Developer Network, el sitio web para desarrolladores de Mozilla, podemos encontrar un aviso muy importante. Esta propiedad es experimental, por lo que puede ser que no sea compatible con todos los navegadores y puede ser que su comportamiento cambie en el futuro.
¿Recuerdas que antes vimos que, en Internet Explorer, la propiedad box-sizing solo puede tomar dos valores, content-box y border-box? En la tabla de compatibilidad podemos ver a partir de qué versión de navegador esta propiedad se añadió y, también, podemos ver que el valor padding-box, por ahora, solo es admitido por Mozilla Firefox.
Por último, otro ejemplo para que veas una importante ventaja que aporta la propiedad box-sizing con el valor border-box.
En esta página tenemos dos cajas principales, cada una de ellas contiene tres cajas, pero lo que quiero lograr es situar las dos primeras cajas en paralelo, en una misma fila. Para ello a cada una de las cajas le asigno un tamaño del 50%, fíjate que el primer caso box-sizing toma el valor content-box y en el segundo caso, toma el valor border-box. ¿Qué va a pasar? Este es el resultado: en el primer caso las dos cajas no se pueden colocar en paralelo en la misma fila porque no hay espacio suficiente, ya que cada caja tiene, realmente, una anchura superior al 50%. En el segundo caso sí que es posible, porque la anchura del 50%, incluye el contenido, el padding y el borde. Interesante, ¿verdad?
Aspectos clave
Debes ver el vídeo CSS: el modelo de caja (2) en el que se explica la nueva propiedad box-sizing
de CSS3, que permite indicar la forma de calcular la anchura de un elemento de bloque de una página web.