stringtranslate.com

Modelo de caja CSS

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 pautas 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 compatibles con los estándares del modelo de caja en los navegadores principales. Con la llegada de CSS2 en 1998, que introdujo la box-sizingpropiedad, el problema se había resuelto en gran medida.

Detalles específicos

La especificación de hojas de estilo en cascada (CSS) describe cómo se muestran los elementos de las páginas web en los navegadores gráficos. La sección 4 de la especificación CSS1 define un "modelo de formato" que otorga a los elementos a nivel de bloque (como py blockquote) un ancho y una altura, y tres niveles de cuadros que los rodean: relleno, bordes y márgenes. [4] Si bien la especificación nunca utiliza el término "modelo de cuadro" de manera explícita, el término se ha vuelto ampliamente utilizado por los desarrolladores web y los proveedores de navegadores web.

Todos los elementos HTML pueden considerarse "cajas", esto incluye divetiqueta, prótulo o aetiqueta. Cada una de esas cajas tiene cinco dimensiones modificables:

  • heighty describe las widthdimensiones del contenido real de la caja (texto, imágenes, ...)
  • describe paddingel espacio entre este contenido y el borde del cuadro
  • es bordercualquier tipo de línea (continua, punteada, discontinua...) que rodea el cuadro, si está presente
  • el margines el espacio alrededor del borde

Según la especificación CSS1, publicada por W3C en 1996 y revisada en 1999, cuando se especifica explícitamente un ancho o alto para cualquier elemento a nivel de bloque, debe determinar solo el ancho o alto del elemento visible, con el relleno, los bordes y los márgenes aplicados después. [4] [5] Antes de CSS3, este modelo de caja se conocía como modelo de caja W3C , en CSS3, se conoce como content-box.

Por lo tanto, el ancho total de una caja es left-margin+ left-border+ left-padding+ width+ right-padding+ right-border+ right-margin. De manera similar, la altura total de una caja es top-margin+ top-border+ top-padding+ height+ bottom-padding+ bottom-border+ bottom-margin.

Por ejemplo, el siguiente código CSS

. myClass { ancho : 200 px ; alto : 100 px ; relleno : 10 px ; borde : sólido 10 px negro ; margen : 10 px ; }             

especificaría las dimensiones de la caja de cada bloque perteneciente a 'myClass'. Además, cada una de esas cajas tendrá una altura total de 160 px y un ancho de 260 px.

CSS3 introdujo el modelo de caja de Internet Explorer al estándar, conocido como border-box. [6]

Historia

La diferencia en cómo se interpreta el ancho entre los modelos de caja del W3C e Internet Explorer

Antes de HTML 4 y CSS, muy pocos elementos HTML admitían tanto bordes como relleno, por lo que la definición del ancho y la altura de un elemento no era muy controvertida. Sin embargo, variaba según el elemento. El atributo HTML width de una tabla definía el ancho de la tabla, incluido su borde. [7] Por otro lado, el atributo HTML width de una imagen definía el ancho de la propia imagen (dentro de cualquier borde). [8] El único elemento que admitía relleno en aquellos primeros días era la celda de la 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 márgenes, bordes y relleno para muchos más elementos. Adoptó un ancho de definición en relación con el contenido, el borde, el margen y el relleno similar al de una celda de tabla. [11] Desde entonces, esto se conoce como el modelo de caja del W3C .

En aquel momento, 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 [13] o de Internet Explorer . [14]

Internet Explorer en " modo peculiaridades " incluye el contenido, el relleno y los bordes dentro de un ancho o alto especificado; esto da como resultado una representación más angosta o más corta de un cuadro de lo que resultaría siguiendo el comportamiento estándar. [15]

El comportamiento del modelo de caja de Internet Explorer se consideró a menudo un error, debido a la forma en que las versiones anteriores de Internet Explorer manejan 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 . [16] [17] A partir de Internet Explorer 6 , el navegador admite un modo de representación alternativo (llamado "modo compatible con estándares") que resuelve esta discrepancia. Sin embargo, por razones de compatibilidad con versiones anteriores, todas las versiones aún se comportan de la forma habitual, no estándar, de forma predeterminada (consulte el modo peculiar ). Internet Explorer para Mac no se ve afectado por este comportamiento no estándar.

