BFC-float-position

浮动定位 BFC 边距合并

浮动元素

div的顺序是HTML代码中div的顺序决定的。

浮动可以理解为让某个div元素脱离标准流,漂浮在标准流之上,和标准流不是一个层次。使元素脱离文档流,按照指定方向发生移动,遇到父级边界或者相邻的浮动元素停了下来。

假如某个div元素A是浮动的,如果A元素上一个元素也是浮动的,那么A元素会跟随在上一个元素的后边
(如果一行放不下这两个元素,那么A元素会被挤到下一行);如果A元素上一个元素是标准流中的元素,那么A的相对垂直位置不会改变,也就是说A的顶部总是和上一个元素的底部对齐。

对父元素的影响

对于父元素来说,元素浮动之后脱离当前的文档流,所以无法撑开父元素,造成父元素的塌陷。

对其兄弟元素(非浮动)的影响:

如果兄弟元素为块级元素,元素会占据它的位置,元素会处在浮动元素的下层(无法通过z-index属性改变他们的层叠位置),但它的内部文字和其他行内元素都会环绕浮动元素。

对文字的影响

如果兄弟元素为内联元素,则元素会环绕浮动元素排列。

对其兄弟元素(浮动)的影响

同一个方向的浮动元素:

当一个浮动元素在浮动过程中碰到同一个方向的浮动元素时,它会紧跟在它们后面。

反方向的浮动元素:

互不影响,位于同一条水平线上,当空间不够时会被挤下。

float对自身元素的影响

float对象将被视作块对象(block-level),即display属性等于block。

对子元素的影响

浮动元素, 其高度或宽度取浮动子元素和非浮动子元素高度或宽度的最大值。

对父元素非浮动兄弟元素的影响

父元素之外的非浮动元素将会无视该浮动元素, 他们只会相对父元素按照正常文档流去排列。

对父元素浮动兄弟元素的影响

父元素之外的浮动兄弟元素, 会挨着该浮动元素。

清除浮动

清除浮动:

清除对应的单词是 clear,对应CSS中的属性是 clear:left | right | both | none。

元素浮动之前,也就是在标准流中,是竖向排列的,而浮动之后可以理解为横向排列。

浮动会影响后面的元素,清除浮动可以理解为打破横向排列。

如何清除浮动:

1.在浮动元素后添加一个空元素,div class="clear",然后在css中添加.clear{clear:both}即可。

2.利用浮动元素的容器的::after伪元素来清楚浮动,由于::after伪元素只对块级元素有用,因此要设置display:block,通过::after伪元素在浮动结束之后,向其中添加看不见的空格“\20”或者是点'.',可以使用 content:""。IE6,IE7不支持after伪元素,因此要添加.clearfix{zoom:1}。

3.直接给浮动元素的下一个元素添加一个clear:both;这个元素和浮动元素是在一层container中,如果在浮动元素的下一层的话,用::after伪元素。

4.给浮动元素的容器添加overflow:hidden;(overflow:auto)。 在使用float之后,元素会飘上去,但是使用overflow:hidden;之后,浮动元素又回到了容器中,把容器高度撑起,达到了清理浮动的作用。

定位方式

position的属性值共有四个static、relative、absolute、fixed。

static
指定元素使用正常的布局行为,即元素在文档流中当前的布局位置。此时 top, right, bottom, left 和 z-index 属性无效。

relative
元素先放置在未添加定位时的位置,再在不改变页面布局的前提下调整元素位置(因此会在此元素未添加定位时所在位置留下空白)。position:relative 未定义对 table-*-group, table-row, table-column, table-cell, table-caption 元素应用的效果。

相对定位就是将元素偏离元素的默认位置,但普通流中依然保持着原有的默认位置,并没有脱离普通流,只是视觉上发生的偏移。

absolute
不为元素预留空间,通过指定元素相对于最近的非 static 定位祖先元素的偏移,来确定元素位置。绝对定位的元素可以设置外边距(margin),且不会与其他边距合并。

应用了position: absolute的元素会循着节点树中的父(祖)元素来确定“根”,然后相对这个“根”元素来偏移。如果在其节点树中所有父(祖)元素都没有设置position属性值为relative或者absolute则该元素最终将对body进行位置偏移。应用了position: absolute的元素会脱离页面中的普通流并改变display属性。

fixed
不为元素预留空间,而是通过指定元素相对于屏幕视口(viewport)的位置来指定元素位置。元素的位置在屏幕滚动时不会改变。打印时,元素会出现在的每页的固定位置。fixed 属性会创建新的栈上下文。当元素祖先的 transform 属性非 none 时,容器由视口改为该祖先。

一个固定定位(position属性的值为fixed)元素会相对于视窗来定位,这意味着即便页面滚动,它还是会停留在相同的位置。和 relative 一样, top 、 right 、 bottom 和 left 属性都可用。

MDN

CSS布局

z-index

z-index 属性指定了一个元素及其子元素的 z-order。 当元素之间重叠的时候,z-order 决定哪一个元素覆盖在其余元素的上方显示。 通常来说 z-index 较大的元素会覆盖较小的一个。

对于一个已经定位的元素(即position属性值是非static的元素),z-index 属性指定:

