【发布时间】:2019-07-07 15:21:40
【问题描述】:
我正在使用内联 SVG 来呈现内容(对于游戏,如果它有任何区别的话)。我将通过javascript调整viewBox,所以我不关心维护外部svg元素的纵横比。
我在下面包含了一个精简到最低限度的演示 - 一个带有嵌套 SVG 元素的 CSS 网格。
问题是,当我加载演示并使浏览器变宽时,SVG 元素也会变高。如何保持 SVG 填充主要元素,而不会将页脚推离屏幕?
<head>
<title>SVG scale demo</title>
<style>
html,
body {
padding: 0;
margin: 0;
width: 100vw;
height: 100vh;
overflow: hidden;
}
body {
display: grid;
grid-template-rows: 3em 1fr 3em;
grid-template-columns: 1fr 10em;
grid-template-areas: "Header Header""Main Aside""Footer Footer"
}
svg {
display: block;
width: 100%;
height: 100%;
}
header {
grid-area: Header;
}
main {
grid-area: Main
}
aside {
grid-area: Aside
}
footer {
grid-area: Footer
}
</style>
</head>
<body>
<header> Header content </header>
<main>
<svg preserveAspectRatio="none" viewBox="-10 -10 20 20" xmlns="http://www.w3.org/2000/svg">
<circle cx="0" cy="0" r="8" />
</svg>
</main>
<aside> Side bar content </aside>
<footer> Footer content </footer>
</body>
</html>
我已经尝试了在 CSS 和 svg 元素中设置宽度/高度的各种组合,并且我已经将 preserveAspectRatio 属性添加到 svg 元素,现在我向你们寻求帮助。
【问题讨论】:
-
您确定要将 viewBox 设置为 viewBox="-10 -10 20 20" 吗? -10 -10 是 x 和 y 的偏移量,表示 svg 从坐标(-10px,-10px)开始。通常 viewBox 设置为“0 0 x y”
-
是的,我希望 SVG 原点位于视口的中心