使用CSS过渡维护列表尺寸



我试图在无序列表中创建列表项的效果。

基本上,当你把鼠标悬停在列表上时,它的大小调整为2px的内边距。虽然这是正确的,但它也影响了列表项的整体尺寸,从而将其他列表元素推到右边,并将下面的div推下2px。有人知道解决这个问题的方法吗?

我想让列表项在悬停期间增加2px的填充,而不影响它周围的任何其他元素。

您可以在jsfiddle上找到这里和下面的代码:

HTML

<div id="info">
    <ul class="projects">
        <li class="site wmhr"><a href="#">$</a> 
            <p>What's My Hourly Rate</p>
        </li>
        <li class="site proud"><a href="#">P</a>
            <p>PROUD</p>
        </li>
        <li class="site mdy"><a href="#">M</a>
            <p>Manda Dougherty Yoga</p>
        </li>
        <li class="site rr"><a href="#">R</a>
            <p>Responsive Resume</p>
        </li>
        <li class="site dp"><a href="#">D</a>
            <p>designpairs (in progress)</p>
        </li>
    </ul>
</div>
CSS

.projects {
    margin: 0;
    padding: 0 0 50px 0;
}
.projects li {
    display: inline-block;
    list-style: none;
    width: 70px;
    height: 70px;
    margin: 50px 20px 20px 0;
    border: 4px solid #555;
    border-radius: 50%;
    font-size: 2em;
    text-align: center;
    line-height: 70px;
    background: #414141;
    -webkit-transition: all .2s ease;
    -moz-transition: all .2s ease;
    -ms-transition: all .2s ease;
    -o-transition: all .2s ease;
    transition: all .2s ease;
}
.projects p {
    font-size: .850rem;
    line-height: 1.500em;
}
.projects li:hover {
    padding: 2px;
    display: inline-block;
    list-style: none;
    border-radius: 50%;
    line-height: 71px;
}
.projects li a {
    font-family:'Montserrat', sans-serif;
    color: #fff;
    text-decoration: none;
}
.wmhr:hover {
    background: #66CC6E;
    border: 4px solid #57ac5e;
}
.proud:hover {
    background: #5882c2;
    border: 4px solid #4b6da2;
}
.mdy:hover {
    background: #fec601;
    border: 4px solid #ddad03;
}
.rr:hover {
    background: #797b96;
    border: 4px solid #606176;
}
.dp:hover {
    background: #475161;
    border: 4px solid #38404d;
}

如果你不希望项目移动,那么你必须通过减少其他尺寸来抵消填充,或者改变布局结构以不使用内联布局。

这是jsFiddle的一个版本,它使用边距的减少来抵消填充的增加。悬停的项目变大,但其他项目不移动。

.projects li:hover {
    padding: 2px;
    display: inline-block;
    list-style: none;
    border-radius: 50%;
    line-height: 71px;
    margin: 48px 18px 18px 0;
}

注意,我也改变了默认的左边距为2px,所以我可以把它减少到0,因为我讨厌使用负边距(它们有时会导致对象重叠,从而引入意想不到的行为)。

http://jsfiddle.net/jfriend00/6jjcg/

我会使用CSS转换属性,而不是添加填充和调整周围

.projects li:hover {
     transform: scale3d(1.2,1.2,1);
}

使用scale3d而不是简单的scale,因为scale3d使用硬件加速。您还需要添加-webkit-moz前缀以获得更好的兼容性。

<<p> jsFiddle例子/strong>

相关内容

  • 没有找到相关文章

最新更新