Firefox flexbox 图像宽度
Firefox flexbox image width
我无法让我的图像占用父容器可用宽度的 100% 以下。我只注意到 Firefox 36(不是 IE 或 Chrome)中的问题。这是 Firefox 的错误还是我在这里遗漏了什么?
注意:图片不得大于其原始尺寸。
Chrome:
火狐:
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
.container {
width:300px;
}
.flexbox {
display:flex;
}
.flexbox .column {
flex:1;
background-color: red;
}
.flexbox .middleColumn {
flex:3;
}
.flexbox .middleColumn img {
width:auto;
height:auto;
max-width:100%;
max-height:100%;
align-self: center;
display: block;
}
</style>
</head>
<body>
<div class="container">
<div class="flexbox">
<div class="column">This is the left column!</div>
<div class="middleColumn">
<img src="http://placehold.it/400/333333">
</div>
<div class="column">This is the right column!</div>
</div>
</div>
</body>
</html>
我不得不承认我不确定为什么,但出于某种原因,在 Firefox 中,您似乎必须给图像一个 width/height(即"auto" 以外的东西)。我们的老朋友 100%
似乎可以解决问题:
.flexbox .middleColumn img {
width: 100%;
height: 100%;
display: block;
}
Here's a fiddle showing the working solution。请注意,我将侧栏更改为 flex:2
以使结果更加明显。
您需要在 .middleColumn 上添加 min-width:0
,如果您想让它缩小到其最小内容宽度(其 <img>
-child 的固有宽度)以下。
否则,它将获得新的默认值 min-width:auto
,这在弹性项目上基本上会使其拒绝收缩到其收缩包装尺寸以下。
(Chrome hasn't implemented min-width:auto
还没有。我听说 IE 在他们的下一代渲染引擎中有,所以我希望该版本在这里的行为应该像 Firefox -- 一旦他们实施此功能,Chrome 也会如此。)
已修复的代码段:
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
.container {
width:300px;
}
.flexbox {
display:flex;
}
.flexbox .column {
flex:1;
background-color: red;
}
.flexbox .middleColumn {
flex:3;
min-width:0;
}
.flexbox .middleColumn img {
width:auto;
height:auto;
max-width:100%;
max-height:100%;
align-self: center;
display: block;
}
</style>
</head>
<body>
<div class="container">
<div class="flexbox">
<div class="column">This is the left column!</div>
<div class="middleColumn">
<img src="http://placehold.it/400/333333">
</div>
<div class="column">This is the right column!</div>
</div>
</div>
</body>
</html>
我似乎可以使用以下方法:
.flexbox {
display:flex;
}
.flexbox .column {
flex:1 1 0;
overflow:hidden;
background-color: red;
}
.flexbox .middleColumn {
flex-grow:3;
flex-shrink:3;
}
.flexbox .middleColumn img {
max-width:100%;
}
在所有列上设置 flex:1 1 0;
将它们设置为平均增长,并从 0px 的均匀和微小的基础开始。
然后您在 .middleColumn
上覆盖增长和收缩
照常需要 max-width:100%;
神奇的是 overflow:hidden;
物品变弯曲了。
图片上的其他内容不需要。
根据我的经验,该方法略有不同,可能很奇怪,但它确实有效。基本上,我将最大宽度固定为实际图像宽度,因此它不会像素化,并使用百分比宽度而不是最大宽度。如果您有一个 <ul>
(弹性)容器,则单元格将为:
li{
flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;
width: 50%; // for example..
img{
display: block;
max-width: [your real img width in px] // instead of 100%;
width:100%; // instead of max-width
}
}
我无法让我的图像占用父容器可用宽度的 100% 以下。我只注意到 Firefox 36(不是 IE 或 Chrome)中的问题。这是 Firefox 的错误还是我在这里遗漏了什么?
注意:图片不得大于其原始尺寸。
Chrome:
火狐:
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
.container {
width:300px;
}
.flexbox {
display:flex;
}
.flexbox .column {
flex:1;
background-color: red;
}
.flexbox .middleColumn {
flex:3;
}
.flexbox .middleColumn img {
width:auto;
height:auto;
max-width:100%;
max-height:100%;
align-self: center;
display: block;
}
</style>
</head>
<body>
<div class="container">
<div class="flexbox">
<div class="column">This is the left column!</div>
<div class="middleColumn">
<img src="http://placehold.it/400/333333">
</div>
<div class="column">This is the right column!</div>
</div>
</div>
</body>
</html>
我不得不承认我不确定为什么,但出于某种原因,在 Firefox 中,您似乎必须给图像一个 width/height(即"auto" 以外的东西)。我们的老朋友 100%
似乎可以解决问题:
.flexbox .middleColumn img {
width: 100%;
height: 100%;
display: block;
}
Here's a fiddle showing the working solution。请注意,我将侧栏更改为 flex:2
以使结果更加明显。
您需要在 .middleColumn 上添加 min-width:0
,如果您想让它缩小到其最小内容宽度(其 <img>
-child 的固有宽度)以下。
否则,它将获得新的默认值 min-width:auto
,这在弹性项目上基本上会使其拒绝收缩到其收缩包装尺寸以下。
(Chrome hasn't implemented min-width:auto
还没有。我听说 IE 在他们的下一代渲染引擎中有,所以我希望该版本在这里的行为应该像 Firefox -- 一旦他们实施此功能,Chrome 也会如此。)
已修复的代码段:
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
.container {
width:300px;
}
.flexbox {
display:flex;
}
.flexbox .column {
flex:1;
background-color: red;
}
.flexbox .middleColumn {
flex:3;
min-width:0;
}
.flexbox .middleColumn img {
width:auto;
height:auto;
max-width:100%;
max-height:100%;
align-self: center;
display: block;
}
</style>
</head>
<body>
<div class="container">
<div class="flexbox">
<div class="column">This is the left column!</div>
<div class="middleColumn">
<img src="http://placehold.it/400/333333">
</div>
<div class="column">This is the right column!</div>
</div>
</div>
</body>
</html>
我似乎可以使用以下方法:
.flexbox {
display:flex;
}
.flexbox .column {
flex:1 1 0;
overflow:hidden;
background-color: red;
}
.flexbox .middleColumn {
flex-grow:3;
flex-shrink:3;
}
.flexbox .middleColumn img {
max-width:100%;
}
在所有列上设置 flex:1 1 0;
将它们设置为平均增长,并从 0px 的均匀和微小的基础开始。
然后您在 .middleColumn
max-width:100%;
神奇的是 overflow:hidden;
物品变弯曲了。
图片上的其他内容不需要。
根据我的经验,该方法略有不同,可能很奇怪,但它确实有效。基本上,我将最大宽度固定为实际图像宽度,因此它不会像素化,并使用百分比宽度而不是最大宽度。如果您有一个 <ul>
(弹性)容器,则单元格将为:
li{
flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;
width: 50%; // for example..
img{
display: block;
max-width: [your real img width in px] // instead of 100%;
width:100%; // instead of max-width
}
}