Soluciones alternativas

Las versiones 6 y posteriores de Internet Explorer no se ven afectadas por el error si la página contiene determinadas declaraciones de tipo de documento HTML . Estas versiones mantienen el comportamiento con errores cuando están en modo peculiar por razones de compatibilidad con versiones anteriores. [18] Por ejemplo, el modo peculiar se activa:

Se han ideado varias soluciones alternativas para obligar a las versiones 5 y anteriores de Internet Explorer a mostrar páginas web utilizando el modelo de caja del W3C. Estas soluciones alternativas generalmente explotan errores no relacionados en el procesamiento del selector CSS de Internet Explorer para ocultar ciertas reglas del navegador. La más conocida de estas soluciones alternativas es el "truco del modelo de caja" desarrollado por Tantek Çelik , un ex empleado de Microsoft que desarrolló esta idea mientras trabajaba en Internet Explorer para Macintosh. Implica especificar una declaración de ancho para Internet Explorer para Windows y luego anularla con otra declaración de ancho para navegadores compatibles con CSS. Esta segunda declaración se oculta de 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 ha tenido algunos problemas solucionados, pero no otros, lo que provoca resultados no deseados en las páginas que utilizan estos trucos. [18]

Los hacks del modelo de caja han demostrado ser poco fiables porque dependen de errores en la compatibilidad de CSS de los navegadores que pueden solucionarse en versiones posteriores. Por este motivo, algunos desarrolladores web han recomendado evitar especificar tanto el ancho como el relleno para el mismo elemento o utilizar comentarios condicionales o filtros CSS para solucionar el error del modelo de caja en versiones anteriores de Internet Explorer. [14] [20]

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. [21] Peter-Paul Koch da el ejemplo de una caja física, cuyas dimensiones siempre se refieren a la caja misma, incluido el relleno potencial, pero nunca a su contenido. [13] 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. [22] Bernie Zimmermann dice que el modelo de caja de Internet Explorer se acerca más a la definición de dimensiones de celda y relleno utilizado en el modelo de tabla HTML. [23]

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 lo implementan comúnmente los agentes de usuario HTML heredados". [24] Internet Explorer 8 , navegadores WebKit como Apple Safari 5.1+ y Google Chrome , navegadores basados ​​en Gecko como Mozilla Firefox 29.0 y posteriores, Opera 7.0 y posteriores, y Konqueror 3.3.2 y posteriores admiten la propiedad box-sizing de CSS3. Los navegadores Gecko anteriores a 29.0 admiten la misma funcionalidad utilizando la -moz-box-sizingpropiedad específica del navegador. [25] border-box es el modelo de caja predeterminado utilizado en el marco Bootstrap .

