CSS:浮动定位和BFC


一、浮动元素

特征

浮动元素会脱离文档流,并按照指定的方向移动,直到其碰到父元素边框或另一个浮动元素的边缘。普通文档流会视浮动元素不存在一样,但文字和图片等内容可以感知浮动元素的存在,遇到浮动元素会避开。

  • 对于父容器
    若子元素都是浮动元素,相当于子元素不存在,父元素没有包含任何内容,因此会无法撑开父容器,父元素高度为0。
  • 对于其他浮动元素
    浮动元素会水平排列,如果包含块太窄无法容纳全部浮动元素,那么无法包含的浮动元素会向下移动,直到有足够的空间,而如果浮动元素的高度不同,那么向下移动的时候可能会被卡主。
  • 对于其他普通元素
    普通元素会占据浮动元素原来的空间,但会被浮动元素遮盖。
  • 对于文字
    文字会感知到浮动元素的存在,会环绕其周边。

二、清除浮动

清除浮动是指清除浮动元素带来的不利影响。

清除浮动的方法
  1. 在浮动元素的后面增加一个无内容的标签,添加clear属性。
  2. 因为BFC可以包含浮动元素,因此可以使父容器形成BFC:
  • float: left | right;
  • overflow: hidden | auto | scroll;
  • display: table-cell | table-caption | inline-block;
  • position: absolute | fixed
  1. 利用CSS添加一个空的内容,1类似
/*方法1*/
.clearfix{
  *zoom:1;
}
.clearfix:after{
  content:"";
  display:block;
  clear:left;
}
/*方法2*/
.clearfix{
*zoom:1;
}
.clearfix:after{
content:"";
  display:table;
  clear:both;
}

三、定位

  1. inherit
    从父元素继承。
  2. static
    默认值,元素出现在正常流中,参考点是文档流中正常的位置。
  3. relative
    相对定位。相对于元素本身正常的位置进行定位,通过top、bottom、left、right属性来设置偏移值,原有位置不被其他元素占据。
    使用场景:为绝对定位设置参照物或元素自身位置进行局部调整。
  4. absolute
    绝对定位。相对于除static定位外的第一个父元素进行定位,通过top、bottom、left、right属性来设置偏移值,不占空间。
    使用场景:因为是一父元素作为参照,可以比较方便地设置元素的位置,且不影响其他元素的布局。
  5. fixed
    固定定位。相对于viewport进行的定位,不为元素预留空间。
    使用场景:弹窗等。
  6. sticky
    粘性定位是相对定位和固定定位的混合。元素在跨越特定阈值前为相对定位,之后为固定定位。

四、z-index

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


五、position:relative和margin的偏移作用

  • position:relative 不会影响其他元素的布局,即使偏移了,页面还是会保留其原来的位置。
  • margin 自身偏移的情况下,还会影响后面其他普通流的元素。

六、 BFC(Block Formatting Context)

块格式化上下文是由以下之一创建的:

  • 根元素或其它包含它的元素
  • 浮动
  • 绝对定位的元素(元素具有position为absolute或fixed)
  • 内联块inline-blocks
  • 表格单元格(display:table-cell)
  • 表格标题(display:table-caption)
  • 块元素 元素具有overflow的值不是visible
  • 弹性盒子 flex boxes(display:flex | inline-flex)
  • display:flow-root

块格式化上下文对定位和清除浮动很重要。可以理解BFC为一个模块,两个不同模块是相对独立互不影响的:

  • 同一个模块内,两个相邻元素或嵌套元素的垂直margin重叠;
  • 可以包含浮动,因此浮动不会影响其他模块中元素的布局;
  • 清除浮动只能清除同一模块中,在它前面的元素的浮动。
例子:通过{display:inline-block}包裹浮动元素
  <div class="one">
    <div class="two">2</div>
  </div>
.one{
  display: inline-block;
  border: 5px solid black;
}
.two{
  width:400px;
  height:400px;
  background:red;
  float: left;
}

七、外边距合并

  1. 在什么场景下会出现外边距合并?
    在同一BFC里,垂直相邻的两个元素或嵌套关系的父子元素会发生外边距合并。
  2. 如何合并?
  • 外边距为正值时,并不是将两个边距相加,而是只保留较大一个。
  • 遇到外边距为负数时,会进行相加。
  1. 如何不让相邻元素外边距合并?
  • 将其分别放置在不同的BFC中。
  • 设置padding或border,保证外边距不接触。
  1. 父子外边距实例
    注意,red的左右margin在yellow里显示,而red的上下margin与yellow的合并,然后两者合并后的margin又和blue的margin合并。
  <div class="blue"></div>
  <div class="yellow">
    <div class="red"></div>
  </div>
.blue{
  width: 400px;
  height: 200px;
  background: blue;
  margin: 20px
}
.yellow{
  background: yellow;
  margin:20px;
}
.red{
  width: 400px;
  height: 400px;
  background: red;
  margin: 20px;
}
Screenshot.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 一,浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 浮动模型是一种可视化格式模型,浮动...
    DeeJay_Y阅读 849评论 0 4
  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,703评论 1 92
  • 1. 浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 浮动元素会脱离文档流,不占据原来...
    饥人谷_Jack阅读 632评论 0 1
  • relative:生成相对定位的元素,通过top,bottom,left,right的位置相对于其正常位置进行定位...
    zx9426阅读 927评论 0 2
  • 1.浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 何谓浮动元素?有什么特征?所谓浮动...
    草鞋弟阅读 806评论 0 1