【发布时间】:2021-06-21 23:51:50
【问题描述】:
我遇到了 Safari、SVG 和 flexbox 的问题
我们的目标是拥有一个响应式 SVG,保持纵横比 (16:9)。此外,SVG 应该始终位于屏幕的垂直和水平中心。以下代码适用于除 Safari 之外的所有浏览器...我尝试了不同的供应商前缀,但我不知道为什么 SVG 没有显示...有什么想法吗?
您可以在下面的代码 sn-p 中测试有缺陷的行为。 Safari 将显示一个空白页面。其他浏览器将显示一个 16:9、始终居中的蓝绿色矩形。
* {
margin: 0;
padding: 0;
overflow: hidden;
}
body {
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
svg {
background-color: teal;
max-height: 100vh;
}
<svg viewBox="0 0 1920 1080">
</svg>
更新
只是一些澄清。根据视口的纵横比,SVG 位于水平中心或垂直中心。只有当屏幕纵横比正好为 16:9 时,它才会匹配 SVS 的 viewBox(请参阅viewBox="0 0 1920 1080"),并且它会显示没有任何边框(信箱)。这是我的目标,解决方案应该适用于所有浏览器——不管它是如何完成的。
【问题讨论】:
-
尝试使用 flex 而不是 max-height,例如
flex: 0 0 100vh; -
可以重现,一种解决方法是将
height和width属性设置为1920和1080,然后通过CSS将其覆盖为auto。 -
@enxaneta,没有。我失去了水平响应能力,并且我在侧面得到了一些填充:jsfiddle.net/akdu6qep
-
@Kaiido SVG的宽高属性?
-
我相信@Kaiido 的意思是按照他的建议设置宽度和高度。然后通过将它们都设置为
100%在 CSS 中覆盖它们。这相当于根本不设置它们。