专栏名称: python实战
Python实战
目录
相关文章推荐
Python爱好者社区  ·  刚刚,DeepSeek放出重磅论文!梁文锋亲 ... ·  昨天  
Python爱好者社区  ·  吴恩达,yyds ·  昨天  
Python开发者  ·  微信 + DeepSeek = 王炸组合 ·  3 天前  
Python爱好者社区  ·  刚刚!微信 DeepSeek ... ·  3 天前  
Python爱好者社区  ·  模仿一下领导说话的样子 ·  2 天前  
51好读  ›  专栏  ›  python实战

python之边距折叠

python实战  · 公众号  · Python  · 2016-12-17 18:55

正文

Html 经常出现的一个外边距折叠,可能有人的不太理解,或者说不知道怎么解决、我们来着重来看下:

当两个 div 盒子模型连续出现的时候并且同时应用了一个 margin 外边距,会出现边距重叠的现象:

.Div {width:150px;   # 定义公共的盒子样式

Height:150px;

Margin:20px; # 给四边都添加上了 20px 的边距

}

.top{background:red; # 定义第一个盒子为红色 }

.bottom{background:blue; # 定义下面的盒子为蓝色 }

然后这时就出现了边距折叠(合并),按理的话应该两个盒子垂直相距是 40px ,然而这会出现上下两个盒子,中间相隔的边距谁的边距大就会被应用、 ( 两个正值取最大,负值取最大负值,一正一负相加 )

为什么会重叠:在早期只有文字 图像 没有什么布局,而且边距会很稀疏 所以出现了 margin 重叠,他并不是一个 bug 而且为了更好的 排版 ,可以通过 overflow hidden ; 让它变为 非块状格式化上下文 BFC Block Formatting context

W3C 中讲到 BFC 的特性:

什么是 BFC

mozilla 上看到:是 页面 CSS 视觉渲染(visual CSS rendering)这个过程中的一个概念。它是决定块盒子的 布局及浮动 元素相互影响的一个因素。 可以理解为要被渲染前的一个区域,它这个区域有自己的特性、

display 属性 决定了这个 box 会不会单独渲染,:

block-level box:display 属性为 block, list-item 会被仍在 BFC 单独渲染

inline-level box:display 属性为 inline, inline-block, inline-table 会被仍在 BFC 单独渲染

BFC 特性:

1. 从顶部开始 ,一个接一个地放置。

2. Box 垂直方向的距离由 margin 决定。属于同一个 BFC 的两个相邻 Box margin 会发生重叠

3. 每个元素的 margin box 的左边, 与包含块 border box 的左边相接触 ( 对于从左往右的格式化,否则相反 ) 。即使存在浮动也是如此。

4. BFC 的区域不会与 float box 重叠。

5. BFC 就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素 ,外面也不会影响到里面

6. 计算 BFC 的高度时,浮动元素也参与计算

当我们知道为什么要折叠边距,以及特性之后我们就可以开始实战了。

如图: div 中装了 hr 一个块级元素,但是 hr 边距没有顶着 div

.hr{width:50px;

height:90px;

background:pink;

}







请到「今天看啥」查看全文


推荐文章
Python爱好者社区  ·  吴恩达,yyds
昨天
Python开发者  ·  微信 + DeepSeek = 王炸组合
3 天前
Python爱好者社区  ·  模仿一下领导说话的样子
2 天前
虎嗅APP  ·  头条 | 逃回北上广
8 年前
热辣动态图  ·  车毁人亡!这才是开车最吓人的路!
7 年前