前段--尝试以新角度深入理解CSS盒模型(1)

CSS样式规则的学习是很繁琐和枯燥的,因为它不像物理、数学或者其他编程语言一样有一些基本概念、有一些基本公理或者规则,其他所有的表现都是概念在这些公里或者规则之下的逻辑游戏,CSS是有一些基本概念,但它没有说给你几条规则然后所有的表现都是在这些规则之下的任意自由组合,你要推测一个样式声明块的在页面中具体是怎样表现的,你几乎靠非常少逻辑推理去推测出来,绝大多数是你知道并记住了这种写法的声名块是具有怎样的表现的。之所以为这样也是因为样式的组合太繁琐组合情况特别多,像同样的概念margin在块级中的表现和在行内元素中的表现是不一样的,即便是同样在块级元素中不同方向上的margin表现也是不一样的,再进一步就算是同样在块级元素中同样的方向上,父元素的某些属性不同其表现也是不一样的,再加上浮动定位又是另一种情况,要是再考虑到各种不同浏览器的兼容性的话那就更令人烦躁了,这样的特性是不可能存在一个或几个规则让你逻辑推理样式表现的,掌握CSS样式规则只有穷举各种各样的组合并且记住它们的表现(虽然可能会有一小点的逻辑推理),因此前端这个职业感觉工作经验比其他的编程语言更加重要一些。

掌握一门语言的结果是在头脑中可以形成一个清晰的知识系统脉络图,而CSS的学习很难有一个清晰的逻辑线路去循环渐进的学习,因为它的概念关联性太弱了,所以在没有很清晰的逻辑帮助理解概念时,很好的理解现有概念是非常有必要的,比如说盒模型。

盒模型以及相关知识点在CSS中占有非常重要而核心的地位,而大家常常听到的非常经典的对盒模型的理解就是一个盒子的类比,盒子本身是border,里面货物就是内容,填充就是padding,盒子在摆放的时候要分开一定的距离就是margin。这种类比有它的好处,但是仍然感觉像是和没说一样(至少我这么觉得)。而且这种类比无形中把padding和内容这个整体视为标签元素的内容,把margin视为内容以外的东西,感觉这对理解css布局的相关本质会造成一定的偏差,最明显的一个例子就是初学人员会完全没有意识到width和height指定的宽和高是内容的宽和高(css3加了新的属性可以更改宽高的指定范围),并不是把padding和border还有margin算在一起的。所以现在我并不想把内容、padding、border、margin放到一个盒子相关中去理解,以一个不是盒模型的角度去理解也同样可能(只是可能因人而异)有利于避开在盒模型类比下形成想当然的认识。

在起初接触前端的时候都会看到这样的话:html标记页面内容,css表现页面样式,javascript控制页面行为。这是说页面的内容都是用html标签标记出来的,一个内容一定有一个相关html标签去标记它;css做到的是表现与内容分离,也就是说css是为页面的内容添加各种各样的样式,它的操作目标是内容,所以关于CSS的概念以内容为起点讨论,而不以盒子为起点。

打开网页可以发现页面的内容范围是文字、表单相关(输入框、按钮、单选框、复选框、下拉框)、图片、音频、视频。内容在页面中会放到一个矩形区域中即内容区,控制该区域的宽高属性为width和height,在内容区外部分则是标签元素形成的用于布局用的额外的空间。
标记这些内容的html标签分为两种:替换元素与非替换元素。
替换元素:以上除了文字都是替换元素,替换元素是指这个标签元素为某个内容的占一个位子,在原始html代码中看不出来实际具体表现。像图像、音频、视频标签它们就是指向某个图片文件、音频文件、视频文件。起占位作用的标签就是一种替换元素。
非替换元素:标签元素标记的内容在原始html代码中可以看出来,就不如说用span标签标记的文本。标记文本的span标签就是一种非替换元素。

因为内容总是有一个标签来标记它,而标签在浏览器中的渲染结果就是在内容周围变成一个矩形区域(在CSS3中可以设置为非矩形区域),这种矩形区域会在内容周围生成额外的空间,而产生的额外空间的种类一共有三种:padding(内边距)、border(边框)、margin(外边距)。在正常文档流中css对内容的样式布局实现大部分就是通过设置padding、border、margin来实现的。