Referencias

  1. ^ ab Etemad, Elika J., ed. (22 de diciembre de 2020). «CSS Box Model Module Level 3». W3C . Nivel 3. Grupo de trabajo CSS . Consultado el 9 de abril de 2021 .
  2. ^ ab Bos, Bert; Prowse, Anton, eds. (6 de julio de 2018). "CSS Basic Box Model Level 3". W3C . 31 de julio de 2018. CSS Working Group . Consultado el 9 de abril de 2021 .
  3. ^ "CSS". MDN Web Docs . 23 de marzo de 2019 . Consultado el 30 de marzo de 2019 .
  4. ^ ab Wium Lie, Håkon ; Bos, Bert (11 de enero de 1999). «Hojas de estilo en cascada, nivel 1 § Modelo de formato». Consorcio World Wide Web . Consultado el 26 de octubre de 2017 .
  5. ^ Håkon Wium Lie ; Bert Bos (17 de diciembre de 1996). «Hojas de estilo en cascada, nivel 1». Consorcio World Wide Web . Consultado el 9 de diciembre de 2006 .
  6. ^ Peter-Paul Koch (2013). «CSS – box-sizing». quirksmode.org . Consultado el 30 de marzo de 2019 .
  7. ^ Raggett, Dave (23 de enero de 1996). "El modelo de tabla HTML3". World Wide Web Consortium . Consultado el 26 de octubre de 2017 ."Tablas HTML RFC 1942". IETF . El ancho de tabla predeterminado es el espacio entre los márgenes izquierdo y derecho actuales.
  8. ^ Raggett, Dave; Le Hors, Arnaud; Jacobs, Ian (24 de diciembre de 1999). «13 objetos, imágenes y subprogramas § Ancho y altura». Consorcio World Wide Web . Consultado el 26 de octubre de 2017 .
  9. ^ Raggett, Dave (14 de enero de 1997). «HTML 3.2 Reference Specification». Consorcio World Wide Web . Consultado el 26 de octubre de 2017 .
  10. ^ Wium Lie, Håkon ; Bos, Bert (17 de diciembre de 1996). «Cascading Style Sheets, level 1» (Hojas de estilo en cascada, nivel 1). Consorcio World Wide Web . Consultado el 26 de octubre de 2017 .
  11. ^ Wium Lie, Håkon ; Bos, Bert (17 de diciembre de 1996). «Cascading Style Sheets, level 1» (Hojas de estilo en cascada, nivel 1). Consorcio World Wide Web . Consultado el 26 de octubre de 2017 .
  12. ^ Koch, Peter-Paul. "Ajuste del modelo de caja". XS4ALL . Consultado el 26 de octubre de 2017 .
  13. ^ ab Koch, Peter-Paul. «CSS – box-sizing». QuirksMode . Consultado el 26 de octubre de 2017 .
  14. ^ ab Johansson, Roger (21 de diciembre de 2006). «Internet Explorer y el modelo de caja CSS». 456 Berea Street . Consultado el 26 de octubre de 2017 .
  15. ^ Lance Silver (marzo de 2001). "Mejoras de CSS en Internet Explorer 6". Microsoft Developer Network . Microsoft . Consultado el 24 de junio de 2007 .
  16. ^ Shafer, Dan (2005). HTML Utopia: Diseño sin tablas con CSS. Melbourne: Sitepoint . pp. 124 y Apéndice C. ISBN 0-9579218-2-9.
  17. ^ Shea, David ; Molly E. Holzschlag (2005). El zen del diseño CSS. Berkeley: Peachpit Press. ISBN 0-321-30347-4.
  18. ^ de 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 peculiar") no cambiarán su comportamiento en IE7 y no se verán afectadas por filtros CSS dañados.Las páginas creadas en modo no estricto (o "modo peculiar") no cambiarán su comportamiento en IE7".
  19. ^ "!DOCTYPE". Microsoft Developer Network . Microsoft . Consultado el 13 de enero de 2007 ."Los siguientes ejemplos muestran cómo utilizar la declaración !DOCTYPE para especificar el DTD al que se ajusta un documento y para cambiar Internet Explorer 6 y versiones posteriores al modo compatible con estándares".
  20. ^ Arve Bersvendsen (febrero de 2004). "CSS sin hacks para IE". Blog de Arve Bersvendsen . Archivado desde el original el 15 de enero de 2007. Consultado el 16 de enero de 2007 .
  21. ^ "A la vanguardia de los estándares web | Douglas Bowman declara su amor por las CSS". Vorsprungdurchwebstandards.de. Archivado desde el original el 14 de junio de 2010. Consultado el 7 de julio de 2010 .
  22. ^ "A la vanguardia de los estándares web | Peter-Paul Koch declara su amor por las CSS". Vorsprungdurchwebstandards.de. Archivado desde el original el 27 de febrero de 2010. Consultado el 7 de julio de 2010 .
  23. ^ "Box Model Enlightenment, Bernie Zimmermann". Bernzilla.com. 4 de abril de 2003. Archivado desde el original el 27 de diciembre de 2010. Consultado el 7 de julio de 2010 .
  24. ^ "Módulo de interfaz de usuario básica CSS3". Consorcio World Wide Web .
  25. ^ "-moz-box-sizing". Centro de desarrolladores de Mozilla . Mozilla . 11 de abril de 2009 . Consultado el 11 de abril de 2009 . Es posible utilizar esta propiedad para emular el comportamiento de los navegadores que no admiten correctamente la especificación del modelo de caja CSS.

Enlaces externos