我正在创建一个带有一些CSS动画的页面(由于我的一些客户不想要JavaScript重型网站)。所以我有一个我想要动画的元素,但是根据点击的按钮有三种不同的方式:
示例:
<a href="#element">One animation</a>
<a href="#element">Second animation</a>
<a href="#element">Third animation</a>
<div id="element"></div>
我选择元素的方式是:target。但是,如何使用以下三种不同的方式为同一元素设置动画:target?
这是我现在用于测试目的的CSS:
#element{
height: 10px;
width: 10px;
border-radius: 0px;
background-color: red;
position: absolute;
left: 440px;
top: 300px;
-webkit-transition-property: height, width, background-color,;
-webkit-transition-duration: 5s;
-webkit-transition-timing-function:ease-out;
}
#element:target{
height: 300px;
width: 500px;
border-radius: 0px;
background-color: blue;
position: absolute;
left: 200px;
top: 200px;
}
所以我基本上希望在同一个元素上有3种不同的:目标样式。这可能吗?
答案 0 :(得分:1)
您可以使用css adjacent(+)
选择器执行此操作:
<强> HTML:强>
<a id='first' href="#first">One animation</a>
<a id='second' href="#second">Second animation</a>
<a id='third' href="#third">Third animation</a>
<div id="element" class="force-repaint"></div>
<强> CSS:强>
#element{
height: 300px;
width: 300px;
border-radius: 0px;
background-color: red;
position: absolute;
left: 300px;
top: 50px;
-webkit-transition-property: height, width, background-color,;
-webkit-transition-duration: .2s;
-webkit-transition-timing-function:ease-out;
}
#first:target + #second + #third + #element {
background: yellow;
}
#second:target + #third + #element{
background: green;
}
#third:target + #element{
background: purple;
}
.force-repaint { -webkit-animation: bugfix infinite 1s; }
@-webkit-keyframes bugfix { from { fill: 0; } to { fill: 0; } }
正在使用 DEMO
答案 1 :(得分:0)
所以我基本上希望在同一个元素上有3种不同的:目标样式。这可能吗?
不,这是不可能的 - 不是直接的。
但是如何使用以下三种不同的方式为同一元素设置动画:target?
使用三个不同的目标。
您可以将要转换的实际元素放入多个嵌套容器元素中,如下所示:
<div id=target1>
<div id=target2>
<div id=target3>
<element>
然后让你的三个链接分别指向其中一个目标ID,并使用CSS中的后代组合器为每个案例应用所需的转换,
#target1 element { … }
#target2 element { … }
#target3 element { … }