带有流体宽度内容的嵌套clearfix

时间:2016-11-30 15:22:51

标签: css layout css-float clearfix

考虑这种情况:

  • 有一个流体宽度含量的布局,固定侧边栏浮动到右侧。所述布局的容器使用clearfix来清除右浮动
  • 在内容块中,有另一个块做同样的事情。第二个块扩展到侧边栏的高度,直到它用:after { clear: both }
  • 清除侧​​边栏的浮动

演示: https://jsfiddle.net/pv6e93px/1/

示例html:

<section class="layout">
  <aside>main sidebar!</aside>
  <div class="wrap">
    <article class="article">
      <header class="header">
        <span class="note">I break stuff!</span>
      </header>
      <div class="content">
        Main content!
      </div>
    </article>
  </div>
</section>

示例SCSS:

@mixin clearfix() {
    &:before,
    &:after {
        content: "";
        display: table;
    }
    &:after {
        clear: both;
    }
}

.layout {
  @include clearfix();

  .wrap {
    margin-right: 200px;
    background: gray;
  }

  > aside {
    width: 200px;
    height: 700px;
    float: right;
    background: salmon;
  }
}

.article {
  .header {
    @include clearfix();
    background: green;

    .note {
      display: block;
      float: right;
      background: hotpink;
    }
  }

  .content {
    height: 200px;
    background: red;
  }
}

预期:enter image description here

取而代之的是:enter image description here

有没有人知道如何解决这个问题,同时不限制内容宽度或使用其他布局模式(flexbox,绝对定位)。不使用溢出的额外点:隐藏,因为它会切割绝对位于布局内的任何内容。

1 个答案:

答案 0 :(得分:3)

您可以尝试添加此内容:

.wrap {
  ...
  overflow: hidden;
}

<强> jsFiddle

或者,使用calc()

.wrap {
  width: calc(100% - 200px);
  float: left;
}

<强> jsFiddle