CSS-盒子模型

202 阅读2分钟

一、认识盒子模型

05-盒子模型.jpg

二、box-sizing

1. content-box

padding、border都布置在width、height外边,如W3C标准盒子模型

image.png

元素的实际宽度=border+padding+width 元素的实际高度=border+padding+height

2. border-box

padding、border都布置在width、height里边,如IE盒子模型(IE8以下浏览器)

image.png 元素的实际宽度=width 元素的实际高度=height

三、外边距margin的传递和折叠

1. 上下margin的传递

  • 如果块级元素的顶部线/底部线和父元素的顶部线/底部线重叠,那么这个块级元素的margin-top/margin-bottom会传递给父元素。
  • 如何防止出现传递问题?
    • 给父元素设置padding-top/padding-bottom
    • 给父元素设置border
    • 触发BFC:设置overflow为auto 注:margin一般用来设置兄弟元素之间的间距; padding一般用来设置父子元素之间的间距

2. 上下margin的折叠

  • 垂直方向上相邻的两个margin(margin-top、margin-bottom)有可能会合并为一个margin,这种现象叫做collapse
  • 水平方向上的margin永远不会collapse
  • 防止margin collapse:只设置其中一个元素的值

四、行内非替换元素的注意事项

1. 行内非替换元素

span/a/strong/i

2. 以下属性对行内非替换元素不起作用

width、height、margin-top、margin-bottom

3. 以下属性对行内级非替换元素的效果比较特殊

  • padding:上下会被撑起来,但是不占据空间
  • border:上下会被撑起来,但是不占据空间
  • margin:上下不生效

五、元素的水平居中问题

1. 行内级元素

text-align: center

2. 块级元素

margin: 0 auto;
margin的初始值都是0,但块级元素独占一行,浏览器在渲染时,若块级元素设置了固定的宽度,就会默认将该行剩余的宽度赋给margin-right。这个时候,给margin-left和margin-right都设置值为auto,浏览器就会自动将该行剩余的值左右平分分配给margin-left和margin-right,使得块级元素水平居中