【问题标题】:max-width not working on flex item最大宽度不适用于弹性项目
【发布时间】:2017-09-28 02:05:24
【问题描述】:

我有一列中有一个 flex 容器和两个 flex 子项。顶部 div 应填满所有剩余空间。底部 div 的高度应由内容和max-width 确定。但底部 div 的宽度正在缩小到其内容的宽度。 max-width 被忽略。

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

.impact_image {
  flex-grow: 1;
  background-image: url(https://s16.postimg.org/cjw1kzkkl/circles.png);
  background-position: center bottom;
  background-size: cover;
}

.intro {
  max-width: 600px;
  flex-shrink: 0;
  margin: 0 auto;
  background-color: pink;
}

h1 {
  font-size: 20px;
}
<div class="hero_image">
  <div class="impact_image"></div>
  <div class="intro">
    <h1>XYZ brand consultancy<br>making a difference</h1>
  </div>
</div>

这里是 JS 小提琴:https://jsfiddle.net/cke6qr8e/

【问题讨论】:

  • Safari(10.1)没有问题。

标签: html css flexbox


【解决方案1】:

除了Michael_B's answer,在这种情况下是margin: 0 auto导致.intro折叠,所以如果你删除它,它的宽度不会折叠到它的内容,但这也会使居中它也不能正常工作。

另一种解决方案是删除intro 规则并将其属性移至h1(除了flex-shrink: 0)。

html, body { margin: 0; }

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

.impact_image {
  flex-grow: 1;
  background-image: url(https://s16.postimg.org/cjw1kzkkl/circles.png);
  background-position: center bottom;
  background-size: cover;
}

.intro h1 {
  max-width: 600px;
  margin: 0 auto;
  font-size: 20px;
  background-color: pink;
}
<div class="hero_image">
  <div class="impact_image"></div>
  <div class="intro">
    <h1>XYZ brand consultancy<br>making a difference</h1>
  </div>
</div>

【讨论】:

  • 感谢代码更简洁。奇怪的是它没有添加 width:100% 并解决了 margin: 0 auto;关于 div 的问题。
  • @Markeee 正如 Michael_B 所说,flexbox 在浏览器中的行为有所不同,而且由于它是一个相当新的标准,浏览器制造商需要一些时间才能在所有可以使用的变体中正确使用它它。
  • @Markeee 另请注意,可能在即将更新的flexbox 中,supposed 设置宽度,如 Michael_B 的回答中所示,因此您需要密切关注。
【解决方案2】:

默认情况下,Flex 项目可能会缩小到其内容大小。 (此行为可能因浏览器而异。)

这是因为弹性项目不再存在于 块格式化上下文中,块级元素自动采用width: 100%。在 flex 格式化上下文中,元素有不同的默认值。

因此,要让max-width 处理弹性项目,还需要给项目width: 100%

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

.impact_image {
	flex-grow:1;
	background-image:url(https://s16.postimg.org/cjw1kzkkl/circles.png);
	background-position: center bottom;
	background-size:cover;
	}
  
  .intro {
	max-width:600px;
	flex-shrink: 0;
  margin:0 auto;
  background-color:pink;
  width: 100%; /* NEW */
	}

h1 {
	font-size:20px;
	}
<div class="hero_image">
	<div class="impact_image"></div>
	<div class="intro">	
		<h1>XYZ brand consultancy<br>making a difference</h1>
	</div>
</div>

【讨论】:

  • 我最初是在 Safari (iPad) 中检查这个问题,但没有发现任何问题。一旦我转移到 Chrome (PC),我就看到了你在说什么。
  • 多么奇怪。添加 width:100% 适用于我的 Mac 的 Chrome、Firefox 和 Safari。我认为这普遍适用?
  • @Markeee 是的,因为迈克尔描述的确切原因
  • 感谢您的回答,这解决了我的问题max-width: 960px; width:100%; 在 edge 和 chrome 中测试
猜你喜欢
  • 2018-05-22
  • 1970-01-01
  • 2023-04-02
  • 2019-03-15
  • 2016-08-11
  • 2013-07-16
  • 2015-05-01
  • 1970-01-01
  • 2021-09-06
相关资源
最近更新 更多