响应性SVG,在保持纵横比/原始大小的同时,垂直和水平居中
我尝试为我的SVG实现以下目标:响应性SVG,在保持纵横比/原始大小的同时,垂直和水平居中,svg,flexbox,css-grid,Svg,Flexbox,Css Grid,我尝试为我的SVG实现以下目标: 响应性强(我使用viewBox,在svg元素上没有宽度/高度,效果非常好) 垂直和水平居中(硬部分) 对中SVG应保持其原始纵横比 我制作了一个JSFIDLE演示来进行说明(作为内置的SO代码片段,更易于导航): (请确保在“设置”下将编辑器布局设置为“右结果”,这样可以通过拖动平铺分隔线更轻松地更改画布大小) 如您所见,画布位于最顶部,水平填充视口的整个宽度,从技术上讲,这使其水平居中。此外,如果单击按钮,黑色矩形将向下移动,离开画布一半,这是我想要的行为 现
viewBox
,在svg
元素上没有宽度/高度,效果非常好)svg{
背景色:青色;
边框:3倍纯红;
/*这将破坏SVG画布,使其能够看到效果:*/
/*位置:固定;
身高:100%;
宽度:100%*/
}
一种方法是使用flex box 首先,需要将容器元素(在本例中为
)设置为窗口的完整高度。然后使用display:flex
和align items:center
将SVG垂直居中
body {
height: 100vh;
display: flex;
align-items: center;
}
更新
要使其垂直响应,请为SVG指定一个max height
,并将justify content:center
添加到主体
CSS中
svg {
background-color:teal;
border: 3px solid red;
max-height: 100vh;
}
body {
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
一种方法是使用flex box 首先,需要将容器元素(在本例中为
)设置为窗口的完整高度。然后使用display:flex
和align items:center
将SVG垂直居中
body {
height: 100vh;
display: flex;
align-items: center;
}
更新
要使其垂直响应,请为SVG指定一个max height
,并将justify content:center
添加到主体
CSS中
svg {
background-color:teal;
border: 3px solid red;
max-height: 100vh;
}
body {
height: 100vh;
display: flex;
align-items: center;
justify-content: center;
}
我有一个类似的解决方案,但这缺乏垂直响应(即,当视口非常宽时svg不会缩小)请参见解决方案的gif:为了完整性;这就是我想要的:但正如您所看到的,它破坏了SVG的纵横比(这也显示了填充背景颜色和红色帧……YP,非常感谢!这真是太棒了!我真的需要花一些时间在Frasbox上……我只是注意到这在Safari中不起作用。没有警告。它只是在屏幕中间画了一个小边框……你知道是什么原因造成的吗?我没有MAC手。我现在要检查一下,对不起。它在iOS和MacOS上都失败了吗?我有一个类似的解决方案,但它缺乏垂直响应(即,当视口非常宽时svg不会缩小)请参见您的解决方案的gif:为了完整性;这是我想要的:但正如您所看到的,它破坏了我的svg的纵横比(这也显示了填充背景颜色和红色帧……YP,非常感谢!这真是太棒了!我真的需要花一些时间在Frasbox上……我只是注意到这在Safari中不起作用。没有警告。它只是在屏幕中间画了一个小边框……你知道是什么原因造成的吗?我没有MAC手。我现在要检查,对不起。它在iOS和MacOS上都失败了吗?