前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CSS盒子模型

CSS盒子模型

作者头像
pitaojin
发布2018-05-25 16:48:07
1.3K0
发布2018-05-25 16:48:07
举报
文章被收录于专栏:前端萌媛的成长之路

前言

盒子模型(box model)是css中的一个重要概念,它是元素大小的呈现方式

every element in web design is a rectangular box

正文

下面介绍两种盒模型

W3C标准盒模型

IE怪异盒模型

两个盒模型的共同点

  1. 都是由四个部分组成:content padding border margin

两个盒模型的不同点:(width为content的宽度)

W3C标准盒模型:
  • 元素的宽度=width
  • 盒子总宽度=margin-left + border-left + padding-left + width + padding-right + border-right + margin-right
IE盒模型
  • 元素的宽度=width + padding + border
  • 盒子总宽度=margin-left + width + margin-right

解决以上两种盒模型冲突的办法

CSS3 box-sizing属性

box-sizing: content-box|border-box|inherit;

  • content-box(默认):盒子的宽度=width
  • border-box:盒子的宽度=width + padding + border
  • inherit:从父元素继承box-sizing属性的值
浏览器兼容:

Internet Explorer、Opera 以及 Chrome 支持 box-sizing 属性;Firefox 支持替代的 -moz-box-sizing 属性

所以,为了避免你的页面在不同浏览器下表现不同,最好设置:

html{ box-sizing:border-box; -moz-box-sizing: border-box; } *, *::before, *::after{ -moz-box-sizing: inherit; box-sizing: inherit; }

外边距合并问题

块级元素的上边距和下边距有时会合并或者折叠为一个外边距,大小取其中的最大者,浮动元素和绝对定位元素的外边距不会合并

会出现外边距合并的三种基本情况

1、相邻元素之间
2、父元素和它第一个或最后一个子元素之间

当父元素和它第一个子元素之间没有边框、内边距、行内内容或者清除浮动将两者的margin-top分开;同样的当父元素和最后一个子元素之间没有边框、内边距、行内内容、height、min-height/max-height将两者的margin-bottom分开,那么这时,两个外边距就会合并,子元素的外边距就会溢出到父元素外面(父元素的外边距为两者之和,子元素的外边距为0);

3、空的块级元素

当一个块级元素中不包含任何内容时,并且在其margin-top和margin-bottom之间没有边框、内边距、行内内容、height、min-height将两者分开,此时外边距会合并

margin合并的计算规则

  • 正正取大值:取大的那个值
  • 正负值相加:取计算后的值
  • 负负最负值:取绝对负值最大的值

margin合并的意义

兄弟元素的margin合并

使图文信息的排版更加舒服自然,保证元素上下间距一致

父子margin合并的意义

在页面中任何地方嵌套或直接放入任何空标签,都不会影响原来的块状布局

自身margin合并的意义

可以避免不小心遗落或者生成的空标签影响排版和布局

阻止以上margin合并的发生

1、阻止margin-top的合并(满足一个条件即可)

  • 父元素设置为块状格式化上下文元素(比如overflow:hidden)
  • 父元素设置border-top值
  • 父元素设置padding-top值
  • 父元素和第一个子元素之间添加内联元素进行分隔

2、阻止margin-bottom合并

  • 父元素设置为块状格式化上下文元素
  • 父元素设置border-bottom值
  • 父元素设置padding-bottom值
  • 父元素和最后一个子元素之间添加内联元素进行分隔
  • 父元素设置height、min-height或max-height

以上需要注意的地方

  • 以上情况的组合会产生更复杂的外边距合并
  • 即使某一外边距为0,这些规则仍然适用,所以就算父元素的外边距为0,还是会出现第二种情况
  • 如果参与合并的外边距中包含负值,合并后的外边距等于最大的外边距与最小的外边距之和
  • 如果所有参与合并的外边距都为负值,合并后的外边距等于最小的外边距的值
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.04.26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 正文
    • W3C标准盒模型
      • IE怪异盒模型
        • 两个盒模型的共同点
          • 两个盒模型的不同点:(width为content的宽度)
            • 解决以上两种盒模型冲突的办法
              • CSS3 box-sizing属性
              • 所以,为了避免你的页面在不同浏览器下表现不同,最好设置:
          • 外边距合并问题
            • 块级元素的上边距和下边距有时会合并或者折叠为一个外边距,大小取其中的最大者,浮动元素和绝对定位元素的外边距不会合并
              • 会出现外边距合并的三种基本情况
            • margin合并的计算规则
              • margin合并的意义
                • 兄弟元素的margin合并
                • 父子margin合并的意义
                • 自身margin合并的意义
              • 阻止以上margin合并的发生
                • 1、阻止margin-top的合并(满足一个条件即可)
                • 2、阻止margin-bottom合并
              • 以上需要注意的地方
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档