CSS的坑

时间:2020-08-31 20:45:31   收藏:0   阅读:55

如何触发 bfc 规则

注意:如果设置了float: left/right或者position: absolute,浏览器会将其转为inline-block

<!-- log -->
<style>
  .span {
    /* 加入float之后,即便是inline也可以设置宽高了 */
    float: left;
    width: 300px;
    height: 100px;
    background-color: green;
  }
</style>
<span class="span">我是一个span</span>
<div class="clear"></div>

margin 塌陷

发生在父子元素之间

解决方法:

margin 合并

发生在兄弟元素之间

解决方法:

float 浮动流问题

浮动元素产生了浮动流,对于浮动流,块级元素看不到,只有 bfc 元素和文本类属性的元素(比如图片)才能看到。

问题:父元素包不住浮动的子元素。如(红色为父元素的边框):

<!-- log -->
<div class="float-container">
  <div class="float">1</div>
  <div class="float">2</div>
  <div class="float">3</div>
  <div class="float">4</div>
  <div class="float">5</div>
  <div class="float">6</div>
  <div class="float">7</div>
  <div class="float">8</div>
  <div class="float">9</div>
</div>
<div class="clear"></div>
<style>
  .my-container {
    height: 300px;
  }
  .float-container {
    max-width: 300px;
    border: 5px solid red;
  }

  .float-container .float {
    float: left;
    width: 100px;
    height: 100px;
    color: white;
    background-color: #000000;
  }
</style>

为什么会出现这种现象呢?那就是加了浮动之后的元素脱离了标准流,所以父容器出现了高度塌陷。

解决方法

方法一:

<style>
  .float-container {
    max-width: 300px;
    border: 5px solid red;
  }

  .float-container .float {
    float: left;
    width: 100px;
    height: 100px;
    color: white;
    background-color: #000000;
  }
  .float-container .clear {
    clear: both;
  }
</style>
<div class="float-container">
  <div class="float">1</div>
  <div class="float">2</div>
  <div class="float">3</div>
  <div class="float">4</div>
  <div class="float">5</div>
  <div class="float">6</div>
  <div class="float">7</div>
  <div class="float">8</div>
  <div class="float">9</div>
  <div class="clear"></div>
</div>

博客园就是用到方法一,这种方法的缺点在于增加了多余的 HTML 元素。

方法二:

<!-- log -->
<div class="float-container-2 clear-float">
  <div class="float">1</div>
  <div class="float">2</div>
  <div class="float">3</div>
  <div class="float">4</div>
  <div class="float">5</div>
  <div class="float">6</div>
  <div class="float">7</div>
  <div class="float">8</div>
  <div class="float">9</div>
</div>
<style>
  .float-container-2 {
    max-width: 300px;
    border: 5px solid red;
  }

  .float-container-2 .float {
    float: left;
    width: 100px;
    height: 100px;
    color: white;
    background-color: #000000;
  }

  .clear-float::after {
    content: ‘‘;
    clear: both;
    /* clear只对block生效 */
    display: block;
  }
</style>

原文:https://www.cnblogs.com/oceans/p/13590659.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!