【问题标题】:Max-width not working on Flexbox item (item is shrinking to width of content)最大宽度不适用于 Flexbox 项目(项目正在缩小到内容的宽度)
【发布时间】:2023-04-02 18:51:02
【问题描述】:

我在主页上有一个完整的视口宽度、完整的视口高度“英雄形象”。我已经把它做成了一个 Flex 容器。 flex 容器内部是一个子 div(包含一个标题)。这个弹性项目应该与弹性容器的底部对齐。它有一个最大宽度,并且应该在父级内部水平居中。

但是,最大宽度被忽略了。 div 正在获取其内容的宽度 - 标题。请看 JS Fiddle:https://jsfiddle.net/4h7q6d5x/

如您所见,主图内部的 .main div 占用了其内容的宽度 - 与主图下方的 .main div 不同。

我查看了各种问题,包括这个max-width not working on flex item

但是将 width:100% 添加到 flex 项不起作用。在较小的视口尺寸下,宽度和填充不能很好地发挥作用,并且标题从右侧边缘被裁剪。

如何获得 max-width 以使用 Flexbox?

.hero_image {
    min-height: 100vh;
    background-color:yellow;
    display: flex;
    flex-direction: column;
    justify-content: flex-end;
    }

.main {
    max-width:500px;
    margin:0 auto;
    padding:0 50px;
    background-color:pink;
    }


<div class="hero_image">
    <div class="main">
        <h1>Heading <br>couple of words</h1>
    </div>
</div>  

<div class="main">
    <p>Lots of content</p>
</div>

【问题讨论】:

  • 我在 Mac 上查看 Firefox 和 Chrome 上的 JS Fiddle。英雄图像中的 .main div 占据了标题的宽度。最大宽度被忽略。它应该和它下面的 .main div 一样宽,也就是在主图之外。
  • 没关系,你指定了一个max-width属性,但是block占用的比这个少。如果块没有足够的内容来达到那个大小,它总是会更小。如果你想让块占据那 500px,你必须告诉它有width: 500px
  • @Artur Capraro 我希望它的最大宽度为 500 像素。不是 500px 的宽度。 500px 的 max-width 将具有 500px 的宽度(如果视口足够大),即使它的内容只有 1px 宽。
  • max-width 就像@ArturCapraro 所说的那样
  • @Paulie_D 当标题/内容足够长以将 div 推到最大宽度时,它看起来和工作正常。但标题只有 4 个字长,最大宽度被忽略。试试你的 JS Fiddle 只用 4 个字,你就能看到

标签: css flexbox


【解决方案1】:

flex-containers 内部的默认“宽度”(实际上是 flex-basis)是 auto,这使得它仅与内容一样宽。

但是将 width:100% 添加到 flex 项不起作用。在较小的视口尺寸下,宽度和填充不能很好地发挥作用,并且标题从右侧边缘被裁剪。

那么我建议进行一些更改。不要使用 flex-column,而是使用 align-items:flex-end 定位您的 .main div。

然后用flex: 1设置默认的“宽度”(实际上是flex-grow)。

.hero_image {
  min-height: 50vh;
  /* for example */
  background-color: yellow;
  display: flex;
  align-items: flex-end;
  justify-content: center;
}

.main {
  flex: 1;
  max-width: 50%;
  /* for example */
  margin: 0 auto;
  padding: 0 50px;
  background-color: pink;
}
<div class="hero_image">
  <div class="main">
    <h1>Heading <br>couple of words</h1>
  </div>
</div>

<div class="main">
  <p>Lots of text</p>
</div>

【讨论】:

  • 这是如何工作的? flex:1 是否表示 flex 项目应该尽可能大地增长,直到达到最大宽度?或者我应该使用 flex-basis 来设置项目的初始长度? “flex-basis 属性指定了 flex 项的初始长度”并从英雄图像内的 .main div 中删除最大宽度?
猜你喜欢
  • 2017-09-28
  • 2021-10-05
  • 2020-03-03
  • 2021-03-10
  • 2016-08-11
  • 2020-07-04
  • 1970-01-01
  • 1970-01-01
  • 2021-08-28
相关资源
最近更新 更多