盒子模型

220 阅读5分钟

盒子模型:标签是矩形的,这个矩形的标签就是一个盒子,也就是说一张网页就是由一个个的盒子堆起来的。 盒子的几个属性:

width:盒子内容的宽度

height:盒子内容的高度

padding:盒子的内边距,盒子内容与盒子边框之间的距离

border:盒子的边框

margin:盒子的外边距,盒子与盒子之间的距离

background:盒子背景,背景默认情况下会填充内容和padding

注:对于padding、border、margin、background来说,都分四个方向。

在具体说明盒子模型之前,我们应当对标签的分类有基本的了解。标签分为块级标签、行级标签和行内块。 下面主要以块级标签div为例。

1、width、height:盒子内容的宽度和高度,width和height可以设置百分比,是父元素的百分比。

<body><div></div></body>
<style>
    *{
        padding: 0px;
        margin: 0px;
    }
    div{
        width: 100px;
        height:100px;
        background:palegoldenrod;
    }
</style>
给这个盒子设置了宽度、高度均为100px的数值,为了方便看盒子的大小,同时给它设置了背景颜色。

2、padding:盒子的内边距

<style>
    *{
        padding: 0px;
        margin: 0px;
    }
    div{
        width: 100px;
        height:100px;
        background:palegoldenrod;
        padding:10px;
    }
</style>

paddig:10px 代表给这个盒子的上下左右都设置了10px的内边距

从上图中看出padding在页面中是占空间的,同时需要注意的是padding可以设置
1个值、2个值、3个值、4个值。
padidng:10px;代表这个盒子的上下左右的内边距均为10px
padding:10px 20px;代表这个盒子的上下内边距是10px,左右内边距是20px
padding:10px 20px 30px;代表这个盒子的上内边距是10px,左右内边距是20px,下内边距是30px
padidng:10px 20px 10px 15px;代表这个盒子的padding-top为10px,padding-right为20px,
padding-bottom为10px,padding-left为15px,即顺序为上右下左。

3、border:盒子的边框

 <style>
    *{
        padding: 0px;
        margin: 0px;
    }
    div{
        width: 100px;
        height:100px;
        border: 1px solid palegreen;
    }
</style>

用border属性给这个盒子设置了粗为1px的实线绿色边框

从上图中我们可以了解到盒子的边框也是占空间的,并且也是分四个方向。
border:1px;代表这个盒子的上下左右的边框均为1px
border:1px 2px 1px 1px;代表这个盒子的border-top为1px,border-right为2px,
border-bottom为1px,border-left为1px,即顺序为上右下左。
border中可以设置的属性:border-width   border-style   border-color
border就是这三个属性的复合属性,
也可以单独设置某个方向的border-width、border-style、border-color 
  比如:border-top-width:xxx 

4、margin:盒子的外边距

盒子的上下左右都有外边距,也可以给盒子设置1个值、2个值、3个值、4个值,
同上面所说的padding。

5、background:盒子背景

几个属性: 
    background-color
    background-image:
     1,默认水平和垂直方向都会平铺
     2,如果空间不足,图片也会显示,只是显示不完整
     3,url后面的路径引号可加可不加
     4,背景图片默认会填充border,padding,content
    background-repeat:
    background-position:
        背景图片的位置,背景图片在元素内出现的位置,默认为(0,0)左
        上角。设置该属性的值有三种方式:
        1)英文单词:left、right、top、bottom和center。
        用法如:
            “left top”(默认),设置背景图在元素内的“左上方”;
            “right bottom”,设置背景图在元素内的“右下方”;
            “center center”,设置背景图在元素的“中心”。
        2)百分比:
        用法如:
            “0% 50%”,设置背景图在元素内“水平方向”的“左方”,垂直方向的“中心”;
            “50% 50%”,,设置背景图在元素内的“中心”;
            “100% 100%”,,设置背景图在元素内的“右下方”。
        3)数值单位px、em等
    background-attactment:
        通过将该属性的值设置为“fixed”后,页面出现滚动条后就算页面滚动,背景图也会固定
        在原来的位置不会跟随页面滚动。它的默认值是“scroll”,是当页面滚动的时候,背景
        图也跟随页面同步滚动。

对于盒子模型的注意点:

1、对于行级标签来说,width和height设置无效
2、行级标签它的宽度由内容决定,高度由font-size决定 
3、width属性默认值为auto,块元素的贪婪性和行内元素的懒惰性。
   所谓的块元素的贪婪性就是,在不设置块的宽度,也就是默认width为auto时,它的宽度为父
   元素的宽度。下面我们来验证一下:
    <style>
    *{
        padding: 0px;
        margin: 0px;
    }
    div{
       
        height:100px;
        background-color: palevioletred;
    }
</style>

而行内元素的懒惰性指的是他的宽度由内容的宽度决定。以行内元素span为例子进行验证:
    <style>
        *{
            padding: 0px;
            margin: 0px;
        }
        span{
            background: palevioletred;
        }
    </style>

4、对于行内元素而言,其宽度由内容本身决定,而其高度则有font-size决定。
5、有些标签有默认的padding值,如ul、ol等。*{padding:0}
6、margin对于男标签在四个方向上都有作用,对于女标签,只在水平方向上有效,在垂直方向上
无效
7、margin重叠(塌陷)问题:塌陷问题的前提是块级标签,而且是垂直方向上的塌陷。
    兄弟元素之间的重叠:上面盒子的下margin和下面盒子的上margin重叠,中间的margin大小是取大优先
            解决重叠:  
                方法1:给块级元素变成行内块的
                方法2:浮动(浮动元素是不会塌陷的)
    父子元素之间的重叠:父元素设置margin-top和父中第一个子元素设置的margin-top会重叠
            解决重叠:
                方法1:给父元素设置border-top   不想要边框,使用transparent
                方法2:给父元素设置padding-top 
                方法3:给块级元素变成行内块的