En el desarrollo web , el modelo de caja CSS se refiere a cómo se modelan los elementos HTML en los motores de los navegadores y cómo las dimensiones de esos elementos HTML se derivan de las propiedades CSS . Es un concepto fundamental para la composición de páginas web HTML . [ 3 ] Las directrices del modelo de caja están descritas por los estándares web del Consorcio World Wide Web (W3C), específicamente el Grupo de Trabajo CSS. Durante gran parte de finales de la década de 1990 y principios de la de 2000 hubo implementaciones no conformes con el estándar del modelo de caja en los navegadores más populares. Con la llegada de CSS2 en 1998, que introdujo la box-sizingpropiedad, el problema se resolvió en gran medida.
Detalles específicos
La especificación de Hojas de Estilo en Cascada (CSS) describe cómo los navegadores gráficos muestran los elementos de las páginas webp . La Sección 4 de la especificación CSS1 define un "modelo de formato" que otorga a los elementos de nivel de bloque —como <p> y blockquote<div>— un ancho y una altura, y tres niveles de cajas que los rodean: relleno, bordes y márgenes. [ 4 ] Si bien la especificación nunca utiliza explícitamente el término "modelo de caja", este se ha popularizado entre los desarrolladores web y los proveedores de navegadores web.
Todos los elementos HTML pueden considerarse "cajas", esto incluye divla etiqueta <p>, pla etiqueta <p> o ala etiqueta <div>. Cada una de esas cajas tiene cinco dimensiones modificables:
- y describe las dimensiones del contenido real de la caja (texto, imágenes, ...
height)width - describe
paddingel espacio entre este contenido y el borde del cuadro - la
borderes cualquier tipo de línea (continua, punteada, discontinua...) que rodea el cuadro, si está presente - es
marginel espacio alrededor del borde
Según la especificación CSS1, publicada por el W3C en 1996 y revisada en 1999, cuando se especifica explícitamente un ancho o alto para cualquier elemento de nivel de bloque, este debe determinar solo el ancho o alto del elemento visible, y el relleno, los bordes y los márgenes se aplican posteriormente. [ 4 ] [ 5 ] Antes de CSS3, este modelo de caja se conocía como modelo de caja del W3C ; en CSS3, se conoce como content-box.
Por lo tanto, el ancho total de una caja es margin-left+ border-left+ padding-left+ width+ padding-right+ border-right+ margin-right. De manera similar, la altura total de una caja es igual a margin-top+ border-top+ padding-top+ height+ padding-bottom+ border-bottom+ margin-bottom.
Por ejemplo, el siguiente código CSS
.my - class { width : 200px ; height : 100px ; padding : 10px ; border : solid 10px black ; margin : 10px ; }Se especificarían las dimensiones de cada bloque perteneciente a 'my-class'. Además, cada caja tendrá una altura total de 140 px y un ancho de 240 px.
CSS3 introdujo el modelo de caja de Internet Explorer en el estándar, conocido como border-box. [ 6 ]
Historia

