gpt4 book ai didi

css - 如何缩放 SVG 路径以适应窗口大小?

转载 作者:太空宇宙 更新时间:2023-11-03 21:11:55 25 4
gpt4 key购买 nike

我无法缩放 SVG 以适应窗口大小。

在这个例子中,我有一个波浪路径和一个文本元素,我想在这里实现的是沿着波浪路径从左到右移动文本元素(这是由 GSAP 完成的)并在中途停止初始负载中的路径;当用户开始滚动时,它将移动到末尾。

我的问题是,SVG创建的波浪路径太长,甚至路径的一半都会超出窗口,我试图通过使用viewBox缩小波浪路径,失败的;使用 css width: 100vw,失败。

我还使用了 css transform 属性,它确实缩小了波浪路径,但这是一个固定大小,我想让它尽可能响应,这意味着无论窗口宽度如何,文本元素总是首先停在屏幕中间(波浪路径的一半),然后移动到屏幕的右侧。这在使用内联 SVG 元素时可能吗?如果是这样,请指出正确的方向。

提前致谢!

(请在整页模式下查看示例,这将完美解释我的问题,但滚动功能将被禁用,因为该模式下的高度为100vh,没有滚动空间)

document.getElementById("MyPath").setAttribute("d", document.getElementById("Path").getAttribute("d"));
var tl = new TimelineMax({
repeat: 0,
delay: 1
});
tl.to("#Text", 3, {
attr: {
startOffset: '50%',
opacity: 1
}
});


window.addEventListener('scroll', function() {
tl.to("#Text", 3, {
attr: {
startOffset: '100%',
opacity: 0
}
});
}, true);
@import url(https://fonts.googleapis.com/css?family=Oswald);
body {
background-color: #222;
}

svg {
overflow: visible;
width: 100%;
height: 100%;
background-color: #fff;
left: 0;
top: 0;
position: absolute;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.17.0/plugins/TextPlugin.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/gsap/1.17.0/TweenMax.min.js"></script>
<svg xml:space="preserve">
<defs><path id="MyPath"/></defs>
<path id="Path" fill="none" stroke="#000" stroke-miterlimit="10" d="M0,188.2c186.2,84,261.8,84.9,440,66.4s295.2-130,535.2-129.4c240,0.6,357,144.3,591.1,144.3
s450.1-141.2,651.1-141.2c271.7,0,354.2,141.2,612.1,141.2c240,0,423-141.2,669.1-141.2c119.1,0,202.3,33.8,281,68.7"/>
<text font-size="7em" >
<textPath id="Text" fill='#88CE02' font-family=Oswald xlink:href="#MyPath" opacity=0 startOffset="0%" letter-spacing="5px">Love the little things.</textPath>
</text>
</svg>

最佳答案

如果您希望 SVG 缩放以适应屏幕(或任何父容器),它需要有一个 viewBox 属性。该属性告诉浏览器 SVG 内容的尺寸。没有它,浏览器就知道需要缩放多少。

您的路径宽度约为 3780,底部位于 y=144。所以 viewBox 的合理值应该是:

viewBox="0 0 3780 150"

document.getElementById("MyPath").setAttribute("d", document.getElementById("Path").getAttribute("d"));
var tl = new TimelineMax({
repeat: 0,
delay: 1
});
tl.to("#Text", 3, {
attr: {
startOffset: '50%',
opacity: 1
}
});


window.addEventListener('scroll', function() {
tl.to("#Text", 3, {
attr: {
startOffset: '100%',
opacity: 0
}
});
}, true);
@import url(https://fonts.googleapis.com/css?family=Oswald);
body {
background-color: #222;
}

svg {
overflow: visible;
width: 100%;
height: 100%;
background-color: #fff;
left: 0;
top: 0;
position: absolute;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.17.0/plugins/TextPlugin.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/gsap/1.17.0/TweenMax.min.js"></script>
<svg viewBox="0 0 3780 150" xml:space="preserve">
<defs><path id="MyPath"/></defs>
<path id="Path" fill="none" stroke="#000" stroke-miterlimit="10" d="M0,188.2c186.2,84,261.8,84.9,440,66.4s295.2-130,535.2-129.4c240,0.6,357,144.3,591.1,144.3
s450.1-141.2,651.1-141.2c271.7,0,354.2,141.2,612.1,141.2c240,0,423-141.2,669.1-141.2c119.1,0,202.3,33.8,281,68.7"/>
<text font-size="7em" >
<textPath id="Text" fill='#88CE02' font-family=Oswald xlink:href="#MyPath" opacity=0 startOffset="0%" letter-spacing="5px">Love the little things.</textPath>
</text>
</svg>

关于css - 如何缩放 SVG 路径以适应窗口大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45930593/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com