《div+css定位初级详解》由会员分享,可在线阅读,更多相关《div+css定位初级详解(6页珍藏版)》请在金锄头文库上搜索。
1、一、CSS 中的块模型在 CSS 的定义中,有的 html 标签被浏览器当成一个块来显示,比如 div、table、p、ul 等等,我们称之为块元素;有的 html 标签被浏览器显示在 文本行之类,如 a、span、font 等等,我们称之为行内元素。行内元素我这里 就不讲了,只讲讲块元素的模型。每一个块元素都可以分为 context、padding、boder 和 margin 几个部分,我们 常说的宽和高,通常指的是 context 的宽和高(也有可能是 context+padding, 具体跟浏览器有关),padding 代表内容和边框之间的填充,margin 代表边框之 外的空白,如下
2、图:这几个部分都是可以通过 CSS 进行指定的,当然,CSS 还可以控制背景,因此, 我们可以通过 CSS 来灵活控制我们页面的外观。二、CSS 中的文档流模型所有的块元素在 html 文档中是按照它们出现在文档中的先后顺序排列的(当然, 嵌套不在此列),每一个块都会另起一行。如下图:他们对应的 html 如下: div1div2div3为了定义他们的宽度、高度还有边框,我们定义如下的 CSS: #div1border:1px solid #000099;height:60px;width:200px;margin:2px;#div2border:1px solid #000099;heigh
3、t:60px;width:200px;margin:2px;#div3border:1px solid #000099;height:60px;width:200px;margin:2px;三、CSS 中的相对定位和绝对定位模型在文档流中,每个块元素都会被安排到流中的一个位置,我们可以通过 CSS 中 的定位属性来重新安排它的位置。定位分为相对定位和绝对定位,相对定位是 相对于该块元素在文档流中的位置的,比如,我们可以使用相对定位把 div2 放 到 div1 的右侧,CSS 代码如下: #div1border:1px solid #000099;height:60px;width:200px
4、;margin:2px;#div2border:1px solid #000099;height:60px;width:200px;margin:2px;position:relative;top:-64px;left:204px;#div3border:1px solid #000099;height:60px;width:200px;margin:2px;下面是效果:可以看到一个有趣的现象,那就是虽然我们把 div2 移走了,但是 div1 和 div3 中间还是有一个空间,说明相对定位的元素是会占据文档流空间的,这里的 div2 就是典型的“站着茅坑不拉屎”。使用绝对定位也是可以把 di
5、v2 摆到 div1 的右边的,而且绝对定位是不会占据 文档流空间的,如下图,div1 和 div3 之间没有空白:div2 的 CSS 代码: #div2border:1px solid #000099;height:60px;width:200px;margin:2px;position:absolute;top:15px;left:214px;绝对定位是个好东西,可以把内容显示到页面上的任何位置,但是对于我们程 序员来说,却不能使用太多的绝对定位,因为使用程序动态向 div 中添加内容, div 的大小是不可知的,无法将每一个 div 的位置都定死。四、CSS 中的浮动和清除模型在 CS
6、S 中,最让人不好理解的应该算是 float 和 clear 意义了。float 可以达到这样一个效果,就是本来应该一行一个的块元素,如果定义了 float 属性, 则只要行的空间足够,它会跑别的 float 元素的屁股后面,而不再会单独占用 一行,如下图:这里把 div2 和 div3 都定义了为浮动,代码如下:#div2border:1px solid #000099;height:60px;width:200px;margin:2px;float:left;#div3border:1px solid #000099;height:60px;width:200px;margin:2px;f
7、loat:left;那什么情况下需要 clear 呢?这是因为 float 的元素和绝对定位的元素一样, 也是不占用文档空间的,因此,如果我们把 div2 和 div3 都嵌套在 div1 中,并 且把 div2 和 div3 都定义为浮动,那么由于它们不占用文档空间,设置为浮动 后 div2 和 div3 都不属于 div1 的内容了,所以作为父元素的 div1 没有内容填 充,不知道自动扩展大小,以至于显示出来 div2 和 div3 会跑到 div1 的外面, 如下图:下面是它们的 html 代码: div1div2div3下面是它们的 css 代码: #div1border:1px s
8、olid #000099;height:60px;width:450px;margin:2px;#div2border:1px solid #000099;height:60px;width:200px;margin:2px;float:left;#div3border:1px solid #000099;height:60px;width:200px;margin:2px;float:left;因为 float 的元素不占用文档流空间,有时候被的元素还会重叠到 float 元素 上,这里我就不举例了。为了解决上面的问题,就需要在 float 之后的元素上面使用 clear,在此例中, 我们在
9、 div3 后面加入一个空段落,并设置其为 clear,如下: div1div2div3clear 属性定义了元素的哪边上不允许出现浮动元素。在 CSS1 和 CSS2 中, 这是通过自动为清除元素(即设置了 clear 属性的元素)增加上外边距实现的。 在 CSS2.1 中,会在元素上外边距之上增加清除空间,而外边距本身并不改变。 不论哪一种改变,最终结果都一样,如果声明为左边或右边清除,会使元素的 上外边框边界刚好在该边上浮动元素的下外边距边界之下。 下面是新增加的空段落的 CSS 代码:.clearclear:left; 这时 div1 有了 p 这块内容(尽管 p 里面是空的),并且 clear:为 left, 使得 p 的上外边框边界刚好在其上浮动元素的下外边距边界之下。 效果图:还是以我的 xkland 项目为例,来设计一个完整的页面吧。下面是我的 welcome.jsp 页面的布局图: