css 盒子模型

277 阅读3分钟

css 盒子模型

  • 一般都是盒子模型,除了极个别不是,比如img,input

盒子模型的属性

  • width 内容的宽度
  • height 内容的高度
  • margin 盒子的外边距
  • padding 盒子的内边距
  • border 盒子的边框
  • background 盒子的背景

盒子模型又分为标准盒子模型以及IE盒子模型

盒子模型的结构是最外层是外边距margin,内一层是边框border,再内一层是内边距padding,然后最内层是内容content。

标准盒子模型

他的width以及height指的是盒子容器中内容的宽和高。

IE盒子模型

他的width和height指的是整个内容+内边距+边框的宽和高。

height,width属性

这两个属性只能用于块级元素,用于行内元素是无效的。(行内元素的宽度width是由内容的宽度决定的,高度height是由字体大小font-size决定的)

一个盒子模型的真实宽度=左右边框宽度(border)+左右内边距宽度(padding)+内容宽度(width)

真实高度同上

margin属性

表示盒子与盒子之间的距离

margin的复制问题

CSS 中规定盒子模型的margin属性可以不用指定四个值

  • 如果缺少左外边距的值,就使用右外边距的值。
  • 如果缺少下外边距的值,则使用上外边距的值。
  • 如果缺少右外边距的值,则使用上外边距的值。

在css中,设置外边距是按照上右下左的顺序设置的,四个值如果第四个值缺失,则会复制第二个值,如果第三个值缺失,则会复制第一个值;如果第二个值缺失,也会复制第一个值。

  • margin对块级元素是都生效的,但是对于行内元素来说,只有水平方向上有效(也就是左右外边距),对上下外边距是没有效果的
  • margin可以设置为负值

margin重叠(坍塌)问题

前提条件:块级元素,垂直方向

  • 兄弟元素之间的重叠:上面盒子的margin-bottom和下面盒子的margin-top重叠。也就是说,如果上面的盒子设置了margin-bottom为20px,下面的盒子设置了margin-top为40px,则两个盒子之间的距离并不是简单的相加60px,而是40px,即发生了重叠,距离大小等于margin值较大的那个。
 .top {
        height: 100px;
        width: 200px;
        border: 1px saddlebrown solid;
        margin-top: 20px;
        margin-bottom: 20px;
    }
    
 .bottom {
        height: 100px;
        width: 200px;
        border: 1px saddlebrown solid;
        margin-top: 40px;
    }

解决办法:

  1. 使块级标签变为行内块级标签(display: inline-block)。
  2. 使用浮动。
  • 父子元素之间的重叠:父元素的margin-top和父元素中的第一个子元素的margin-top会重叠。即父元素设置了margin-top为40px,第一个子元素也设置了margin-top为20px,则子元素距离最上面的元素的距离并不是60px,而是40px。
    .top {
        height: 100px;
        width: 200px;
        margin-top: 20px;
        margin-bottom: 20px;
    }
        
    .top > div {
        height: 10px;
        width: 150px;
        border: 1px springgreen solid;
        margin-top: 20px;
    }

解决办法:

  1. 给父元素设置border-top
  2. 给父元素设置padding-top
  3. 把块级元素设置为行内块级元素

padding属性

  • 和margin属性基本一致,也有复制问题。
  • 如果重复设置了一边的内边距,则会优先以具体的边距为准。
padding:10px;
padding-left:20px;  //以具体的边距设置为准