如何解决外边距margin叠加的问题探讨
网站建设 2023-01-28 20:48www.1681989.com免费网站
一、你要知道什么情况下会触发两个或多个毗邻的普通流中的块元素垂直方向上的 marg 会折叠
1.两个或多个
说明其数量必须是大于一个,又说明,折叠是元素与元素间相互的行为,不存在 A 和 B 折叠,B 没有和 A 折叠的现象。
2.毗邻
是指没有被非空内容、paddg、border 或 clear 分隔开,说明其位置关系。
注意一点,在没有被分隔开的情况下,一个元素的 marg- 会和它普通流中的第一个子元素(非浮动元素等)的 marg- 相邻; 只有在一个元素的 height 是 "auto" 的情况下,它的 marg-bottom 才会和它普通流中的一个子元素(非浮动元素等)的 marg-bottom 相邻。
3.垂直方向
是指具体的方位,只有垂直方向的 marg 才会折叠,也就是说,水平方向的 marg 不会发生折叠的现象。
二、那么如何使元素上下marg不折叠呢?
1.浮动元素、le-block 元素、绝对定位元素的 marg 不会和垂直方向上其他元素的 marg 折叠(注意这里指的是上下相邻的元素)
2.创建了块级格式化上下文的元素,不和它的子元素发生 marg 折叠(注意这里指的是创建了BFC的元素和它的子元素不会发生折叠)
我们都知道触发BFC的因素是float(除了none)、overflow(除了visible)、display(table-cell/table-caption/le-block)、position(除了static/relative)
很明显大家可以看出来相邻元素不发生折叠的因素是触发BFC因素的子集,也就是说如果我为上下相邻的元素设置了overflow:hidden,虽然触发了BFC,上下元素的上下marg还是会发生折叠
这个问题其实和BFC并没有太大的关系,希望大家不要滥用BFC,要知道BFC不是全能,创建BFC的初衷只是为了让元素本身(包括它的子元素)能够正确的计算自己的宽高。http://.yuiblog./blog/2010/05/19/css-101-block-formattg-contexts
不发生折叠的触发因素是浮动元素、le-block 元素、绝对定位元素,这个只是创建BFC因素的子集,但并不能说明创建了BFC的元素就不会发生折叠,因为BFC还可以用overflow:hidden来创建。相反如果父元素触发了BFC,那么他的块级子元素反而会发生折叠。
这里我写了一个DEMO来说明这个问题http://whycss./demo/collspan_demo.html 创建BFC的三种情况都提到了,结果是子元素的上下marg都会发生折叠 。
克军提到的一个zoom,这是IE浏览器最初支持的缩放属性,到现在只有最新的webkit核心的浏览器也支持。但只是在IE8以下的浏览器下才可成功触发hasLayout,对于非IE浏览器也是没有效果的,所以还是需要同样的去创建BFC。关于hasLayout与BFC的介绍可参见本人博客的文章http://.smallni./?p=174
关于最终如何解决这样的问题,我的建议是在写的时候尽量用同一方向的marg,比如都设置为或者bottom,因为你在实践的时候有时不需要为每个元素设置浮动、le-block或者absolute 。
1.两个或多个
说明其数量必须是大于一个,又说明,折叠是元素与元素间相互的行为,不存在 A 和 B 折叠,B 没有和 A 折叠的现象。
2.毗邻
是指没有被非空内容、paddg、border 或 clear 分隔开,说明其位置关系。
注意一点,在没有被分隔开的情况下,一个元素的 marg- 会和它普通流中的第一个子元素(非浮动元素等)的 marg- 相邻; 只有在一个元素的 height 是 "auto" 的情况下,它的 marg-bottom 才会和它普通流中的一个子元素(非浮动元素等)的 marg-bottom 相邻。
3.垂直方向
是指具体的方位,只有垂直方向的 marg 才会折叠,也就是说,水平方向的 marg 不会发生折叠的现象。
二、那么如何使元素上下marg不折叠呢?
1.浮动元素、le-block 元素、绝对定位元素的 marg 不会和垂直方向上其他元素的 marg 折叠(注意这里指的是上下相邻的元素)
2.创建了块级格式化上下文的元素,不和它的子元素发生 marg 折叠(注意这里指的是创建了BFC的元素和它的子元素不会发生折叠)
我们都知道触发BFC的因素是float(除了none)、overflow(除了visible)、display(table-cell/table-caption/le-block)、position(除了static/relative)
很明显大家可以看出来相邻元素不发生折叠的因素是触发BFC因素的子集,也就是说如果我为上下相邻的元素设置了overflow:hidden,虽然触发了BFC,上下元素的上下marg还是会发生折叠
这个问题其实和BFC并没有太大的关系,希望大家不要滥用BFC,要知道BFC不是全能,创建BFC的初衷只是为了让元素本身(包括它的子元素)能够正确的计算自己的宽高。http://.yuiblog./blog/2010/05/19/css-101-block-formattg-contexts
不发生折叠的触发因素是浮动元素、le-block 元素、绝对定位元素,这个只是创建BFC因素的子集,但并不能说明创建了BFC的元素就不会发生折叠,因为BFC还可以用overflow:hidden来创建。相反如果父元素触发了BFC,那么他的块级子元素反而会发生折叠。
这里我写了一个DEMO来说明这个问题http://whycss./demo/collspan_demo.html 创建BFC的三种情况都提到了,结果是子元素的上下marg都会发生折叠 。
克军提到的一个zoom,这是IE浏览器最初支持的缩放属性,到现在只有最新的webkit核心的浏览器也支持。但只是在IE8以下的浏览器下才可成功触发hasLayout,对于非IE浏览器也是没有效果的,所以还是需要同样的去创建BFC。关于hasLayout与BFC的介绍可参见本人博客的文章http://.smallni./?p=174
关于最终如何解决这样的问题,我的建议是在写的时候尽量用同一方向的marg,比如都设置为或者bottom,因为你在实践的时候有时不需要为每个元素设置浮动、le-block或者absolute 。
上一篇:提高网页加载速度的初步简单技巧方式
下一篇:行内元素、块元素都有哪些
网站设计
- 静宁会SEO的网站建设公司:全面提升您的网络影
- 提升在线业务的关键:选择最佳的丽水网站建设
- 浙江网站优化发展潜力如何
- 井研专业的网站建设公司:打造您的在线品牌
- 灵山SEO网站建设公司:提升您的在线业务表现
- 蒙城网站建设优化公司:提升您网站表现的理想
- 阳谷企业网站优化:提升线上业务力的关键
- 樟树专业的网站建设公司:打造您在线业务的坚
- 通河百度SEO排名的策略与技巧
- 重庆百度快照排名如何进行精准的客户引流
- 重庆百度快照排名
- 常宁便宜的建站公司:助您轻松打造在线业务
- 巫溪百度网站优化:提升网站曝光率与流量的关
- 湖北整站优化怎么做才能放大客户需求
- 闸北网站建设多少钱?全面解析与预算规划
- 辽宁企业网站优化怎么做电话营销