gpt4 book ai didi

html - 仅使用 CSS 和 HTML 来激活 标签?

转载 作者:行者123 更新时间:2023-11-28 10:24:03 25 4
gpt4 key购买 nike

我有以下代码:

有没有办法激活 <animate />只使用 HTML 和 CSS 的标签?只有当激活时,<animate />的动画规则才应该被执行。例如,最近几年或 2020 年是否有一些新的 HTML CSS 标准可以让我做类似 input:checked ~ svg animate {enabled:true;} 的事情? ?或者其他有趣的东西?

我想在我的元素中完全避免使用 JavaScript 来挑战和自娱自乐。

  <body>
<input type="checkbox" />
<svg class="curtain home" viewBox="0 0 100 100" preserveAspectRatio="none">
<defs>
<pattern id="img1" patternUnits="userSpaceOnUse" width="100" height="100">
<image xlink:href="https://picsum.photos/id/1000/800/800" x="0" y="0" width="100" height="100" />
</pattern>
</defs>
<polygon points="0,0 0,100 100,100 50,0" fill="url(#img1)">
<animate attributeName="points" dur="5s" values="0,0 0,100 100,100 50,0 ; 50,40 30,60 80,10 50,70; 0,0 0,100 100,100 50,0" keyTimes="0;0.5;1" repeatCount="indefinite"/>
</polygon>
</svg>
</body>


额外的

我对其他选项持开放态度,这些选项给人一种错觉,即在选中输入字段之前没有动画在运行。或者可能有另一个 HTML 元素可以很好地与 <animate /> 配合使用提供幻觉动画的标签可以根据用户与网页的交互开始和停止。

最佳答案

您可能会考虑一个切换两个多边形显示的技巧

.hide {
display:none;
}

input:checked~svg .hide {
display:block;
}
input:checked~svg .show {
display:none;
}
<body>
<input type="checkbox" >
<svg class="curtain home" viewBox="0 0 100 100" preserveAspectRatio="none">
<defs>
<pattern id="img1" patternUnits="userSpaceOnUse" width="100" height="100">
<image xlink:href="https://picsum.photos/id/1000/800/800" x="0" y="0" width="100" height="100" />
</pattern>
</defs>
<polygon points="0,0 0,100 100,100 50,0" fill="url(#img1)" class="show">
</polygon>
<polygon points="0,0 0,100 100,100 50,0" fill="url(#img1)" class="hide">
<animate attributeName="points" dur="5s" values="0,0 0,100 100,100 50,0 ; 50,40 30,60 80,10 50,70; 0,0 0,100 100,100 50,0" keyTimes="0;0.5;1" repeatCount="indefinite"/>
</polygon>
</svg>
</body>

或者使用点击事件。诀窍是有两个矩形,一个用于开始,另一个用于结束。使用一些 CSS,您可以让它们彼此重叠,然后您可以使用 z-index:

这是一个基本示例,您只需要找到一种使红色矩形看起来更好的好方法,因为它将是您必须单击的那个。

label {
position:absolute;
z-index:0;
}

input:checked + label {
z-index:1;
}
<body>
<input type="checkbox" id="input" >
<label for="input"><svg viewBox="0 0 10 10" height="20">
<rect id="stop" x=0 y=0 width="100%" height="100%" fill="red" />
</svg></label>
<label for="input"><svg viewBox="0 0 10 10" height="20">
<rect id="start" x=0 y=0 width="100%" height="100%" fill="red" />
</svg></label>

<svg class="curtain home" viewBox="0 0 100 100" preserveAspectRatio="none">
<defs>
<pattern id="img1" patternUnits="userSpaceOnUse" width="100" height="100">
<image xlink:href="https://picsum.photos/id/1000/800/800" x="0" y="0" width="100" height="100" />
</pattern>
</defs>
<polygon points="0,0 0,100 100,100 50,0" fill="url(#img1)" class="hide">
<animate attributeName="points" begin="start.click" end="stop.click" dur="5s" values="0,0 0,100 100,100 50,0 ; 50,40 30,60 80,10 50,70; 0,0 0,100 100,100 50,0" keyTimes="0;0.5;1" repeatCount="indefinite"/>
</polygon>
</svg>
</body>

如果您对纯 CSS 解决方案感兴趣,只需几行代码即可轻松完成:

img {
width: 400px;
display:block;
clip-path: polygon(0 0, 0 100%, 100% 100%, 50% 0);
animation:change 5s linear infinite paused;
}
input:checked + img {
animation-play-state:running;
}

@keyframes change{
50% {
clip-path: polygon(50% 40%, 30% 60%, 80% 10%, 50% 70%)
}
}
<input type="checkbox" >
<img src="https://picsum.photos/id/1000/800/800">

关于html - 仅使用 CSS 和 HTML 来激活 <animate/> 标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59096098/

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