margin特性深入分析与总结

今天写了个小demo,总体不难,但一些细节需要注意:

1)如下图所示,蓝色区域为白色box的padding,橙色区域为每条数据项的margin-bottom,那么如何解决最后一条记录margin-bottom占位的问题?

2)如下图所示,设置外层box border为1px,设置每一行的border-bottom为1px,那么如何解决最后一行border-bottom与box border-bottom紧贴,显示2px border的问题?

为解决上面的问题,需要理解margin自身的一些特性,下面对margin进行总结,以便以后回顾与查找。

块级元素外边距

(1)两个【上下相邻】且【不浮动】的块级元素间,两元素间的垂直外边距(margin)为相邻外边距中的较大者(合并)。

margin:20px

margin:30px

如:橙色元素margin-bottom为20px,灰色元素margin-top为30px,则两元素之间的垂直外间距为较大者30px

(2)两个【相邻】且【浮动】的块级元素间,两元素间的外边距(margin)为相邻外边距之和(不合并)。

margin:20px

margin:20px

如:橙色元素margin-right为20px,灰色元素margin-left为20px,则两元素之间的外间距相邻边距之和40px

行内元素外边距

(1)行内元素不占上下外边距。

margin:0px margin:30px

如:橙色元素margin为0px,灰色元素margin为30px,但两元素水平显示,上下左右边距并未发挥作用

(2)行内元素左右外边距不会合并。

margin:20px margin:30px

如:橙色元素margin为20px,灰色元素margin为30px,两元素间的外边距约为相邻外边距之和50px(不合并),事实上即使两行内元素间没有水平边距也不会完全紧贴

负margin

  • margin参考线:即margin移动的基准线,此基准线相对于box是静止的,而margin的数值,就是box相对于参考线的位移量
  • 1、top、left参考线:

    设置了margin的元素:

    (1)以父级元素content的上(左)边为参考线,自身向下(右)移动

    (2)以相邻元素margin的下(右)边为参考线,自身向下(右)移动

  • 2、bottom、right参考线:

    设置了margin的元素:

    (1)以元素本身border的下(右)边为参考线,与其相邻的元素向下(右)移动

  • 以上的位移方向为margin数值为正值时的情况,如果margin是负值,则位移方向相反
  • 更多负margin使用案例,推荐阅读:负值之美:负margin在页面布局中的应用

Container1

margin:-10px 20px -20px 40px

margin:0

如:Container1中,两个元素为【不浮动】的块级元素。
※修改橙色元素的margin-top,会影响橙色元素相对于Container1向上或向下移动;
※修改橙色元素的margin-bottom,会影响黄色元素相对于橙色元素向上或向下移动
同时注意:DOM结构中后面的元素会叠加在前面元素的上面

Container2

margin:-10px -20px -20px 40px

margin:0

如:Container2中,两个元素为【浮动】的块级元素。
※修改橙色元素的margin-left,会影响橙色元素相对于Container2向左或向右移动;
※修改橙色元素的margin-right,会影响黄色元素相对于橙色元素向左或向右移动

百分比margin

  • 元素margin为百分比时,会根据其父元素的【宽或高】来计算margin的四个具体值
  • 1、横向显示(默认):基于父元素的【宽度】的百分比计算外边距
  • 2、纵向显示:基于父元素的【高度】的百分比计算外边距(测试writing-mode这玩意只有IE能使,IE5就有,并且到IE11还坚挺的支持着)

Demo1:父元素横向显示

margin: 10% 5%

如:Demo1中:
margin-left、margin-right=$Demo1.width()*5% = 25px;
margin-top、margin-bottom= $Demo1.width()*10% = 50px

Demo2:父元素纵向显示(切换为IE测试)

margin: 10% 5%

如:Demo2中:
margin-left、margin-right=$Demo1.height()*5% = 10px;
margin-top、margin-bottom= $Demo1.height()*10% = 20px

最后附上demo源码,一些细节有待改进:http://runjs.cn/code/dn7ibwnt

时间: 2024-08-30 03:07:59

margin特性深入分析与总结的相关文章

利用负margin实现元素居中

