【发布时间】:2017-11-27 13:30:43
【问题描述】:
背景:
在我的团队正在开发的工具中,我们正在实现一个header,它基于事件侦听器以编程方式移出屏幕。在编写了第一个实现后,它按预期工作,但仅在 Chrome 中。
我在#wrapper 和#content 元素上使用display:flex。
<div id="wrapper">
<header>Header Content</header>
...
<section id="content">
<div id="subcontent">
<div id="tool">
<div id="tool-container"></div>
<svg id="svgTool" height="100%" width="100%" class="svgTool style-scope test-tool"></svg>
</div>
</div>
</section>
...
</div>
一些css:
...
#wrapper {
width:100%;
height:100vh;
position:relative;
display:flex;
flex-direction:column;
margin-left:auto;
margin-right:auto;
min-height:100%;
}
#content {
display: flex;
flex-direction: column;
height: 100%;
}
...
使用一些简单的 JavaScript,当单击按钮时,我正在调整 header 元素的 margin-top(对于本示例)。
问题:虽然 Chrome 按预期工作,但 Safari 不能。我怀疑这一定是由于 Safari 的 webkit 版本如何使用display: flex 解释元素。 编辑:或者可能是由于 Safari 如何使用 vh 单位?
在 Chrome 中,标题会上下滑动而不影响<svg> 元素。在 Safari 中,调整标题的 margin-top 将导致 svg 元素在屏幕底部创建空白,等于更改 header 的 margin-top。
JSBin: 这个 JSbin 的工作方式与我们工具的当前实现相同。 在 Chrome 和 Safari 中打开它以查看差异。
http://jsbin.com/kaxiqig/edit?html,css,output
旁注:firefox 也可以正常工作
【问题讨论】:
-
您可能正在与github.com/philipwalton/…打交道
-
当我在 chrome 中点击“测试幻灯片”时,它什么也没做。
-
@MichaelCoker 你在 jsbin 中启用了“自动运行 js”吗?
-
@captainrad 就是这样。我不经常使用 jsbin。您也应该在 SO 上的帖子中包含此代码。在这种情况下不需要 jsbin。
-
FWIW,即使我将所有
vh单位切换为百分比,我在 Safari 中也看到了同样的问题。所以不确定它与单位有关。也就是说,您可以通过在main上切换min-height来解决此问题,同时您还可以切换页眉边距。目标是为了简单起见避免这种情况,还是会起作用?
标签: html css google-chrome safari flexbox