使用jquery动画时如何避免兄弟元素摇晃

时间:2013-06-15 20:21:34

标签: javascript jquery jquery-animate

我有两个div元素并排。当我将鼠标移到第一个上并激活它时,下一个奇怪地摇动。请参阅此处:http://jsfiddle.net/YqZSv/1/我注意到只有在涉及填充和边框时才会发生这种情况。如果我用边距替换边框,则“摇动”效果会停止。

HTML

<div class='a'></div>
<div class='b'></div>

CSS

.a {
   width: 80px;
   height: 80px;
   padding: 10px;
   border: 0px solid yellow;
   background-color: red;
   display: inline-block
}

.b {
   width: 100px;
   height: 100px;
   background-color: blue;
   display: inline-block;
   margin-left: 20px;
}

的jQuery

$('.a').mouseenter(function(){
    $(this).animate({
        'padding': 0,
        'borderWidth': 10
    });
}).mouseleave(function(){
    $(this).animate({
       'padding': 10,
       'borderWidth': 0
    });
});

我不能使用边距而不是边框​​,因为我使用带边框原点的背景图像,因此我不希望它与其内容一起移动。

任何帮助?

3 个答案:

答案 0 :(得分:3)

告诉浏览器将填充和边框宽度保持在定义的高度/宽度内,这样就不会认为尺寸正在改变:

div.a { box-sizing:border-box; }

http://jsfiddle.net/exvEa/

答案 1 :(得分:3)

如果你不介意进行一些修改......我会选择CSS定位。

虽然这会有额外的标签 类似的东西:

<div id="mother">
    <div class='a'></div>
<div class='b'></div>
    </div>

和你原来的CSS:

#mother{
position:relative;  width:210px;
}
    .a {
       width: 80px;
       height: 80px;
       padding: 10px;
       border: 0px solid yellow;
       background-color: red;
       display: inline-block;
       position:absolute; 
       left:0px; 
    }

    .b {
       width: 100px;
       height: 100px;
       background-color: blue;
       display: inline-block;
       margin-left: 20px;
       position:absolute; 
       right:0px; 
    }

jQuery的:

$('.a').mouseenter(function(){
    $(this).animate({
        'padding': 0,
        'borderWidth': 10
    });
}).mouseleave(function(){
    $(this).animate({
       'padding': 10,
       'borderWidth': 0
    });
});

试试....

http://jsfiddle.net/8jFyL/

答案 2 :(得分:2)

如果小的html / css更改不是问题: http://jsfiddle.net/YqZSv/8/

HTML:

<div class="box">

<div class='a'></div>
</div>
<div class="box">
<div class='b'></div>
    </div>

CSS:

.box {
width:100px;
    height:100px;
    margin-right:20px;
    float:left;
}
.a {
    width: 80px;
    height: 80px;
    padding: 10px;
    border: 0px solid yellow;
    background-color: red;
    display: inline-block
}

.b {
    width: 80px;
    height: 80px;
     padding: 10px;
    background-color: blue;
    display: inline-block;

}

基本上,一个div作为包装...