3

我正在创建一个带有一些 CSS 动画的页面(由于我的一些客户不想要 JavaScript 繁重的网站)。所以我有一个想要动画的元素,但是根据单击的按钮有 3 种不同的方式:

例子:

<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 种不同的 :target 样式。这可能吗?

4

2 回答 2

4

您可以使用这样的 cssadjacent(+)选择器来做到这一点:

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; } }

工作演示

于 2013-09-29T13:10:23.527 回答
0

所以我基本上想在同一个元素上有 3 种不同的 :target 样式。这可能吗?

不,这是不可能的——不是直接的。

但是如何使用 :target 以三种不同的方式为同一个元素设置动画?

通过使用三个不同的目标。

您可以将要应用转换的实际元素放入许多嵌套容器元素中,如下所示:

<div id=target1>
  <div id=target2>
    <div id=target3>
      <element>

然后让您的三个链接分别指向其中一个目标 ID,并使用 CSS 中的后代组合器为每种情况应用您想要的转换,

#target1 element { … }
#target2 element { … }
#target3 element { … }
于 2013-09-29T13:00:07.250 回答