padding空间是在边框和内容区域之间的无色透明的一块区域,该区域可以看到元素的背景色并且在没有border和margin的情况下该区域是不能合并的。
border空间是在内边距和外边距之间的一块有内置样式有颜色的一块区域,该区域也是绘制在背景色之上的,因此如果边框有镂空是可以看到背景颜色的。
margin空间是在边框外面的一块无色透明区域,该区域可以看到父元素的背景色并且在正常流中垂直方向上该区域是可以合并的,水平方向上是不存在合并规则的。

以上三个空间区域在在默认情况下都是不存在的。

虽然每个元素都会在内容周围渲染成矩形区域,但不同元素默认渲染成的矩形区域类型可能是不同的。通过设置display可以在不同类型的矩形区域之间进行切换。对矩形区域分类的一个标准就是看矩形区域前后是否有换行符:前后都有换行符的矩形区域为块级矩形区域;前后没有换行符的矩形区域为行内矩形区域。相应的不同类别的矩形区域所对应的元素也就叫做块级元素或者行内元素。换行符只是块级和行内与否的一条区分标识,并不是区别的全部,他俩在默认状态和变化行为上也有些许差别。
在文档流中默认状态下,多个块级元素是垂直排列的,并且它的宽为父元素的内容区域宽,高为自己内容区域高,可以自由改变自己内容区的宽和高。而多个行内元素是横向排列的,它的宽和高都为内容区域的宽和高,并且不能设置内容区的宽和高。

这样,一块标签标记的内容在页面中的表现从里到外就是内容区、内边距、边框、外边距四部分,这四部分是紧密相连的,并作为一个整体放在一个布局上下文中,并基于这个布局上下文摆放。布局上下文是父元素的内容区,这个内容区可能在块级元素中也可能在行内元素中。一般情况下,各个标签内容能按照从左到右的顺序摆放的就按照从左到右的顺序摆放,从左到右摆放不下的(像超出或者有换行符)就按照从上到下的顺序摆放,如果一个元素标签处在这样一个摆放顺序中,就说这个标签在文档流中。只有浮动和定位会摆脱这种束缚,这时就说元素脱离了文档流。

时间: 2024-10-02 11:29:34

前段--尝试以新角度深入理解CSS盒模型(1)的相关文章

理解CSS盒模型

CSS盒模型是CSS可视化格式化系统的基石,它是理解样式表如何工作的核心概念,盒模型可以用于元素定位和网页布局.内边距padding是内容区和边框border之间的区域,元素盒在页面上占据的总宽度是左边的外边缘到右边的外边缘之间的距离.使用width和height属性可以设置块级元素或内嵌可替换元素的大小.外边距margin是围绕在元素边框之外的可选区域.正常文档中的相邻块级元素的垂直外边距将会重合,即,相邻的两个块级元素之间的空白将会是两个元素的外边距中较大的那一个,而不是两个外边距的和.边框

深入理解CSS盒模型

如果你在面试的时候面试官让你谈谈对盒模型的理解,你是不是不知从何谈起.这种看似简单的题其实是最不好答的. 下面本文章将会从以下几个方面谈谈盒模型. 基本概念:标准模型 和IE模型 CSS如何设置这两种模型 JS如何设置获取盒模型对应的宽和高 实例题(根据盒模型解释边距重叠) BFC(边距重叠解决方案) 基本概念 盒模型的组成大家肯定都懂,由里向外content,padding,border,margin. 盒模型是有两种标准的,一个是标准模型,一个是IE模型. 从上面两图不难看出在标准模型中,盒

理解CSS盒子模型

什么是CSS的盒子模式呢?为什么叫它是盒子?先说说我们在网页设计中常听的属性名:内容(content).填充(padding).边框(border).边界(margin), CSS盒子模式都具备这些属性. 这些属性我们可以把它转移到我们日常生活中的盒子(箱子)上来理解,日常生活中所见的盒子也具有这些属性,所以叫它盒子模式.那么内容就是盒子里装的东西:而填充就是怕盒子里装的东西(贵重的)损坏而添加的泡沫或者其它抗震的辅料:边框就是盒子本身了:至于边界则说明盒子摆放的时候的不能全部堆在一起,要留一定

