浮动定位BFC边距合并

2017-10-14  本文已影响0人  ShawnRong

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

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

清除浮动指的是解决父容器高度塌陷的问题。方法:

  <div style="border: solid 5px #0e0; width:300px;">
      <div style="height: 100px; width: 100px; background-color: Red;  float:left;">
      </div>
      <div style="height: 100px; width: 100px; background-color: Green;  float:left;">
      </div>
      <div style="height: 100px; width: 100px; background-color: Yellow;  float:left;">
      </div>
      <div style="clear:both;"></div>
  </div>
<div style="border: solid 5px #0e0; width:300px;overflow:hidden;">
    <div style="height: 100px; width: 100px; background-color: Red;  float:left;">
    </div>
    <div style="height: 100px; width: 100px; background-color: Green;  float:left;">
    </div>
    <div style="height: 100px; width: 100px; background-color: Yellow;  float:left;">
    </div>
</div>

以上方法都有一定的局限性。改变了父元素属性,要考虑到对父元素的父元素的影响,overflow属性会影响滚动条和绝对定位的元素;position会改变元素的定位方式。display这几种方式依然没有解决低版本IE问题。IE6、7内有个hasLayout的概念,当元素的hasLayout属性值为true的时候会达到和BFC类似的效果。

  /*方法1*/
  .clearfix{
      /*星号为IEHACK*/
      *zoom:1;
  }
  .clearfix:after{
      content:"";
      display:block;
      clear:left;
  }

  /*方法2*/
  .clearfix{
    *zoom:1;
  }
  .clearfix:after{
     content:"";
     display:table;
     clear:both;
  }

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

CSS有三种定位方式,普通流,浮动,绝对定位。

  <div style="border: solid 1px #0e0; width:200px; position: static;">
      <div style="height: 100px; width: 100px; background-color: Red;">
      </div>
      <div style="height: 100px; width: 100px; background-color: Green;">
      </div>
      <div style="height: 100px; width: 100px; background-color: Red;">
      </div>
  </div>
   <div style="border: solid 1px #0e0; width:200px;">
      <div style="height: 100px; width: 100px; background-color: Red;">
      </div>
      <div style="height: 100px; width: 100px; background-color: Green; position:relative; top:20px; left:20px;">
      </div>
      <div style="height: 100px; width: 100px; background-color: Red;">
      </div>
  </div>
  <div style="border: solid 1px #0e0; width:300px; ">
      <div style="height: 100px; width: 100px; background-color: Red;float: left">
      </div>
      <div style="height: 100px; width: 100px; background-color: Green; float: left">
      </div>
      <div style="height: 100px; width: 100px; background-color: Red; float:left">
      </div>
  </div>
<div style="border: solid 1px #0e0; width:200px; position:relative;">
      <div style="height: 100px; width: 100px; background-color: Red;">
      </div>
      <div style="height: 100px; width: 100px; background-color: Green; position:absolute; top:20px; left:20px;">
      </div>
      <div style="height: 100px; width: 100px; background-color: Yellow;">
      </div>
  </div>
    <div style="border: solid 1px #0e0; width:200px;">
      <div style="height: 100px; width: 100px; background-color: Red;">
      </div>
      <div style="height: 100px; width: 100px; background-color: Green; position:fixed; bottom:20px; left:20px;">
      </div>
      <div style="height: 100px; width: 100px; background-color: Yellow;">
      </div>
  </div>

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

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

  <div style="border: solid 1px #0e0; width:200px; position:relative;">
      <div style="height: 100px; width: 100px; background-color: Red;">
      </div>
      <div style="height: 100px; width: 100px; background-color: Green; position:absolute; top:20px; left:20px;z-index:1">
      </div>
      <div style="height: 100px; width: 100px; background-color: Yellow;position:absolute;top:20px;z-index:2">
      </div>
  </div>

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

position:relative定位是相对于该元素在普通流的位置定位, 不会影响相邻的兄弟元素
margin是相对于兄弟元素的定位,会影响兄弟元素的位置。

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

块格式化上下文(block formatting context) 是Web页面的可视化CSS渲染出的一部分。它是块级盒布局出现的区域,也是浮动层元素进行交互的区域。

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

块格式化上下文对于定位 (float) 与清除浮动 (clear) 很重要。定位和清除浮动的样式规则只适用于处于同一块格式化上下文内的元素。浮动不会影响其它块格式化上下文中元素的布局,并且清除浮动只能清除同一块格式化上下文中在它前面的元素的浮动。

<div style="border: solid 5px #0e0; width:300px;overflow:hidden;">
    <div style="height: 100px; width: 100px; background-color: Red;  float:left;">
    </div>
    <div style="height: 100px; width: 100px; background-color: Green;  float:left;">
    </div>
    <div style="height: 100px; width: 100px; background-color: Yellow;  float:left;">
    </div>
</div>

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

块的顶部外边距和底部外边距有时被组合(折叠)为单个外边距,其大小是组合到其中的最大外边距,这种行为称为外边距塌陷(margin collapsing),也叫外边距合并。前提是普通流中的父子或者兄弟元素,元素之间没有被非空内容、padding、border 或 clear 分隔开。只有上外边距和下外边距才会触发外边距合并,如:

<p style="margin-bottom: 30px;">这个段落的下外边距被合并...</p>
<p style="margin-top: 20px;">...这个段落的上外边距被合并。</p>

这两个段落中间的距离,不是 ”上面段落的下边距“ 与 ”下面段落的上边距“ 的 求和 ,而是两者中的较大者(30px)。都为负时,取绝对值大的。

不让元素合并:

父子外边距合并例子:

<style>
.parent {
  background-color: grey;
  margin: 10px;
}
.children {
  background-color: red;
  width: 100px;
  height: 100px;
  margin: 50px;
  border: 3px solid blue;
}
</style>
<div class="parent">
    <div class="children">
    </div>
</div>
上一篇 下一篇

猜你喜欢

热点阅读