[网页基础]DIV+CSS学习笔记(二)深入理解盒子模型

DIV+CSS学习笔记()

一、盒子

盒子是很好理解的,关键是运用时要恰当。
盒子的基本概念,一个content(内容),三个属性:padding,border,margin,其中这三个属性又都带有top,right,bottom,left4个位置分属性,注意顺序是从顶,右,底,左算起的。
border的基本属性包括color,width,style,其中style要注意记一下:
none(无)、hidden(隐藏)、dotted(点线)、dashed(虚线)、solid(实线)、double(双线)、groove(凹线)、ridge(脊线)、inset(内凹线)、outset(外凸线)。

 

 

对于各种style的线,火狐浏览器支持得很好,但IE支持得就很不理想了,另外还要注意的是,在给元素设置background-color背景时,IE作用的区或为content+padding,而Firefox则是content+padding+border,当border很粗时,就会特别明显。如果是设置<body>,<body>是很特殊的一个盒子,它的背景会延伸到margin的部分,还有,<boyy>盒子的宽度不是由其内部的内容决定的,而是由浏览器窗口决定的,在设置各种margin时要注意这个问题。

 

对于设置padding或margin时,如果只设置一个值,表示上下左右4个均为该值;如果设置两个值,前者为上下值,后者为左右值;如果设置三个值,第1个为上值,第2个为左右值,第3个为下值;如果设置为四个值,依次为上、右、下、左值。

经验:当一个盒子设置了背景图像后,默认覆盖的范围是padding和内容组成的范围,并以padding的左上角为基准点平铺背景图象。

 

二、盒子之间的关系

先看一个例子:

CSS如下:

<style type="text/css">
        body{
        margin:0 0 0 0;
        font-family:宋体;
        font-size:12px;
        
        }
      ul { 
        background: #ddd; 
        margin: 15px 15px 15px 15px;
        padding: 5px 5px 5px 5px;
                                     /* 没有设置边框 */
      }
      li { 
        color: black;                /* 黑色文本 */ 
        background: #aaa;            /* 浅灰色背景 */
        margin: 20px 20px 20px 20px; /* 左侧外边距为0,其余为20像素*/
        padding: 10px 0px 10px 10px; /* 右侧内边距为0,其余10像素 */
        list-style: none             /* 取消项目符号 */
                                     /* 未设置边框 */
      }
      li.withborder {
        border-style: dashed;
        border-width: 5px;            /* 设置边框为2像素 */
        border-color: black;
        margin-top:20px; 
      }
    </style>

BODY如下:

<body>
    <ul>
      <li>第1个列表的第1个项目内容</li>      
      <li class="withborder">第1个列表的第2个项目内容,内容更长一些,目的是演示自动折行的效果。</li>
    </ul>
    <ul>
      <li>第2个列表的第1个项目内容</li>
      <li class="withborder">第2个列表的第2个项目内容,内容更长一些,目的是演示自动折行的效果。</li>
    </ul>
  </body>

效果如下:

 

三、标准文档流

定义:不使用其他的与排列和定位相关的特殊CSS规则时,各种元素的排列规则。

1、块级元素

总是以一个块的形式表现出来,且跟同级兄弟块依次竖直排列,左右撑满。

2、行内元素

比如:文字元素,<strong></strong>,<a></a>都是行内元素,不占用独立区域,仅在其它元素的基础上指出了一定的范围。

四、<div>村记与<span>标记

<div>是一个块级元素,它包围的元素会自动换行,<span>是一个行内元素,在它的前后不会换行,<span>没有结构上的意义,纯粹是应用样式,当基他行内元素都不合适时,就可以使用<span〉元素。

 

这里还需要注意:<span>村记可以包含于<div>标记中,反之则不行,

五、盒子在标准流中的定位原则

1、行内元素之间的水平margin:当两个行内元素紧邻时,它们之间的距离为第1个元素的margin-right加第2个元素的margin-left

2、块级元素之间的竖直margin:两个块级元素之间的距离不是margin-bottom加margin-top,而是两者中的较大者,这个现象称为margin的“塌陷”现象。

3、嵌套盒子之间的margin:嵌套形成的两个父子块,其中子块的margin将以父块的content为参考。

 

这里注意,子div 的margin为负值时,IE会扩大父div区域来装子div,但FoxFire却不会,从而形成“错位”,所以在设计时,最好计算好各自区域的大小。

看看下边的图,分析一下各字母的值,根据上边的代码能分析出来就差不多理解盒子了:

 

a:由于body的margin设置为0,因此a的值为ul的左margin,15像素。

b:ul的左padding加li的左margin,25像素。

c:第二个li的border,即5px;

d:li的左padding,即10px;

e:计算完其它部分再来计算这里

f:第二个li的border,5px;

g:ul的右padding加上li的右margin,25px;

h:ul的右margin,15px;

i:由于body的margin设置为0,因此,i的值为ul的上margin,15px;

j:ul的上padding加上li的上margin,25px;

k:li的上下margin加上文本的高度,34px;

l:两个li相邻,因此上面的li的下margin和下面li的上margin相遇,发生“塌陷”现象,因此l的值为两者中较大者,而两者相同,l的值为20px;

m:第二个li的border,5px;

n:li的上下padding和两行文字的高度,48px;

o:同m

p:ul的下padding加上li的下margin,25px;

q:两个ul相邻,上面的ul的下margin和下面的ul的上margin相遇,发生“塌陷”现象,因此,q的值为两者中较大者,两者一样,q的值为15px;

posted @ 2012-10-28 15:29  小颗豆  阅读(1700)  评论(0编辑  收藏  举报