前序:
平常我们进行web开发时,需要根据设计图开发出对应的产品,在这个开发过程中,那怎么样去像个画家一样给这些单调,枯燥的物体赋予色彩上的鲜明和灵魂上的活力呢,那这就需要css啦,从1996年W3C发布CSS1规范到现在的CSS3规范,这是一个从出生到成长的故事...
正文:
- 1994年,网页设计主要依赖HTML,设计师通过表格( 标签)、帧( )和空格( )来进行布局,这些方法不仅复杂且难以维护,也限制了设计的灵活性。
- 1996年,W3C发布css规范,标志着样式和布局从HTML中分离的开始。CSS引入了盒子模型的概念,为网页设计带来了革命性的变化。设计师可以用CSS控制文档的布局和样式,而不仅仅是内容。
- 1998年,CSS2规范发布,进一步发展了CSS的功能,包括定位和可视化效果。然而,不同浏览器对CSS规范的支持差异导致了所谓的"浏览器大战",其中盒模型的解释差异尤为显著。在1996年W3C发布的css规范中描述盒子模型的各个部分(外边距、边框、内边距、内容)被视为分开的组件。在这种标准盒模型下,元素的width和height属性指定的是内容区域的大小,不包括内边距(padding)、边框(border)和外边距(margin),此后这被称为W3C 盒子模型。W3C盒子模型并不是唯一的, 1999年发布的Internet Explorer 5中的CSS盒模型实现是怪异盒模型,也称IE盒子模型,IE盒子模型将元素的width和height定义为包括内容区域(content)、边框(border)和内边距(padding),但不包括外边距(margin)。这两种盒模型的区别如下表:
特征 IE盒子模型(怪异盒模型) W3C标准盒模型 定义 width 和 height 包括内容、内边距和边框 width 和 height 仅包括内容 内容 (Content) width 和 height 减去内边距和边框后的区域 直接由 width 和 height 定义的区域 内边距 (Padding) 包含在 width 和 height 内 在 width 和 height 外部额外添加 边框 (Border) 包含在 width 和 height 内 在 width 和 height 外部额外添加 外边距 (Margin) 对总体尺寸没有影响,用于元素之间的空间 对总体尺寸没有影响,用于元素之间的空间 应用场景 早期IE版本默认 现代浏览器默认 示例: 当设置width为200px,height为200px,padding为10px,margin为10px,可以看到盒子的width和height定义为包括内容区域(content)、边框(border)和内边距(padding),但不包括外边距(margin)
当设置width为200px,height为200px,padding为10px,margin为10px,可以看到盒子的width和height属性指定的是内容区域的大小,不包括内边距(padding)、边框(border)和外边距(margin)
- 这个时期,开发者为了解决由于盒模型差异带来的兼容性问题,Web开发者通常需要采取额外的步骤,如使用CSS hacks或者特定的DOCTYPE声明来触发标准模式(Standards Mode)或怪异模式(Quirks Mode)。
- 2000年代初,随着Web标准化的推进和浏览器技术的发展,浏览器开始更好地遵守W3C的规范。CSS3的引入进一步丰富了Web设计的可能性,包括更灵活的布局选项和对盒模型的控制。W3C 在 CSS3 中包含了“box-sizing”属性。当box-sizing: border-box;为元素指定后,所有的元素填充或边框都会在指定的宽度和高度内绘制,“如传统 HTML 用户代理通常实现的那样”。从Can I Use (caniuse.com)可以看到border-box在各个浏览器的支持情况。
- 在此之后IE盒子模型的影响力和使用频率开始逐步下降,直到2022年6月15日正式停止支持Internet Explorer 11(IE11)在某些版本的Windows 10上的使用。IE盒子模型的影响力和使用频率达到了最低。
- 2000年代初直到现在,CSS盒子模型本身的基本概念和结构在Web标准中保持相对稳定。它继续围绕内容(content)、内边距(padding)、边框(border)、和外边距(margin)的核心组成部分展开。然而,随着CSS规范的不断发展,围绕盒子模型的功能和用法出现了一些扩展和改进,提高了布局设计的灵活性和控制力,如以下内容:
特性/改进 描述 引入时间 优点 box-sizing 允许改变用于计算元素宽度和高度的盒模型。 CSS3 提供了更灵活的盒模型控制,简化了边框和内边距的布局计算问题。 Flexbox布局 提供一种更高效的方式来布局、对齐和分配容器内项目之间的空间,即使项目大小未知或动态变化。 CSS3 强化了布局工具,特别适用于一维布局中的复杂布局和响应式设计。 CSS Grid布局 引入了二维网格布局系统,可以控制行和列以及它们之间的空间。 CSS Grid 使创建复杂的二维网页布局变得简单直观,极大地提升了布局的可能性和灵活性。 响应式设计相关属性 包括min-width、max-width、min-height、max-height等,用于创建响应式设计。 CSS2、CSS3 增强了对不同屏幕和设备的适应能力,提升了网页的可访问性和用户体验。 display: inline-block 允许元素行内排布,同时保持块级特性(如设置宽高)。 CSS2 提供了在不使用浮动的情况下,进行更精细控制布局的能力。 display: table, table-row, table-cell等 通过CSS属性模拟表格布局,无需使用HTML表格标签。 CSS2 提供了使用CSS实现表格布局的能力,增强了语义化HTML的实用性。 CSS变量(自定义属性) 允许存储可重用的值,并在整个文档中使用它们。 CSS Variables 增加了样式表的灵活性和可维护性,简化了复杂主题的实现。 新的布局单位 引入了如vw(视口宽度的百分比)、vh(视口高度的百分比)、rem(相对于根元素的字体大小)等单位。 CSS3 提供了更多布局和响应式设计的选项,使得布局适应性更强。 最后:
CSS盒子模型的发展反映了Web设计从简单文档到复杂应用的演变过程。通过不断的规范更新和浏览器技术的进步,盒子模型提供了一个强大而灵活的工具,使得网页布局更加直观和易于控制。今天,无论是传统网站还是现代Web应用,CSS盒子模型都是不可或缺的基础之一。随着Web技术的持续发展,理解盒子模型的历史和基本原理对于开发者来说依然至关重要。