我正在创建带有子项的水平滚动div(flex子项)。
除Safari之外,它在任何地方都适用。
在此可能不会在StackOverflow代码示例上显示问题,因为它取决于“所有”父对象的高度属性。这就是为什么我将html和body设置为高度100%的原因。
html, body {
height: 100%;
width:100%;
}
#flexCont {
display: flex;
flex-direction: column;
height: 100%;
}
#scrollable {
height:150px;
white-space:nowrap;
overflow-y:hidden;
overflow-x:scroll;
/* just for visualization */
border:1px solid black;
width:250px;
}
.item {
display: inline-block;
height:100%;
/* just for visualization */
border-bottom:15px solid black;
box-sizing: border-box;
margin-right:5px;
width:50px;
background: red;
}
<html>
<body>
<div id="flexCont">
<div id="scrollable">
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
<div class="item"></div>
</div>
</div>
</body>
</html>
问题是,即使显示了水平滚动条并且内容区域较小(135像素),Safari也将其.item
高度设置为高度的100%#scrollable
(150像素)。
这导致滚动条出现在内容上方。
Chrome和其他浏览器正确地将.item
的高度设置为135px(假设滚动条为15px)。
如前所述,它取决于所有父母的身高属性。意思是如果我height 100%
从移除html
,body
或者#flexCont
它呈现正确。此外,如果我删除display flex
或至少flex-direction column
,它也会正确渲染。
我添加了底部的黑色边框以更好地形象化它。如果看不到它们,它们将隐藏在滚动条的后面。
知道如何解决吗?
在Chrome上可见的底部15像素(黑色),在Safari上滚动条的下方。
编辑:该死的Safari ...尝试使用修复它时,添加border-bottom
并box-sizing
创建了另一个问题(至少)max-height:fill-available
。解决方案必须不受限制地进行测试。
添加height: fill-available;
到.item
似乎可以解决此问题。
.item {
height: 100%;
height: -webkit-fill-available;
}
编辑:删除-moz-fill-available
,fill-available
因为它们不是解决Safari中问题的必要,并且在Firefox中破坏了布局。
此外请注意,在Safari中,.item
如果您希望所有子项都具有基于其父项(.item
)的高度,则必须对所有子项使用-webkit-fill-available ,这会带来更多问题。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句