gpt4 book ai didi

css - 简单的旋转悬停效果不起作用

转载 作者:行者123 更新时间:2023-11-28 09:31:23 26 4
gpt4 key购买 nike

我正在尝试创建一个简单的效果,以便当我将鼠标悬停在最里面的圆上时,两个外圈旋转以创建一个很酷的效果。我认为这将是一件容易的事,但我似乎无法弄清楚我做错了什么。当我将鼠标悬停在内圈上时,所有的变化都是两个内圈向屏幕右下角移动,根本没有旋转。我在这里错过了什么?谢谢

.wrapper {
position: relative;
width: 400px;
height: 400px;
margin: auto auto;
background: black;
}

.circle {
width: 100px;
height: 100px;
border-radius: 50%;
background-color: grey;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

.circle-1 {
width: 108px;
height: 108px;
border-radius: 50%;
background-color: transparent;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border: 2px;
border-style: solid;
border-color: white white white transparent;
transition: 1.5s all ease-in-out;
}

.circle-2 {
width: 118px;
height: 118px;
border-radius: 50%;
background-color: transparent;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border: 2px;
border-style: solid;
border-color: white transparent white white;
transition: 1.5s all ease-in-out;
}

.circle:hover .circle-2 {
transform: rotate(360deg);
}

.circle:hover .circle-1 {
transform: rotate(-360deg);
}
<div class="wrapper">
<div class="circle">
<div class="circle-1"></div>
<div class="circle-2"></div>
</div>
</div>

最佳答案

您正在将 transform 与翻译一起使用,以便将您的元素居中,然后您将通过旋转覆盖转换,这会产生问题。相反,您可以调整 top/left 值以居中并避免使用转换,然后您将获得所需的旋转:

.wrapper {
position: relative;
width: 400px;
height: 400px;
margin: auto auto;
background: black;
}

.circle {
width: 100px;
height: 100px;
border-radius: 50%;
background-color: grey;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}

.circle-1 {
width: 108px;
height: 108px;
border-radius: 50%;
background-color: transparent;
position: absolute;
top: calc(50% - 55px);
left: calc(50% - 55px);
border: 2px;
border-style: solid;
border-color: white white white transparent;
transition: 1.5s all ease-in-out;
}

.circle-2 {
width: 118px;
height: 118px;
border-radius: 50%;
background-color: transparent;
position: absolute;
top: calc(50% - 60px);
left:calc(50% - 60px);
border: 2px;
border-style: solid;
border-color: white transparent white white;
transition: 1.5s all ease-in-out;
}

.circle:hover .circle-2 {
transform: rotate(360deg);
}

.circle:hover .circle-1 {
transform: rotate(-360deg);
}
<div class="wrapper">
<div class="circle">
<div class="circle-1"></div>
<div class="circle-2"></div>
</div>
</div>

您还可以使用像这样的伪元素来简化您的代码:

* {
box-sizing:border-box;
}
.wrapper {
position: relative;
width: 400px;
height: 400px;
margin: auto;
background: black;
}

.circle {
width: 120px;
height: 120px;
border-radius: 50%;
background:radial-gradient(circle at center, grey 50px,transparent 51px);
position: absolute;
top:50%;
left: 50%;
transform: translate(-50%, -50%);
}

.circle:before,
.circle:after {
content:"";
border-radius: 50%;
position: absolute;
transition: 1.5s all ease-in-out;
border: 2px solid white;
}

.circle:before {
top:0;
left:0;
right:0;
bottom:0;
border-left-color:transparent;
}

.circle:after{
top:5px;
left:5px;
bottom:5px;
right:5px;
border-right-color:transparent;
}

.circle:hover::before {
transform: rotate(360deg);
}

.circle:hover::after {
transform: rotate(-360deg);
}
<div class="wrapper">
<div class="circle">
</div>
</div>

关于css - 简单的旋转悬停效果不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51776967/

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