美文网首页让前端飞Web前端之路
交错排序的CSS Transitions(译)

交错排序的CSS Transitions(译)

作者: solfKwolf | 来源:发表于2019-08-15 19:04 被阅读2次

你可以通过:hover来移动一个元素获得一个有趣的视觉效果:

@media (hover: hover) {
  .list--item {
    transition: 0.1s;
    transform: translateY(10px);
  }
  .list--item:hover,
  .list--item:focus {
    transform: translateY(0);
  }
}

很好,但如果你的页面拥有几个列表项,并且你想让他们在hover时都移动,但是彼此之间有交错的间隔。

秘诀在与[transition-delay](https://css-tricks.com/almanac/properties/t/transition-delay/),对于每个列表项目都进行不同的延迟。

@media (hover: hover) {
  .list li a span {
    transform: translateY(100px);
    transition: 0.2s;
  }
  .list:hover span {
    transform: translateY(0);
  }
  .list li:nth-child(1) span {
    transition-delay: 0.0s;
  }
  .list li:nth-child(2) span {
    transition-delay: 0.05s;
  }
  .list li:nth-child(3) span {
    transition-delay: 0.1s;
  }
  .list li:nth-child(4) span {
    transition-delay: 0.15s;
  }
  .list li:nth-child(5) span {
    transition-delay: 0.2s;
  }
  .list li:nth-child(6) span {
    transition-delay: 0.25s;
  }
}

如果你想代码可具编程性,你应该摆delay设置成css自定义属性

@media (hover: hover) {
  .list {
    --delay: 0.05s; // 可以是常规的CSS属性,但需要以两个破折号(`--`)开始,这里的作用域是在.list下
  }
  .list li a span {
    transform: translateY(100px);
    transition: 0.2s;
  }
  .list:hover span {
    transform: translateY(0);
  }
  .list li:nth-child(1) span {
    transition-delay: calc(var(--delay) * 0);
  }
  .list li:nth-child(2) span {
    transition-delay: calc(var(--delay) * 1);
  }
  .list li:nth-child(3) span {
    transition-delay: calc(var(--delay) * 2);
  }
  .list li:nth-child(4) span {
    transition-delay: calc(var(--delay) * 3);
  }
  .list li:nth-child(5) span {
    transition-delay: calc(var(--delay) * 4);
  }
  .list li:nth-child(6) span {
    transition-delay: calc(var(--delay) * 5);
  }
}

当然上面的代码还是有点问题的,当页面列表项目过多时,需要写多个css样式,最快的方法之一就是用html的style属性。

<ul class="list">
  <li><a href="#0" style="--delay: 0.00s;">① <span>This</span></a></li>
  <li><a href="#0" style="--delay: 0.05s;">② <span>Little</span></a></li>
  <li><a href="#0" style="--delay: 0.10s;">③ <span>Piggy</span></a></li>
  <li><a href="#0" style="--delay: 0.15s;">④ <span>Went</span></a></li>
  <li><a href="#0" style="--delay: 0.20s;">⑤ <span>To</span></a></li>
  <li><a href="#0" style="--delay: 0.25s;">⑥ <span>Market</span></a></li>
</ul>
@media (hover: hover) {
  .list li a span {
    transform: translateY(100px);
    transition: 0.2s;
  }
  .list:hover span {
    transform: translateY(0);
    transition-delay: var(--delay); /* comes from HTML */
  }
}

如果你使用scss,那就更简单了

@media (hover: hover) {
 
 /* base hover styles from above */

  @for $i from 0 through 20 {
    .list li:nth-child(#{$i + 1}) span {
      transition-delay: 0.05s * $i;
    }
  }
}

[原文链接](https://css-tricks.com/staggered-css-transitions/

)

相关文章

网友评论

    本文标题:交错排序的CSS Transitions(译)

    本文链接:https://www.haomeiwen.com/subject/qartsctx.html