Antes de HTML 4 y CSS, muy pocos elementos HTML admitían bordes y relleno, por lo que la definición del ancho y alto de un elemento no era muy controvertida. Sin embargo, variaba según el elemento. El atributo de ancho de HTML de una tabla definía el ancho de la tabla incluyendo su borde. [ 7 ] Por otro lado, el atributo de ancho de HTML de una imagen definía el ancho de la imagen en sí (dentro de cualquier borde). [ 8 ] El único elemento que admitía relleno en aquellos primeros tiempos era la celda de tabla. El ancho de la celda se definía como "el ancho sugerido para el contenido de una celda en píxeles, excluyendo el relleno de la celda". [ 9 ]
En 1996, CSS [ 10 ] introdujo margen, borde y relleno para muchos más elementos. Adoptó una definición de ancho en relación con el contenido, el borde, el margen y el relleno similar a la de una celda de tabla. [ 11 ] Esto se conoce desde entonces como el modelo de caja del W3C .
En aquel entonces, muy pocos proveedores de navegadores implementaron el modelo de caja del W3C al pie de la letra. Los dos principales navegadores de la época, Netscape 4.0 e Internet Explorer 4.0 , definían el ancho y la altura como la distancia de borde a borde. [ 12 ] Esto se ha denominado el modelo de caja tradicional [ 6 ] o el modelo de caja de Internet Explorer . [ 13 ]
Internet Explorer en " modo peculiar " incluye el contenido, el relleno y los bordes dentro de un ancho o alto especificado; esto da como resultado una representación más estrecha o más corta de un cuadro que la que resultaría siguiendo el comportamiento estándar. [ 14 ]
El comportamiento del modelo de caja de Internet Explorer a menudo se consideraba un error, debido a la forma en que las versiones anteriores de Internet Explorer manejaban el modelo de caja o el tamaño de los elementos en una página web, que difiere de la forma estándar recomendada por el W3C para el lenguaje de hojas de estilo en cascada . [ 15 ] [ 16 ] A partir de Internet Explorer 6 , el navegador admite un modo de renderizado alternativo (llamado "modo compatible con estándares") que resuelve esta discrepancia. Sin embargo, por razones de compatibilidad con versiones anteriores, todas las versiones siguen comportándose de la forma habitual, no estándar, por defecto (ver modo peculiar ). Internet Explorer para Mac no se ve afectado por este comportamiento no estándar.
Soluciones alternativas
Las versiones de Internet Explorer 6 y posteriores no se ven afectadas por el error si la página contiene ciertas declaraciones de tipo de documento HTML . Estas versiones mantienen el comportamiento defectuoso cuando están en modo de compatibilidad por razones de retrocompatibilidad. [ 17 ] Por ejemplo, el modo de compatibilidad se activa:
- Cuando la declaración del tipo de documento está ausente o incompleta;
- Cuando se encuentra un documento HTML 3 o anterior;
- Cuando se utiliza una declaración de tipo de documento HTML 4.0 Transitional o Frameset y no está presente un identificador de sistema (URI);
- Cuando aparece un comentario SGML u otro contenido no reconocido antes de la declaración del tipo de documento.
- Internet Explorer 6 también utiliza el modo de peculiaridades si hay una declaración XML antes de la declaración del tipo de documento. [ 18 ]
Se han ideado varias soluciones alternativas para forzar a las versiones 5 y anteriores de Internet Explorer a mostrar páginas web utilizando el modelo de caja del W3C. Estas soluciones suelen explotar errores no relacionados en el procesamiento de selectores CSS de Internet Explorer para ocultar ciertas reglas al navegador. La más conocida es el "truco del modelo de caja" desarrollado por Tantek Çelik , un antiguo empleado de Microsoft que desarrolló esta idea mientras trabajaba en Internet Explorer para Macintosh. Consiste en especificar una declaración de ancho para Internet Explorer para Windows y luego sobrescribirla con otra declaración de ancho para navegadores compatibles con CSS. Esta segunda declaración se oculta a Internet Explorer para Windows explotando otros errores en la forma en que analiza las reglas CSS. La implementación de estos "trucos" CSS se ha complicado aún más con el lanzamiento público de Internet Explorer 7, que corrigió algunos problemas, pero no otros, lo que provoca resultados no deseados en las páginas que utilizan estos trucos. [ 17 ]
Las soluciones alternativas para el modelo de caja han demostrado ser poco fiables, ya que dependen de errores en la compatibilidad con CSS de los navegadores, que podrían corregirse en versiones posteriores. Por este motivo, algunos desarrolladores web han recomendado evitar especificar tanto el ancho como el relleno para el mismo elemento, o bien utilizar comentarios condicionales y/o filtros CSS para solucionar el problema del modelo de caja en versiones antiguas de Internet Explorer. [ 13 ] [ 19 ]
Compatibilidad con el modelo de caja de Internet Explorer
El diseñador web Doug Bowman ha dicho que el modelo de caja original de Internet Explorer representa un enfoque mejor y más lógico. [ 20 ] Peter-Paul Koch da el ejemplo de una caja física, cuyas dimensiones siempre se refieren a la caja en sí, incluyendo el posible relleno, pero nunca a su contenido. [ 6 ] Dice que este modelo de caja es más útil para los diseñadores gráficos, que crean diseños basados en el ancho visible de las cajas en lugar del ancho de su contenido. [ 21 ] Bernie Zimmermann dice que el modelo de caja de Internet Explorer está más cerca de la definición de dimensiones de celda y relleno utilizada en el modelo de tabla HTML. [ 22 ]
El W3C ha incluido una propiedad "box-sizing" en CSS3. Cuando box-sizing: border-box;se especifica para un elemento, cualquier relleno o borde del elemento se dibuja dentro del ancho y alto especificados, "como comúnmente lo implementan los agentes de usuario HTML heredados". [ 23 ] Internet Explorer 8 , los navegadores WebKit como Apple Safari 5.1+ y Google Chrome , los navegadores basados en Gecko como Mozilla Firefox 29.0 y posteriores, Opera 7.0 y posteriores, y Konqueror-moz-box-sizing 3.3.2 y posteriores admiten la propiedad CSS3 box-sizing. Los navegadores Gecko anteriores a 29.0 admiten la misma funcionalidad usando la propiedad específica del navegador . [ 24 ]border-box es el modelo de caja predeterminado utilizado en el marco Bootstrap .
Véase también
Referencias
- 1 2 Etemad, Elika J., ed. (22 de diciembre de 2020). "Módulo CSS Box Model Nivel 3" . W3C . Nivel 3. Grupo de Trabajo CSS . Recuperado el 9 de abril de 2021 .
- 1 2 Bos, Bert; Prowse, Anton, eds. (6 de julio de 2018). "CSS Basic Box Model Level 3" . W3C . 31 de julio de 2018. Grupo de trabajo CSS . Recuperado el 9 de abril de 2021 .
- ↑ "CSS" . MDN Web Docs . 23 de marzo de 2019. Consultado el 30 de marzo de 2019 .
- 1 2 Wium Lie, Håkon ; Bos, Bert (11 de enero de 1999). "Cascading Style Sheets, level 1 § Formatting model" . World Wide Web Consortium . Recuperado el 26 de octubre de 2017 .
- ↑ Håkon Wium Lie ; Bert Bos (17 de diciembre de 1996). "Cascading Style Sheets, level 1" . World Wide Web Consortium . Recuperado el 9 de diciembre de 2006 .
- 1 2 3 Koch, Peter-Paul (2013). "CSS – box-sizing" . QuirksMode . Recuperado el 30 de marzo de 2019 .
- ↑ Raggett, Dave (23 de enero de 1996). "El modelo de tabla HTML3" . Consorcio World Wide Web . Recuperado el 26 de octubre de 2017 ."Tablas HTML RFC 1942" . IETF .
El ancho predeterminado de la tabla es el espacio entre los márgenes izquierdo y derecho actuales.
- ↑ Raggett, Dave; Le Hors, Arnaud; Jacobs, Ian (24 de diciembre de 1999). "13 Objetos, imágenes y applets § Ancho y alto" . Consorcio World Wide Web . Recuperado el 26 de octubre de 2017 .
- ↑ Raggett, Dave (14 de enero de 1997). "Especificación de referencia de HTML 3.2" . Consorcio World Wide Web . Recuperado el 26 de octubre de 2017 .
- ↑ Wium Lie, Håkon ; Bos, Bert (17 de diciembre de 1996). "Cascading Style Sheets, level 1" . World Wide Web Consortium . Recuperado el 26 de octubre de 2017 .
- ↑ Wium Lie, Håkon ; Bos, Bert (17 de diciembre de 1996). "Cascading Style Sheets, level 1" . World Wide Web Consortium . Recuperado el 26 de octubre de 2017 .
- ↑ Koch, Peter-Paul. "Ajuste del modelo de caja" . XS4ALL . Consultado el 26 de octubre de 2017 .
- 1 2 Johansson, Roger (21 de diciembre de 2006). "Internet Explorer y el modelo de caja CSS" . 456 Berea Street . Recuperado el 26 de octubre de 2017 .
- ↑ Lance Silver (marzo de 2001). "Mejoras CSS en Internet Explorer 6" . Microsoft Developer Network . Microsoft . Consultado el 24 de junio de 2007 .
- ↑ Shafer, Dan (2005). HTML Utopia: Diseño sin tablas con CSS . Melbourne: Sitepoint . pp. 124 y Apéndice C. ISBN 0-9579218-2-9.
- ↑ Shea, David ; Molly E. Holzschlag (2005). El zen del diseño CSS . Berkeley: Peachpit Press. ISBN 0-321-30347-4.
- 1 2 Markus Mielke (26 de septiembre de 2006). "Compatibilidad de hojas de estilo en cascada en Internet Explorer 7" . Microsoft Developer Network . Microsoft . Consultado el 24 de junio de 2007 .Las páginas creadas en modo no estricto (o "modo quirks") no cambiarán su comportamiento en IE7 y no se verán afectadas por filtros CSS defectuosos.
- ↑ "!DOCTYPE" . Microsoft Developer Network . Microsoft . Consultado el 13 de enero de 2007 ."Los siguientes ejemplos muestran cómo usar la declaración !DOCTYPE para especificar la DTD a la que se ajusta un documento y para cambiar Internet Explorer 6 y versiones posteriores al modo compatible con estándares."
- ↑ Arve Bersvendsen (febrero de 2004). "CSS sin trucos para IE" . Blog de Arve Bersvendsen . Archivado del original el 15 de enero de 2007. Consultado el 16 de enero de 2007 .
- ↑ "Vorsprung durch Webstandards | Douglas Bowman declara su amor por CSS" . Vorsprungdurchwebstandards.de. Archivado del original el 14 de junio de 2010. Consultado el 7 de julio de 2010 .
- ↑ "Vorsprung durch Webstandards | Peter-Paul Koch declara su amor por CSS" . Vorsprungdurchwebstandards.de. Archivado del original el 27 de febrero de 2010. Consultado el 7 de julio de 2010 .
- ↑ "La Ilustración del Modelo de Caja, Bernie Zimmermann" . Bernzilla.com. 4 de abril de 2003. Archivado del original el 27 de diciembre de 2010. Consultado el 7 de julio de 2010 .
- ↑ "Módulo básico de interfaz de usuario CSS3" . Consorcio World Wide Web .
- ↑ "-moz-box-sizing" . Centro para desarrolladores de Mozilla . Mozilla . 11 de abril de 2009. Consultado el 11 de abril de 2009.
Es posible usar esta propiedad para emular el comportamiento de los navegadores que no admiten correctamente la especificación del modelo de caja CSS.
Enlaces externos
- Especificación del modelo de caja del consorcio World Wide Web (W3C).
- Un tutorial sobre el modelo de caja CSS.
- Descripción de Tantek Çelik del "truco del modelo de caja"
- Cómo lograr que Internet Explorer funcione correctamente con CSS : artículo en about.com que describe varias maneras de solucionar el problema del modelo de caja y otros errores de IE.
- Compatibilidad con hojas de estilo en cascada (CSS) en Internet Explorer 7 – Artículo de MSDN, julio de 2006.
- Diferencias en el modelo de caja CSS entre Firefox e Internet Explorer : explicación adicional de las diferencias de representación entre Mozilla Firefox e Internet Explorer.
- Desarrollo web
- marcos CSS
- Hojas de estilo en cascada