深入理解CSS盒子模型

前言:前阵子在做一个项目时,在页面布局方面遇到了一点小问题,于是上stackoverflow上求助.ifaou在帮助我解决我问题的同时,还推荐我阅读一篇有关CSS盒子模型的文章<The CSS Box Model>,阅读之后受益匪浅,才知道自己对盒子模型知识还是如此欠缺.恰逢学期末,项目验收后暂时告一段落,有空闲的时间.于是想把这篇文章翻译出来,一方面再给自己一点挑战和锻炼,另一方面也给大家参考,让更多的人受益. 这篇文章适合初级web设计朋友,让你对盒子模型有更近一步的理解.但是在阅读这篇文

&lt;转&gt;HTML+CSS总结/深入理解CSS盒子模型

原文地址:http://www.chinaz.com/design/2010/1229/151993.shtml 前言:前阵子在做一个项目时,在页面布局方面遇到了一点小问题,于是上stackoverflow上求助.ifaou在帮助我解决我问题的同时,还推荐我阅读一篇有关CSS盒子模型的文章<The CSS Box Model>,阅读之后受益匪浅,才知道自己对盒子模型知识还是如此欠缺.恰逢学期末,项目验收后暂时告一段落,有空闲的时间.于是想把这篇文章翻译出来,一方面再给自己一点挑战和锻炼,另一方

CSS盒模型 理解

每个元素(块级和内嵌)都会有个矩形盒子,这个盒子为元素盒,盒子的中间(center)为元素的内 容,center区域内的距离为元素的高度(height).宽度(width).在盒模型中 padding就是内容 (center)与边框(border)的空隙区域,而margin 则是边框(border)外的空隙区域.元素的背景颜 色和背景图像在内边框(padding)区域是可见的,并且延生到border下面:元素的外边框(maegin)区 域总是透明的,所有父级元素的背景能看见. 盒内距离表示例如:

css盒模型和块级、行内元素深入理解

一.CSS盒模型 盒模型概述 盒模型是CSS的核心知识点之一,它指定元素如何显示以及如何相互交互.页面上的每个元素都被看成一个矩形框,这个框由元素的内容.内边距.边框和外边距组成.如下图所示: 内边距出现在内容区域的周围.如果在元素上添加背景,那么背景应用于元素的内容和内边距组成的区域.因此可以用内边距在内容周围创建一个隔离带,使内容不与背景混合在一起.添加边框会在内边距区域外边增加一条线.这些线可以有不同的样式和宽度,如实线.虚线.点画线.在边框外边的是外边距,外边距是透明的,一般使用它控制元

尖刀出鞘的display常用属性及css盒模型深入研究

一:diplay:inline-block 含义:指元素创建了一个行级的块级元素,该元素内部(内容)被格式化成一个块级元素,同时元素本身则被格式化成一个行内元素.更简单的说就是说inline-block后的元素具有block元素可以设置宽高特性,同时又具有inline元素默认不换行的特性. 其实display:inline-block这个属性现在浏览器都支持,其实IE从5.5开始就已经支持了,但是IE6,7支持的还不够完善,我们可以先来做demo测试下就可以明白.为了做demo,所以我们现在需要

IE浏览器和CSS盒模型【转】

总结:css盒模型在不同浏览器之间(例如:ie和其他浏览器 如火狐)的差异只存在于ie6之前的版本中,如ie5.在ie6下, Internet Explorer 在标准模式下渲染时使用了 CSS 规范的算法,也就是会显示正确的盒模型,而在 quirks 模式下使用先前的,不规范的算法.即,只有在怪异模式下,css盒模型才会在ie和火狐下存在差异. 但是实际上我们都是使用标准的模式,只要为文档设置一个DOCTYPE,就会使得IE遵循标准兼容模式的方式工作. //以下摘自百度百科"怪异模式"