html - 将两个 child 堆叠在一起,并与 flexbox parent 中的另一个 child 内联

标签 html css sass flexbox

这是我想要的编排:

1. Narrow View           2. Medium View             3.Huge View
|----------------------| |------------------------| |----------------------|
|  Header     | Nav 2  | | Header | Nav 1 | Nav 2 | |       Header         |
|----------------------| |------------------------| |----------------------|
|        Nav 1         | |                        | | Nav 1 |              |
|----------------------| |        Content         | |-------|    Content   |
|       Content        | |                        | | Nav 2 |              | 
|----------------------| |------------------------| |-------|--------------|

到目前为止,我已经成功地重现了前两个 View ,第三个让我感到困惑。

是否可以使用 flexbox 实现此目的,还是我必须在主要断点之后应用 float ?

这是 SCSS(每个元素都是 main 的直接子元素,@include 只是媒体查询的缩写):

main {
  display: flex;
  flex-flow: row wrap;
}
header {
  flex: 0 auto;
  order: 1;
  @include medium { flex: 1; } 
  @include huge { flex: 0 100%; }
}
nav#nav {
  flex: 0 100%;
  order: 3;
  @include medium {
    order: 2;
    flex: 0 auto;
  }
  @include huge { flex: 0 120px; }
}

nav#social {
  flex: 1;
  order: 2;
  @include medium {
    order: 3;
    flex: 0 auto;
  }
  @include huge { flex: 0 120px;}
} 
#content {
  flex: 0 100%;
  order: 4;
  @include huge { flex: 0 calc(100% - 240px); }
}

Here's a pen for this

最佳答案

您要求的是混合列和行方向的能力,如果不使用额外的 flex 容器,这是不允许的:

http://codepen.io/cimmanon/pen/vlytF

HTML

<main>
  <header>
    <h1>Header</h1>
  </header>
  <nav>
    <ul id="nav">
      <li><a href="#">Nav 1</a>
      <li><a href="#">Nav 2</a>
    </ul>
    <ul id="social">
      <li><a href="#">Social 1</a>
      <li><a href="#">Social 2</a>
    </ul>
  </nav>
  <div id="content">
    <p>Content</p>
  </div>
</main>

萨斯:

main {
  display: flex;
  flex-flow: row wrap;
}
header {
  flex: 1 100%;
  order: 1;
}
nav {
  display: flex;
  flex: 0 10em;
  order: 3;
  flex-direction: column;

  ul {
    flex: 1 auto;
    margin: 0;
  }
}

#content {
  flex: 1 auto;
  order: 4;
  min-height: 10em;
}

但是,这不会帮助您重新创建最小的布局。对不起。

关于html - 将两个 child 堆叠在一起,并与 flexbox parent 中的另一个 child 内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25293140/

相关文章:

jquery - 如何使用 jQuery 获取具有特定 CSS 属性的第一个父对象?

sass - 在 Plunker 中使用 sass?

css - scss mixin 未正确编译

ios - 带有 IOS 的 Google IMA HTML5 SDK

html - 使用 css 在 <li> 中包装文本

html - 将一个 div 居中,部分在屏幕外

sass - 在 VS Code 的 .vue 文件中为 Sass 启用 IntelliSense

javascript - TypeError : $(. ..).dialog 不是 devserver 上的函数

php - 这个网站在转到另一个页面时如何不加载?

javascript - 如何使用子选择器将 css 应用于父级——使用 css 或 angular 2