浮动定位BFC边距合并

2017-06-13  本文已影响0人  QQQQQCY

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

  1. 任何定义为float的元素,都可以设置宽高,并且不会自动换行,有点类似于inline-block(但是从开发者工具中查看,属性变为了为 display: block;)
  2. 浮动元素会从普通文档流中脱出,从正常的排列顺序被抽离
  3. 设置浮动方向后,元素往左或往右移动直到碰到另一个浮动元素或父元素内容区的边界

2. 清除浮动指什么? 如何清除浮动? 两种以上方法

  .clearfix{
      *zoom:1;
  }
  .clearfix:after{
      content:"";
      display:block;
      clear:left;
  }

3. 有几种定位方式,分别是如何实现定位的,参考点是什么,使用场景是什么?

CSS有三种基本的定位机制:普通流,相对定位和绝对定位

4. z-index 有什么作用? 如何使用?

z-index属性指定2个方面的内容:

  1. 元素的堆叠级别。
  2. 元素的堆叠上下文。

z-index属性只能够应用在display属性为relative、absolute或fixed的元素上。

z-index属性有3个可能的取值:

|取值| 描述|
|-||
|auto |设置堆叠的级别为0,并且不建立新的堆叠上下文|
|<integer> |设置一个整数堆叠级别,并且建立一个新的堆叠上下文|
|inherit| 设置和父元素相同的堆叠级别,不建立新的堆叠上下文|

5. position:relative和负margin都可以使元素位置发生偏移?二者有什么区别

6. BFC 是什么?如何生成 BFC?BFC 有什么作用?举例说明

BFC(Box Fomatting Context)
Box:
Box 是 CSS 布局的对象和基本单位, 直观点来说,就是一个页面是由很多个 Box 组成的。元素的类型和 display 属性,决定了这个 Box 的类型。 不同类型的 Box, 会参与不同的 Formatting Context(一个决定如何渲染文档的容器),因此Box内的元素会以不同的方式渲染。
block-level box:display 属性为 block, list-item, table 的元素,会生成 block-level box。并且参与 block fomatting context;
inline-level box:display 属性为 inline, inline-block, inline-table 的元素,会生成 inline-level box。并且参与 inline formatting context;
Formatting context:
Formatting context 是 W3C CSS2.1 规范中的一个概念。它是页面中的一块渲染区域,并且有一套渲染规则,它决定了其子元素将如何定位,以及和其他元素的关系和相互作用。最常见的 Formatting context 有 Block fomatting context (简称BFC)和 Inline formatting context (简称IFC)。
CSS2.1 中只有 BFC 和 IFC, CSS3中还增加了 GFC 和 FFC。
BFC 定义:
BFC(Block formatting context)直译为"块级格式化上下文"。它是一个独立的渲染区域,只有Block-level box参与, 它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干。
BFC布局规则:
内部的Box会在垂直方向,一个接一个地放置。
Box垂直方向的距离由margin决定。属于同一个BFC的两个相邻Box的margin会发生重叠
每个元素的margin box的左边, 与包含块border box的左边相接触(对于从左往右的格式化,否则相反)。即使存在浮动也是如此。
BFC的区域不会与float box重叠。
BFC就是页面上的一个隔离的独立容器,容器里面的子元素不会影响到外面的元素。反之也如此。
计算BFC的高度时,浮动元素也参与计算

7. 在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例

父子元素

父子元素如果都有上边距,会合并为其中较大的那一个。
当然,只有两个外边距直接相邻时才会合并。如果父元素有内边距(padding)或边框(border),那么它们不会被合并。

注释:只有普通文档流中块框的垂直外边距才会发生外边距合并。行内框、浮动框或绝对定位之间的外边距不会合并。

  1. 设置了的overflow属性的盒模型,则其与子元素之间的垂直margin不会合并,但其与父元素之间、与相邻元素之间的margin会合并。(overflow取值为visible除外)
  2. 设置了float属性的盒模型,则其与相邻元素之间、其与父元素之间、其与子元素之间的垂直margin都不会被合并
  3. 设置了绝对定位position:absolute的盒模型,则其与相邻元素之间、其与父元素之间、其与子元素之间的垂直margin都不会被合并。(但应注意position:absolute对其后元素的position的影响)
  4. 设置了display:inline-block的盒模型,则其与相邻元素之间、其与父元素之间、其与子元素之间的垂直margin都不会被合并。
  5. 水平margin不会被合并,垂直margin会被合并
  6. 用内层元素的margin通过外层元素的padding代替;
    内层元素透明边框 border:20px solid transparent
上一篇下一篇

猜你喜欢

热点阅读