嵌套的清除浮动容器,包含自适应宽度的内容

3
考虑以下情况:
  • 有一个具有流体宽度内容的布局,并且固定的侧边栏浮动到右侧。该布局的容器使用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、绝对定位)。如果不使用overflow:hidden,可以获得额外的分数,因为它会剪切布局内绝对定位的任何内容。
1个回答

3
您可以尝试添加以下内容:
.wrap {
  ...
  overflow: hidden;
}

jsFiddle

或者,使用 calc()

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

jsFiddle


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接