使用CSS Transition维护列表维度

时间:2013-05-08 20:15:07

标签: css css3 css-transitions

我正在尝试使用无序列表中的列表项创建效果。

基本上,只要一个人在列表上盘旋,大小就会在填充中调整2px。虽然这正确地影响了列表项的整体尺寸,因此将其他列表元素推向右侧并将div beaneath推向2px。有人知道解决这个问题的方法吗?

我希望列表项在悬停期间执行的操作是将填充增加2px而不影响其周围的任何其他元素。

您可以在jsfiddle here以及以下代码中找到代码:

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;
}

2 个答案:

答案 0 :(得分:0)

如果您不希望项目移动,则必须通过减少某些其他维度来抵消填充,或者更改布局结构以不使用内联布局。

这里是你的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/

答案 1 :(得分:0)

我会使用CSS转换属性,而不是添加填充并调整它。

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

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

jsFiddle example