清理CSS抖动

时间:2013-05-13 23:33:59

标签: html5 css3 css-transitions

我已经构建了这些圈子,当鼠标悬停时会扩展边框。我现在遇到的唯一问题是圆圈会抖动/抖动。当我将transition: all .1s ease-in-out;设置为大于.2s时,它变得更加明显。

是否有解决这个问题的方法,或者只是它的方式?

以下是JsFiddle

中的代码

感谢您的帮助!

编辑:我正在转换圆的尺寸(宽度和高度)以保持居中。我意识到这会导致过渡期间的抖动。有工作吗?

3 个答案:

答案 0 :(得分:6)

我摆脱了上/左定位的百分比值,清理了边距并对齐了外圈的边框宽度:

这是DEMO

.box {
    position: relative;
    width: 220px;
    height: 220px;
    float: left;
    margin-right: 50px;
}

.clearcircle {
    position: absolute;
    top:15px;
    left:15px;
    width: 190px;
    height:190px;
    border-radius: 100%;
    background-color: transparent;
    border: 5px solid #c0392b;
    transition: all .2s ease-in-out;
}

.clearcircle:hover {
    width:220px;
    height: 220px;
    top: 0px;
    left: 0px;
    border: 5px solid #c0392b;

}
.circle {
    position: absolute;
    top:50%;
    margin-top: -100px;
    left: 50%;
    margin-left:-100px;
    width: 200px;
    height:200px;
    border-radius: 100%;
    background-color: #e74c3c;
    overflow: hidden;
    transition: all .2s ease-in-out;

}


.circle p {
    position:relative;
    text-align: center;
    top: 50%;
    margin-top: -55px;
    color: white;
    transition: all .3s;
}


.circle:hover{
    background-color: #e97468;
}

答案 1 :(得分:0)

不要过渡宽度和高度。保持相同的宽度和高度,只需转换外圈的边框。

对于你的内圈(.circle),设置一个白色边框12px solid #ffffff。现在它总是在相对于外圈的相同位置,现在它不必改变大小。标题也不能跳转,因为它始终处于相同的位置。

对于外圈,当它没有悬停时,确保它具有与它相同的大小和边框,但是使边框变白,5px实心#ffffff。

我认为你也可以取消很多额外的定位。

这是一个经过修改的jsFiddle,所以你可以看看,这里是修改过的CSS:

.box {
position: relative;
width: 220px;
height: 220px;
float: left;
margin-right: 50px;
    text-align: center;
}

.clearcircle {
width: 225px;
height:225px;
border-radius: 100%;
background-color: transparent;
border: 5px solid #ffffff;
transition: all .2s ease-in-out;
}

.clearcircle:hover {
border: 5px solid #c0392b;

}
.circle {
width: 200px;
height:200px;
    border: 12px solid #ffffff;
border-radius: 100%;
background-color: #e74c3c;
overflow: hidden;
transition: all .2s ease-in-out;

}


.circle p {
position:relative;
text-align: center;
color: white;
transition: all .3s;
}


.circle:hover{
background-color: #e97468;
} 

顺便说一下,在 a 标记中添加 div p 会破坏已验证XHTML的标记。您可能希望使用div,并添加“on click”操作,使其表现为链接。

答案 2 :(得分:0)

通过幅度消除抖动:0 -12%; (如果添加填充) padding:0 12%;

menu li a:hover {
    margin: 0 -12%;
    padding: 0 12%;
    color: #fff;
    background: #ff5a5f;
    display: inline-block;
}