IE 11 在使用弹性宽度时忽略最小宽度
IE 11 ignores min-width when using flex width
我想知道是否有人可以帮助解决这个问题。我花了很多时间在上面,但我完全没有想法,我尝试了 Google 结果的各种建议,各种 flex 增长和收缩的组合,但无法让它工作。
演示: https://embed.plnkr.co/dIPh53W4DBkmTB51DCHp/(用IE 11打开)
编辑代码: https://plnkr.co/edit/dIPh53W4DBkmTB51DCHp?p=preview
在这种情况下,在平板电脑视图中,<ul>
弹性宽度应为 90%,但在桌面视图中,<ul>
弹性宽度应仅为 55%。但是,我们不希望桌面视图中的 <ul>
比平板视图中的短,因此我们在桌面视图的 <ul>
上设置了 min-width: 864px
。因此,如果您在 950px 和 970px 之间调整屏幕大小,<ul>
不应再突然缩小。
这似乎在所有 Chrome、Firefox、Safari 和 IE10 中都能正常工作。
但在 IE11 中,元素的宽度不正确,无法按预期居中。我认为这是因为在 960 像素的浏览器尺寸下,<ul>
元素上有 55% 是 max-width: 528px
,但它也有 min-width: 864px
。出于某种原因,IE11 将其呈现为位于左侧(而不是中心),宽度为 528px。所以IE11似乎忽略了最小宽度属性,它不像其他浏览器那样处理它。
代码示例:
index.html:
<div class="progress-bar">
<ul>
<li>Test item</li>
<li>Test item</li>
<li>Test item</li>
<li>Test item</li>
</ul>
</div>
style.css:
div {
display: flex;
flex-direction: row;
justify-content: center;
}
ul {
display: flex;
flex: 1 1 90%;
max-width: 90%;
margin: 0;
padding: 0;
list-style-type: none;
}
li {
display: flex;
flex: 1 1 0%;
justify-content: center;
margin: 0;
padding: 12px 0;
list-style-type: none;
background: #f7f7f7;
}
@media (min-width: 960px) {
ul {
min-width: 864px !important;
flex-basis: 55%;
max-width: 55%;
}
}
IE 10 在这种情况下实际上工作正常,所以 IE 11 版本似乎可能破坏了一些已经在工作的东西。
知道如何解决这个问题吗?
由于在 IE11 中似乎无法解决此问题,因此我添加了一个临时媒体查询来更改特定维度的行为。
如果我们希望 90% 宽度达到 959px 屏幕尺寸,然后 55% 在 960px 屏幕尺寸之后——我计算确定我们希望 <ul>
元素宽度为 864px (960px x 90%)当屏幕在 960px 和 1570px 之间(864px / 55%)。所以对于这个尺寸范围,我强制宽度和最大宽度为 864px。
然后对于大于 1571px 的屏幕,flexbox 55% 继续再次应用。
用这个方法,我完全可以忽略min-width
@media (min-width: 960px) and (max-width: 1570px) {
ul {
flex-basis: 100%;
max-width: 864px;
width: 864px;
}
}
我想知道是否有人可以帮助解决这个问题。我花了很多时间在上面,但我完全没有想法,我尝试了 Google 结果的各种建议,各种 flex 增长和收缩的组合,但无法让它工作。
演示: https://embed.plnkr.co/dIPh53W4DBkmTB51DCHp/(用IE 11打开)
编辑代码: https://plnkr.co/edit/dIPh53W4DBkmTB51DCHp?p=preview
在这种情况下,在平板电脑视图中,<ul>
弹性宽度应为 90%,但在桌面视图中,<ul>
弹性宽度应仅为 55%。但是,我们不希望桌面视图中的 <ul>
比平板视图中的短,因此我们在桌面视图的 <ul>
上设置了 min-width: 864px
。因此,如果您在 950px 和 970px 之间调整屏幕大小,<ul>
不应再突然缩小。
这似乎在所有 Chrome、Firefox、Safari 和 IE10 中都能正常工作。
但在 IE11 中,元素的宽度不正确,无法按预期居中。我认为这是因为在 960 像素的浏览器尺寸下,<ul>
元素上有 55% 是 max-width: 528px
,但它也有 min-width: 864px
。出于某种原因,IE11 将其呈现为位于左侧(而不是中心),宽度为 528px。所以IE11似乎忽略了最小宽度属性,它不像其他浏览器那样处理它。
代码示例:
index.html:
<div class="progress-bar">
<ul>
<li>Test item</li>
<li>Test item</li>
<li>Test item</li>
<li>Test item</li>
</ul>
</div>
style.css:
div {
display: flex;
flex-direction: row;
justify-content: center;
}
ul {
display: flex;
flex: 1 1 90%;
max-width: 90%;
margin: 0;
padding: 0;
list-style-type: none;
}
li {
display: flex;
flex: 1 1 0%;
justify-content: center;
margin: 0;
padding: 12px 0;
list-style-type: none;
background: #f7f7f7;
}
@media (min-width: 960px) {
ul {
min-width: 864px !important;
flex-basis: 55%;
max-width: 55%;
}
}
IE 10 在这种情况下实际上工作正常,所以 IE 11 版本似乎可能破坏了一些已经在工作的东西。
知道如何解决这个问题吗?
由于在 IE11 中似乎无法解决此问题,因此我添加了一个临时媒体查询来更改特定维度的行为。
如果我们希望 90% 宽度达到 959px 屏幕尺寸,然后 55% 在 960px 屏幕尺寸之后——我计算确定我们希望 <ul>
元素宽度为 864px (960px x 90%)当屏幕在 960px 和 1570px 之间(864px / 55%)。所以对于这个尺寸范围,我强制宽度和最大宽度为 864px。
然后对于大于 1571px 的屏幕,flexbox 55% 继续再次应用。
用这个方法,我完全可以忽略min-width
@media (min-width: 960px) and (max-width: 1570px) {
ul {
flex-basis: 100%;
max-width: 864px;
width: 864px;
}
}