原理就是对当前元素的position设置为absolute并且相对于父元素定位,先设置left:50%;top:50%使当前元素的左上角处于父元素的中心位置,之后再应用负margin特性使其中心位于父元素的中心. 负margin特性:负的margin-top,margin-left将当前元素往上/左拉,覆盖其他元素; 负的margin-bottom,margin-right将当前元素的后续元素往上/左拉,覆盖当前元素; 例如: <!DOCTYPE html> <htm> <h

BFC

BFC:块级格式化上下文,它是指一个独立的块级渲染区域,只有Block-level BOX参与,该区域拥有一套渲染规则来约束块级盒子的布局,且与区域外部无关. BFC的生成 既然上文提到BFC是一块渲染区域,那这块渲染区域到底在哪,它又是有多大,这些由生成BFC的元素决定,CSS2.1中规定满足下列CSS声明之一的元素便会生成BFC. 根元素 float的值不为none overflow的值不为visible display的值为inline-block.table-cell.table-cap

复习的第一天

关于Block Formatting Context--BFC和IE的hasLayout BFC(Block Formatting Context)直译为“块级格式化范围”. 在普通流中的 Box(框) 属于一种 formatting context(格式化上下文) ,类型可以是 block ,或者是 inline ,但不能同时属于这两者.并且, Block boxes(块框) 在 block formatting context(块格式化上下文) 里格式化, Inline boxes(块内框)

css3-BFC

BFC——Block Formatting Context (块格式化上下文) 格式化则表明了在这个环境中,元素处于此环境中应当被初始化,即元素在此环境中应当如何布局等.元素如果创建了BFC,那么BFC决定了如何对其内容进行定位,以及它与其他元素的关系和相互作用.创建了BFC的素会按照如下的方式对其子元素进行排列: 1:元素的子元素会一个接一个地放置.垂直方向上他们的起点是一个包含块的顶部,两个相邻的元素之间的垂直距离取决于'margin' 特性.在BFC中相邻的块级元素的垂直边距会折叠(col

bfc+css

CSS BFC的定义 是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用.在创建了 Block Formatting Context 的元素中,其子元素会一个接一个地放置.垂直方向上他们的起点是一个包含块的顶部,两个相邻的元素之间的垂直距离取决于 ‘margin’ 特性.在 Block Formatting Context 中相邻的块级元素的垂直边距会折叠(collapse). 当涉及到可视化布局的时候,Block Formatting

【转】关于Block Formatting Context--BFC和IE的hasLayout

转自穆乙 http://www.cnblogs.com/pigtail/ 一.BFC是什么? BFC(Block Formatting Context)直译为“块级格式化范围”. 是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用.当涉及到可视化布局的时候,Block Formatting Context提供了一个环境,HTML元素在这个环境中按照一定规则进行布局.一个环境中的元素不会影响到其它环境中的布局.比如浮动元素会形成BFC,浮

关于BFC以及IFC

BFC就是用来格式化块级盒子,同样管理inline类型的盒子还有IFC,以及其他的FC. 1. 首先我们要知道什么是FC Formatting context 是 W3C CSS2.1 规范中的一个概念.它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用.最常见的 Formatting context 有 Block fomatting context (简称BFC)和 Inline formatting context (简称IFC). C

关于Block Formatting Context--BFC和IE的hasLayout

本文--- 出处:穆乙 http://www.cnblogs.com/pigtail/ 一.BFC是什么? BFC(Block Formatting Context)直译为“块级格式化范围”. 是 W3C CSS 2.1 规范中的一个概念,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用.当涉及到可视化布局的时候,Block Formatting Context提供了一个环境,HTML元素在这个环境中按照一定规则进行布局.一个环境中的元素不会影响到其它环境中的布局.比如浮动元素会

复习_笔记

  a:什么是语义化?     语义化标签就是尽量使用有相对应的结构的含义的Html的标签     简单的来说就是机器可以理解的标签,eg:<p>标签计算机会将他理解成段落     作用:         1.结构更好,更利于搜索引擎的抓取(SEO的优化)和开发人员的维护(可维护性更高,因为结构清晰,so易于阅读).         2.更有利于特殊终端的阅读(手机,个人助理等). b:DOCTYPE模式?     DOCTYPE是document type(文档类型)的简写,用来说明你用的X