我在汉堡菜单下使用 SVG,因此当用户单击该菜单时,SVG 会展开并用其上的选项填充整个屏幕。我为此使用了 scale(),所以基本上发生的情况是 SVG 的比例为 1,当用户单击菜单时,SVG 得到一个 scale(35)。
现在的问题。该比例(35)不会在更大的分辨率上填充整个屏幕,甚至在某些具有更大高度的移动分辨率上。如果我设置的比例可以确保我覆盖大部分屏幕,比如比例(70),这将使关闭动画非常混乱,因为将如此大的比例设置为 1。我怎样才能扩展这个 SVG一个流畅的动画,让它填满每一种类型的屏幕?
编辑 - 在下面添加了一个简单快速的示例代码
下面是一些解释发生了什么的图像。
菜单关闭 / SVG 从 scale(70) 变为 scale(1) 并且看起来很乱
function menuOnClick() {
document.getElementById("menu-bar").classList.toggle("change");
document.getElementById("nav").classList.toggle("change");
document.getElementById('blob').classList.toggle("change-bg");
}
#menu {
z-index: 2;
}
#menu-bar {
width: 45px;
height: 40px;
margin: 30px 0 20px 20px;
cursor: pointer;
float: right;
}
.bar {
height: 5px;
width: 100%;
background-color: #00d1a9;;
display: block;
border-radius: 5px;
transition: 0.3s ease;
}
#bar1 {
transform: translateY(-4px);
}
#bar3 {
transform: translateY(4px);
}
.nav {
transition: 0.3s ease;
display: none;
}
.nav ul {
padding: 0 22px;
}
.nav li {
list-style: none;
padding: 12px 0;
}
.nav li a {
color: white;
font-size: 20px;
text-decoration: none;
}
.nav li a:hover {
font-weight: bold;
}
.menu-bg, #menu {
top: 0;
left: 0;
position: absolute;
}
.change {
display: block;
}
.change .bar {
background-color: white;
}
.change #bar1 {
transform: translateY(4px) rotateZ(-45deg);
}
.change #bar2 {
opacity: 0;
}
.change #bar3 {
transform: translateY(-6px) rotateZ(45deg);
}
.change-bg {
transform: scale(70);
}
.blob {
margin-top:-32px;
top: 0;
z-index: 1;
pointer-events: none;
-webkit-transition: all 0.75s linear;
transition: all 0.75s linear;
display: block;
will-change: auto;
filter: none;
-webkit-filter: blur(0);
-moz-filter: blur(0);
-ms-filter: blur(0);
filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius='0');
}
<div id="menu">
<div id="menu-bar" onclick="menuOnClick()">
<div id="bar1" class="bar"></div>
<div id="bar2" class="bar"></div>
<div id="bar3" class="bar"></div>
</div>
<nav class="nav" id="nav">
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
<li><a href="#">Blog</a></li>
</ul>
</nav>
</div>
<svg class="blob" id="blob" xmlns="http://www.w3.org/2000/svg" width="265.42" height="151.973" viewBox="0 0 265.42 151.973">
<title>Menu Blob</title>
<desc>The blob that grows to be the menu background</desc>
<path class="blobPath" id="blobPath" shape-rendering="auto" d="M-1377.154,10877.442c-10.882-7.812-24.262-11.1-36.627-16.251s-24.764-13.355-28.853-26.112c-.135.766,251.322-30.752,251.3-30.855s-9.766,33.5-15.478,42.831c-9.83,16.055-20.015,32.053-32.926,45.756a125.25,125.25,0,0,1-18.85,16.492,89.6,89.6,0,0,1-28.133,13.538,70.507,70.507,0,0,1-29.47,1.6,56.7,56.7,0,0,1-24.487-10C-1354.7,10904.193-1363.044,10887.567-1377.154,10877.442Z" transform="translate(2763.902 -10547.315) rotate(7)" />
</svg>
<div class="menu-bg" id="menu-bg"></div>