元素在当前堆叠上下文中的堆叠层级。

元素是否创建一个新的本地堆叠上下文。

背景和边框 —— 形成层叠上下文的元素的背景和边框。 层叠上下文中的最低等级。

负z-index值 —— 层叠上下文内有着负z-index值的子元素。

块级盒 —— 文档流中非行内非定位子元素。

浮动盒 —— 非定位浮动元素。

行内盒 —— 文档流中行内级别非定位子元素。

z-index: 0 —— 定位元素。 这些元素形成了新的层叠上下文。

正z-index值 —— 定位元素。 层叠上下文中的最高等级。

z-index不为auto,opacity小于1的元素会构建堆叠上下文。

堆叠上下文可以嵌入其他堆叠上下文。

每个堆叠上下文和它的同级上下文是独立的。

每个堆叠上下文是自包含的。

MDN

margin 负值与 position:relative

当margin-bottom、margin-right设为负值的时候,元素本身没有位置变化,后面的元素会下移、右移。

position:relative的元素设置top、left后元素还占据原来位置,相对的是它原本在文档流中的位置而进行的偏移。

设置了这个属性后,元素会根据top,left,bottom,right进行偏移,关键点是它原本的空间仍然保留。

占据的文档空间不会随 top / right / left / bottom 等属性的偏移而发生变动。

BFC

BFC,块级格式化上下文,是一个独立的渲染区域,只有block-level-box级别参与,规定了内部如何布局并且和外部毫不相干。

如何触发 BFC

根元素;float属性不为none;position为absolute或fixed;
display为inline-block, table-cell, table-caption, flex, inline-flex
overflow不为visible。

BFC 作用

阻止外边距折叠

当两个块级元素相邻并且在同一个块级格式化上下文时,它们垂直方向之间的外边距会叠加。也就是说,即便两个块级元素相邻,但当它们不在同一个块级格式化上下文时它们的边距也不会折叠。产生新的 BFC 就可以阻止外边距折叠 。

BFC-1

BFC 可以包含浮动的元素

用 overflow: hidden 或 overflow: auto 触发浮动元素的父元素的 BFC 特性,从而可以包含浮动元素,闭合浮动。

BFC 会根据子元素的情况自动适应高度,即使其子元素中包括浮动元素。

BFC-2

BFC 可以阻止元素被浮动元素覆盖

使用 overflow: hidden 触发了 BFC ,它并不会被它的兄弟浮动元素覆盖,而是处于它的旁边。假设浮动元素宽度和它的非浮动兄弟元素宽度都没有超过父元素宽度,但两个元素的宽度加起来超出了父元素宽度的时候,非浮动元素会下降到下一行,即处于浮动元素下方。

BFC-3

外边距合并

块的顶部外边距和底部外边距有时被组合(折叠)为单个外边距,其大小是组合到其中的最大外边距,这种行为称为外边距塌陷(margin collapsing)。

外边距合并是CSS中一个特殊的概念。当两个外边距相邻时,它们会合并为较大的那一个。 无论是相邻元素的上下边距,还是父子元素的上边距,甚至是同一元素的上下边距。

发生外边距塌陷的三种基本情况:

相邻的兄弟姐妹元素

不是 ”上面段落的下边距“ 与 ”下面段落的上边距“ 的求和 ,而是两者中的较大者。

块级父元素与其第一个/最后一个子元素

如果块级父元素中,不存在上边框、上内补、inline content、 清除浮动 这四条属性(对于上边框和上内补,也可以说,当上边距及上内补宽度为0时),那么这个块级元素和其第一个子元素的上边距就可以说”挨到了一起“。此时这个块级父元素和其第一个子元素就会发生 上外边距合并 现象,换句话说,此时这个父元素对外展现出来的外边距将直接变成这个父元素和其第一个子元素的margin-top的较大者。

空块元素

如果存在一个空的块级元素,其 border、padding、inline content、height、min-height 都不存在。那么此时它的上下边距中间将没有任何阻隔,此时它的上下外边距将会合并。

MDN

拒绝外边距合并

给父级元素添加 border-top 或 padding-top。

父元素的第一个子元素的上边距margin-top如果碰不到有效的border或者padding就会不断一层一层的找自己的祖先元素。只要给祖先元素设置个有效的 border 或者 padding 就好了。

BFC-4

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,924评论 4 360
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,902评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 107,716评论 0 239
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,783评论 0 203
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,166评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,510评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,784评论 2 311
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,476评论 0 196
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,196评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,459评论 2 243
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,978评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,321评论 2 252
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,964评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,046评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,803评论 0 193
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,530评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,420评论 2 265

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,628评论 1 92
  • 一,浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 浮动模型是一种可视化格式模型,浮动...
    DeeJay_Y阅读 808评论 0 4
  • relative:生成相对定位的元素,通过top,bottom,left,right的位置相对于其正常位置进行定位...
    zx9426阅读 911评论 0 2
  • 1.浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 浮动模型也是一种可视化格式模型,浮...
    zhaonu阅读 364评论 0 0
  • 1. 浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 特征:浮动元素不在普通的文档流中...
    在乎者也阅读 1,093评论 0 1