【问题标题】:CSS horizontally scrolling flex box within grid网格内的CSS水平滚动flexbox
【发布时间】:2018-11-30 07:20:52
【问题描述】:

免责声明:我已经阅读了大量几乎我的用例,但没有找到完全相同的:

我想要一个左侧边栏宽度固定的网格,右侧内容列应该只填满窗口的其余部分而不是更多

我让它在“纯”弹性盒布局中工作,但由于某些奇怪的原因不在网格内。

发生的情况是 flex 项只会使整个网格比窗口宽并滚动整个内容。

我想要的是只有 flex 容器滚动并且上面的标题保持在原来的位置。

<style media="screen">
  * {
    margin: 0;
    padding: 0;
  }
  body {
    height: 100%;
  }
  sidebar {
    background-color: red;
    display: block;
  }
  main {
    display: grid;
    grid-template-columns: 300px auto;
    width: 100vw;
  }
  content {
    background-color: blue;
    display: block;
  }
  image-container-wrapper {
    display: block;
    overflow: scroll;
  }
  image-container {
    display: flex;
    flex-wrap: nowrap;
    overflow-x: auto;
  }
  my-image {
    display: block;
    flex: 0 0 auto;
    margin-right: 3px;
    min-width: 100px;
    min-height: 100px;
    background-color: grey;
  }
</style>


<header>Header</header>
<main>
  <sidebar>This should be "fixed"
  </sidebar>
  <content>
    <h1>Slider below</h1>
    <image-container-wrapper>
      <image-container>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
      </image-container>
    </image-container-wrapper>
  </content>
</main>
<footer></footer>

【问题讨论】:

  • 在我看来,使用grid-template-columns: 300px minmax(0, 100%); 有效。但我承认,我不知道为什么,因为我几乎不使用网格。也许有人可以提供一个正确的答案,或者我稍后会回来调查它。

标签: html css flexbox css-grid


【解决方案1】:

代替:

grid-template-columns: 300px auto

其中auto 表示内容长度,并将扩展一个元素以适应内容(即没有溢出)...

使用这个:

grid-template-columns: 300px minmax(0px, auto)

允许列缩小到 0 宽度。

sidebar {
  background-color: red;
  /* display: block; */
}

main {
  display: grid;
  /* grid-template-columns: 300px auto; */
  grid-template-columns: 300px minmax(0px, auto);
  width: 100vw;
}

content {
  background-color: blue;
  display: block;
}

image-container-wrapper {
  /*  display: block;
        overflow: scroll; */
}

image-container {
  display: flex;
  flex-wrap: nowrap;
  overflow-x: auto;
}

my-image {
  display: block;
  flex: 0 0 auto;
  margin-right: 3px;
  min-width: 100px;
  min-height: 100px;
  background-color: grey;
}

* {
  margin: 0;
  padding: 0;
}

body {
  height: 100%;
}
<header>Header</header>
<main>
  <sidebar>This should be "fixed"</sidebar>
  <content>
    <h1>Slider below</h1>
    <image-container-wrapper>
      <image-container>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
        <my-image></my-image>
      </image-container>
    </image-container-wrapper>
  </content>
</main>
<footer></footer>

【讨论】:

  • 啊,那我对 auto 的理解是完全错误的!非常感谢
猜你喜欢
  • 2019-07-10
  • 2012-09-13
  • 2018-10-04
  • 2017-07-06
  • 2016-09-30
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多