css - 悬停时两个不同元素的转换延迟反转
问题描述
我需要一个过渡,其中悬停序列是 ABBA 而不是 ABAB。
这是我为演示而制作的小提琴:
https://jsfiddle.net/m8vrLtx7/1/
这是代码:
div{
height: 10rem;
width: 10rem;
background: red;
border-radius: 100%;
margin: 3rem;
position: relative;
}
div:before,
div:after{
content: '';
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
border-radius: 100%;
transform: scale(0);
transition: transform .3s;
}
div:after{
background: blue;
z-index: 1;
}
div:before{
width: calc(100% - 1rem);
height: calc(100% - 1rem);
top: .5rem;
left: .5rem;
background: pink;
z-index: 2;
transition-delay: .1s;
}
div:hover:before,
div:hover:after{
transform: scale(1);
}
我需要的是最后一个动画的内圈(粉红色的那个),但是在悬停时我希望它首先出现。
有没有办法做到这一点,只有CSS?
解决方案
您可以通过为 normal 和 :hover 状态指定不同的值,在两个“方向”上添加转换延迟。当元素进入各自的状态时,每一个都将应用。
我在这里将您示例中的值增加了 10 倍,以便我们可以更轻松地观察正在发生的事情,但您可以再次加快速度。
因此,当元素进入:hover 状态时,您只需延迟粉红色 :before 圆圈上的过渡。而蓝色的则相反。
div{
height: 10rem;
width: 10rem;
background: red;
border-radius: 100%;
margin: 3rem;
position: relative;
}
div:before,
div:after{
content: '';
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
border-radius: 100%;
transform: scale(0);
transition: transform 3s;
}
div:after{
background: blue;
z-index: 1;
transition-delay: 1s;
}
div:before{
width: calc(100% - 1rem);
height: calc(100% - 1rem);
top: .5rem;
left: .5rem;
background: pink;
z-index: 2;
}
div:hover:before,
div:hover:after{
transform: scale(1);
}
div:hover:before {
transition-delay: 1s;
}
div:hover:after {
transition-delay: 0s;
}
<div></div>
推荐阅读
- jhipster - 如何在 Jhipster 中添加多列唯一索引?
- php - 如何在不使用ajax的情况下将数据从按钮单击发送到同一文件中的php
- python - 根据另一个 CSV 中的列过滤一个 CSV
- swift - 无法在 swift 中创建程序化 Cocoa 绑定
- javascript - 使用变量的值从数组调用
- html - 如何使用 URL 将用户重定向到 PWA
- r - ggplot2 中的 sec_axis 未显示在预期的位置
- java - 为什么在将 String Array 转换为 int Array 时出现 NumberFormatException?
- css - Puppeteer 保存的 PNG 不透明
- c++ - c++,将 std::string 转换为 uint8_t