Css动画在悬停时扩展按钮文本

时间:2015-11-24 07:59:46

标签: javascript css css-animations

我希望在按钮悬停时显示更多文字,我希望按钮缩小并随扩展文字一起增长。

我需要一个通用的解决方案,因为按钮上的文字及其宽度将取决于用户对语言的选择。

这是我(目前没有工作)的尝试

.hover-value {
  display: inline-block;
  visibility: collapse;
  width: 0%;
  -webkit-transition: width 2s;
  transition: width 2s;
  overflow: hidden;
}
button:hover .hover-value {
  visibility: visible;
  width: 100%;
}
<button>
  Result
  <span class="hover-value">Add new result</span>
</button>

同样在JsFiddle:https://jsfiddle.net/JohanGovers/46392xss/

我在我的项目中使用jQuery和bootstrap但是如果可能的话想用css解决这个问题。我已尝试使用其他SO答案中建议的可见性属性,但无济于事。

非常感谢任何帮助。

5 个答案:

答案 0 :(得分:11)

对于最好的动画,我决定为max-width属性设置动画。这是因为目前您无法为width:auto制作动画。

(将max-width:7rem设置为大于文本长度的内容。)

为了避免使用display: inline-flex一堆对齐CSS,因为这完全对齐它而不使用vertical-align和诸如此类的东西。 (如果这是一个问题,可以更改。)

然后我使用white-space:nowrap将所有文字强制插入一行,以便更流畅地制作动画。

button span {
  max-width: 0;
  -webkit-transition: max-width 1s;
  transition: max-width 1s;
  display: inline-block;
  vertical-align: top;
  white-space: nowrap;
  overflow: hidden;
}
button:hover span {
  max-width: 7rem;
}
<button id="btn">
  Result 
  <span>New result</span>
</button>
<button id="btn">
  Result 
  <span>Different text</span>
</button>

答案 1 :(得分:3)

完成但动画古怪:

已更新 - 现在由于 jaunt 而得到顺畅的结果,他建议将此white-space: nowrap;添加到按钮css

JS Fiddle

button {
  width: 53px;
  height: 21px;
  overflow: hidden;
  -webkit-transition: width 1s;
  transition: width 1s;
  white-space: nowrap; /*this was suggested by jaunt, thanks */
}
button:hover {
  width: 145px;
  -webkit-transition: width 1s;
  transition: width 1s;
}
button:hover::after {
  content: 'Add new result';
}
<h3>This is what I've got so far.</h3>

<button id="btn">
  Result
</button>

答案 2 :(得分:0)

尝试这种方式,您可以随意获得输出。

.hover-value {
    display: inline-block;
    /*visibility: collapse;*/
    -webkit-transition: width 2s;
    transition: width 2s;
    overflow: hidden;
    display:none;
  top:3px;
    position:relative;
}

button:hover .hover-value {
    visibility: visible;
    display: inline-block;
}
<button>
    Result
    <span class="hover-value">Add new result</span>
</button>

答案 3 :(得分:0)

您可以使用font-size产生类似的效果。

将其从0px更改为inherit或e spezific size。

.hover-value {
    font-size: 0px;
    -webkit-transition: font-size 1s;
    transition: font-size 1s;
}

button:hover .hover-value {
    font-size: inherit;
}

请参阅jsfiddle上的Demo

答案 4 :(得分:0)

我希望这会对你有所帮助,我已经在底部分享了jfiddle链接供你参考,但是在这里粘贴相关代码。

body{
    margin:0;
    padding:0;
}

h3{
    margin:0;
    padding:0;
    line-height:1.5em;
}
button{
   text-align:left;
   width:7.5em; 
   overflow:hidden;
   transition:width 1s ease-in-out;
}
button:hover{
     width:20em;
     transition:width 1s ease-in-out;
}
button:focus{
    outline:none;
}
button span.sthGroup{
    display:block;
    width:20em;
    overflow-x:hidden;
}
</style>

<h3>button</h3>
<button class="" type="button">
    <span class="sthGroup">
        <span>some text here</span>
        <span>some additional text here</span>
    </span>
</button>

Sample for your reference