美文网首页
CSS:浮动定位和BFC

CSS:浮动定位和BFC

作者: jiangzj | 来源:发表于2017-02-08 23:54 被阅读0次

一、浮动元素

特征

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

  • 对于父容器
    若子元素都是浮动元素,相当于子元素不存在,父元素没有包含任何内容,因此会无法撑开父容器,父元素高度为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

相关文章

  • CSS BFC和CSS hack

    简述CSS BFC和CSS hack BFC BFC定义:浮动元素和绝对定位元素,非块级盒子的块级容器(例如inl...

  • CSS:浮动定位和BFC

    一、浮动元素 特征 浮动元素会脱离文档流,并按照指定的方向移动,直到其碰到父元素边框或另一个浮动元素的边缘。普通文...

  • css定位

    CSS 定位 (Positioning) 属性允许你对元素进行定位。 CSS 定位和浮动 CSS 为定位和浮动提供...

  • CSS 定位

    CSS 定位 (Positioning) 属性允许你对元素进行定位。 CSS 定位和浮动 CSS 为定位和浮动提供...

  • CSS 定位 (Positioning)

    CSS 定位 (Positioning) 属性允许你对元素进行定位。 CSS 定位和浮动 CSS 为定位和浮动提供...

  • 讲不清楚的 BFC

    BFC 没有定义,只有功能和特性,所以讲不清楚 CSS规范中对 BFC 的描述 浮动,绝对定位元素,非块盒的块容器...

  • CSS定位

    CSS定位(Positioning)允许你对元素进行定位。 CSS 定位和浮动 CSS 为定位和浮动提供了一些属性...

  • css浮动、BFC、定位问题

    1.浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 何谓浮动元素?有什么特征?所谓浮动...

  • CSS浮动定位和BFC简单讲解

    1. 浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 浮动元素会脱离文档流,不占据原来...

  • 关于 BFC 的布局应用:清除浮动、文字环绕

    关于 BFC 的布局应用:清除浮动、文字环绕 参考文档:理解CSS中BFC BFC(Block Formattin...

网友评论

      本文标题:CSS:浮动定位和BFC

      本文链接:https://www.haomeiwen.com/subject/zrxbittx.html