【问题标题】:How to change the width of a CSS flex-box column?如何更改 CSS flex-box 列的宽度?
【发布时间】:2015-05-13 22:38:27
【问题描述】:

我有一个 menu div,它填充了 100% 的容器高度,在它旁边右侧是 标题 em>、body 和 footer 部分。

我设法用CSS flex property 做到了这一点。但是,我想更改"menu" div 从容器中取出的宽度量,例如,将其设为10% width of container's width,并设置rest divs fill what's left(即使"menu" div 稍后隐藏)。

JS Fiddle 我现在拥有的东西:https://jsfiddle.net/jf29vr0x/3/

.container {
  display: flex;
  flex-flow: column wrap;
  width: 75%;
  height: 500px;
  position: relative;
  margin: 0 auto;
}

.menu {
  flex: 0 0 100%;
  background: lightblue;
}

.header {
  flex: 0 0 10%;
  background: lightgray;
}

.body {
  flex: 0 0 80%;
  background: purple;
}

.footer {
  flex: 0 0 10%;
  background: lightgreen;
}
<div class="container">

  <div class="menu">
    Menu
  </div>

  <div class="header">
    Header
  </div>

  <div class="body">
    Body
  </div>

  <div class="footer">
    Footer
  </div>

</div>

我发现如果我在“菜单”类上明确设置宽度,它会调整它的大小,但其余的框不会填满剩下的空间,除非我也明确地将它们的宽度声明为 100%。但是,这样做会使容器溢出,并且由于容器与中心对齐,因此看起来会偏离。

我也可以将宽度设置为 90%(在页眉、页脚正文上)和 10% 在菜单上,但菜单有时设置为 display: none;,所以当它消失时,其他布局部分只会为容器宽度的 90%。

有没有办法只使用 flex-box 属性来做到这一点?我不太了解 flex-shrink 和 flex-grow 是关于什么的,但我认为它们只会影响(在这种情况下)高度?

谢谢。

【问题讨论】:

  • 这对你有用吗? jsfiddle.net/jf29vr0x/6 删除显示无并显示显示内联块,使其在页眉/正文/页脚上以 100% 宽度溢出,但溢出被隐藏,当菜单设置为不显示时,有没有溢出效果。否则,flex 可能不是你的答案,或者需要 JS
  • 嗯,问题是,如果你 text-align: right 或 text-align: 例如,将文本放在标题 div 上居中,那么文本会关闭或完全消失(因为它超出了到隐藏的溢出)。就像在这里:jsfiddle.net/jf29vr0x/8。我想也许 flex-boxes 不适合这个,如果你可以同时设置它们的宽度和高度会很酷,尽管它们是行或列......

标签: html css flexbox


【解决方案1】:

您必须在右列周围添加一个包装器,然后只在 .menu 元素上指定 flex-basis。

.container {
  display: flex;
  width: 75%;
  height: 500px;
  position: relative;
  margin: 0 auto;
  height: 500px;
  overflow: hidden;
}

.right-col {
  flex-flow: column wrap;
  flex-grow: 1;
  height: 100%;
  display: flex;
}

.menu {
  flex-basis: 10%;
  background: lightblue;
}

.header {
  flex: 0 0 10%;
  background: lightgray;
}

.body {
  flex: 0 0 80%;
  background: purple;
}

.footer {
  flex: 0 0 10%;
  background: lightgreen;
}
<div class="container">
  <div class="menu">Menu</div>
  <div class="right-col">
    <div class="header">Header</div>
    <div class="body">Body</div>
    <div class="footer">Footer</div>
  </div>
</div>

小提琴:https://jsfiddle.net/jf29vr0x/11/

现在当菜单被隐藏时,右栏会展开全部。

【讨论】:

  • 太好了,按预期工作!我什至没有想过添加包装器。谢谢。
猜你喜欢
  • 1970-01-01
  • 2014-11-27
  • 2015-02-14
  • 2022-11-22
  • 2015-09-22
  • 1970-01-01
  • 1970-01-01
  • 2018-12-14
  • 1970-01-01
相关资源
最近更新 更多