【发布时间】:2019-12-24 11:08:43
【问题描述】:
我在 Flex 框中使用 writing-mode: vertical-lr。该布局在 Chrome 76 中正常工作,但在 Firefox 68 和 IE11 中完全错误。
要求说明:对于特定场景,我需要%垂直边距wrto容器(即父元素)高度而不是宽度(这是浏览器的实际行为)。我正在使用的技巧是,为容器设置writing-mode: vertical-lr,以便子级的% 垂直边距(例如:margin-top: 10%) 将根据容器高度而不是宽度计算。我为孩子们申请了writing-mode: horizontal-tb,让他们看起来很正常。
演示代码: (在 Firefox 或 IE 11 中运行以下代码,或查看下面的屏幕截图)
* {
margin: 0; padding: 0; border: 0; box-sizing: border-box;
}
.container-vert {
background-color: lightcyan;
writing-mode: tb-lr;
writing-mode: vertical-lr;
display: flex;
flex-flow: row nowrap;
}
.container-vert > * {
writing-mode: lr-tb;
writing-mode: horizontal-tb;
display: inline-block;
vertical-align: bottom;
opacity: .8;
}
.c11 {
background-color: lightcoral;
}
.c12 {
background-color: lightgreen;
}
.outer1 {
background-color: red;
}
.outer2 {
background-color: gold;
}
.parent {
display: flex;
border: 1px dashed;
background-color: lightblue;
padding: 10px;
flex-flow: row nowrap;
margin-bottom: 10px;
writing-mode: tb-lr;
writing-mode: vertical-lr;
}
.child {
border: 1px solid;
padding: 10px;
min-width: 100px;
writing-mode: lr-tb;
writing-mode: horizontal-tb;
}
<p class="outer1">Before first example</p>
<div class="container-vert">
<div class="c1 c11">Child1-1 element
<p>next line</p>
<p>next line</p>
<p>next line</p>
<p>next line</p>
</div>
<div class="c1 c12">Child1-2 element
<p>2nd's next line</p>
</div>
</div>
<p class="outer1">After first example</p>
<br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/><br/>
<p class="outer2">Before second example</p>
<div class="parent">
<div class="child">A</div>
<div class="child">B</div>
<div class="child">C</div>
<div class="child">D</div>
<div class="child">E</div>
</div>
<p class="outer2">After second example</p>
是否有任何已知的修复方法可以让 Firefox 和 IE 正确呈现?
Chrome 76.0.3809.100:
火狐 68.0.2:
IE 11 和 Edge 44.18362.267.0:
【问题讨论】:
-
请在问题本身中包含minimal reproducible example,而不是仅链接到可以并且最终会改变/死亡的场外位置。
-
@TylerH 添加了可运行代码 sn-p。
-
历史记录,Codepen 链接:codepen.io/manikantag/pen/jONrjBK
标签: css google-chrome internet-explorer firefox flexbox