【发布时间】:2021-06-19 08:16:51
【问题描述】:
我尝试为我的 SVG 实现以下目标:
- 响应式(我使用
viewBox,svg元素上没有宽度/高度,效果很好) - 垂直和水平居中(硬部分)
- 居中 SVG 应保持其原始纵横比/纵横比
我做了一个 jsfiddle 演示用于说明(使用内置 SO 代码 sn-p 更容易导航): https://jsfiddle.net/McTell/gjx9pcon/3/ (请确保在设置下将编辑器布局设置为正确的结果,这样可以更轻松地通过拖动平铺分隔线来更改画布大小)
如您所见,画布位于最顶部,并且水平填充视口的整个宽度,这使其在技术上水平居中。此外,如果您单击按钮,黑色矩形将向下移动,离开画布一半,这是我想要的行为。
现在我尝试通过添加以下 CSS(在 jsfiddle 上被注释掉)来引入居中垂直对齐:
svg {
position:fixed;
height:100%;
width:100%;
}
这将使整个 SVG 画布处于垂直和水平居中的位置,但它会破坏 SVG 的原始边界(正如您可以通过背景颜色和红色边框看到的那样)。如果现在单击按钮,黑色矩形也不会离开画布,因为画布现在是整个视口。
我的目标是在不破坏 SVG 的情况下获得水平和垂直居中对齐。我在 flexbox 和 grid 方面很糟糕,但我想这可能是正确的道路?
感谢您对此的任何帮助!
编辑(添加 SO 代码片段)打开代码 sn-p "Full Page" 并确保您打开了您的开发工具或重新调整您的浏览器。您会看到 SVG 不是垂直居中的。要玩,请使用 jsfiddle 版本。
svg {
background-color:teal;
border: 3px solid red;
/* This will destroy the SVG canvas, enable to see effect: */
/* position:fixed;
height:100%;
width:100% */
}
<svg id="my-svg" viewBox="0 0 1920 1080">
</svg>
【问题讨论】: