我在SVG中制作了一个“汉堡按钮”,如下所示。
body {
margin: 0;
text-align: center;
}
svg#ham-btn {
margin: 2rem;
border: 1px solid black;
fill: #383838;
}
<svg id="ham-btn" width="107.5px" height="80px" viewBox="0 0 80 80" preserveAspectRatio="xMidYMid meet" xmlns="http://www.w3.org/2000/svg">
<style>
#ham-btn {
cursor: pointer;
}
#ham-btn:hover #r1 {
outline: 1px solid transparent;
transition: transform 0.2s;
transform-origin: 50% 50%;
transform: rotate(37deg) translate(0%, 28.75%) scaleX(1.1);
}
#ham-btn:hover #r2 {
transition: transform 0.2s;
transform: translate(120%, 0);
}
#ham-btn:hover #r3 {
outline: 1px solid transparent;
transition: transform 0.2s;
transform-origin: 50% 50%;
transform: rotate(-37deg) translate(0%, -28.75%) scaleX(1.1);
}
</style>
<rect id="r3" x="0" y="71.25%" width="100%" height="15%" rx="5%" />
<rect id="r2" x="0" y="42.5%" width="100%" height="15%" rx="5%"/>
<rect id="r1" x="0" y="13.75%" width="100%" height="15%" rx="5%" />
</svg>
问题
现在,如果我想要让按钮变小,我必须手动将视口和viewBox
的尺寸都减小相同数量的像素。
有没有办法使其更具响应性?例如,通过使viewBox
成为视口的百分比?
根据规范,似乎viewBox
必须是一个<number>
,因此不能是一个百分比。
有什么想法吗?
谢谢。
注1
我没有为按钮添加任何可访问性或其他功能。本问题与其响应性有关。
注2
我知道我可以使SVG视口成为其容器/浏览器视口的百分比。
不幸的是,这并不能解决我的问题,因为为了使这个按钮工作,我的视图框(viewBox)与视口之比必须保持不变(否则按钮会失去其形状)。
因此,我想让viewBox
成为视口的百分比。
如果有兴趣,我的解决方案利用了以下内容:
viewBox
比视口更宽,但高度相同- 因此,
preserveAspectRatio
用于使rect
水平居中 rect
的尺寸是viewBox
的百分比
outline
用于修复火狐浏览器在变换后的锯齿线问题。
编辑:
如果对未来的访问者有帮助,可以在这里找到包括完整可访问性的最终按钮:https://codepen.io/magnusriga/pen/KrrJKa
width
设置为50%
。除非你需要压缩/拉伸图像,否则不需要声明高度。 - enxaneta