【问题标题】:Width transition of text with CSS not working使用 CSS 的文本的宽度转换不起作用
【发布时间】:2016-12-06 23:40:34
【问题描述】:

我有一个 div,我想在其中显示一个人的姓名。

我只想在正常状态下显示此人的名字。悬停时,姓氏应出现在名字的右侧,其宽度从 0 扩展到正常宽度。所有这些文本都向右对齐。

如果我将转换应用于姓氏范围,它甚至不会显示它。
我也尝试了 max-width (就像一个人在这里做的那样:http://jsfiddle.net/qP5fW/87/ )但它不起作用。 所以我做了一个包装器 div,使用宽度而不是最大宽度,现在它可以工作了,只是它根本不显示过渡。

我怀疑问题出在“auto”属性上,但如果有人知道如何进行转换,我将不胜感激。

这是我的小提琴:https://jsfiddle.net/drywrsy6/

HTML:

<div class="name">
  <span class="first">John</span>
  <div class="last-wrapper">
    <span class="last">Doe</span>
  </div>
</div>

CSS:

.name {
  border: 1px solid lightgrey;
  margin: 10px auto 0px auto;
  padding: 5px;
  width: 300px;
  font-size: 2em;
  text-align: right;
  overflow: hidden;
  white-space: nowrap;
}

.first {
  font-style: italic;
}

.last-wrapper {
  display: inline-block;
  vertical-align: bottom;
  overflow: hidden;
  width: 0;
  transition: all 1s;
}

.last {
  color: red;
}

.name:hover .last-wrapper {
  width: auto;
}

【问题讨论】:

  • 我不知道“有效”和“无效”是什么意思。会发生什么,你想发生什么?
  • 你不能传递具有auto的宽度

标签: html css hover width css-transitions


【解决方案1】:

您可以使用max-width,因为它不适用于width: auto

只需确保 max-width 值足够大以容纳最宽的文本,或者您需要一个脚本在加载时计算它。

由于max-width 会比某些内容宽一些,因此可以有一个转换持续时间和较短的反向时间,以使其在不太宽的文本上看起来更好。

.name {
  border: 1px solid lightgrey;
  margin: 10px auto 0px auto;
  padding: 5px;
  width: 300px;
  font-size: 2em;
  text-align: right;
  overflow: hidden;
  white-space: nowrap;
}

.first {
  font-style: italic;
}

.last-wrapper {
  display: inline-block;
  vertical-align: bottom;
  overflow: hidden;
  max-width: 0;
  transition: all 0.3s;
}

.last {
  color: red;
}

.name:hover .last-wrapper {
  max-width: 100px;
  transition: all 0.7s;
}
<div class="name">
  <span class="first">John</span>
  <div class="last-wrapper">
    <span class="last">Doe</span>
  </div>
</div>

根据评论更新

请注意,正如SimoAmi 所写,"...在缩小、反转动画时,如果您的文本为 100 像素并且您指定最大宽度为 1000 像素,则大部分动画时间都用于缩小空白 900px 差异”

解决此问题的一种方法是详细说明其transition's timing function,其中自定义cubic-bezier 曲线可能是一种选择。

【讨论】:

  • 非常感谢,它成功了!我知道我很接近,并且我怀疑汽车财产是罪魁祸首。但这是我第一次听说你不能过渡到自动...
  • @jeanmarc 不客气,我做了一个小更新,解释如何使过渡看起来更好
  • 这种方法存在一个问题:不知道正确的宽度并指定一个对于文本来说太大的宽度会在缩小、反转动画时引入延迟。如果您的文本为 100 像素并且您指定最大宽度为 1000 像素,则大部分动画时间都用于缩小空白 900 像素的差异(延迟的原因)。
  • @SimoAmi 确实如此,但是当宽度未知并且单独使用 CSS(这是要求的)时,没有其他方法。这一切都在答案中进行了解释,我还明确写道,要克服它,需要一个脚本来计算实际宽度。
  • @SimoAmi 我更新了我的答案,并添加了注释/链接到您的评论 + 添加了注释如何使该部分变得更好。您认为我应该添加更多内容来澄清这种方法的问题吗? ...如果不是,并且编辑很有价值,请考虑给答案投票。
猜你喜欢
  • 2013-10-01
  • 2011-11-03
  • 2012-10-25
  • 2018-03-03
  • 1970-01-01
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多