CSS宽度过渡根本不起作用

Posted

技术标签:

【中文标题】CSS宽度过渡根本不起作用【英文标题】:CSS width transition not working at all 【发布时间】:2013-10-01 01:50:33 【问题描述】:

您好,我正在尝试在此 nava 内为 spanwidth 设置动画

<nav class="navigator">
   <ul>
    <li><a href="#home">H<span>home</span></a></li>
    <li><a title="What?" href="#what">W<span>what</span></a></li>
    <li><a title="Porfolio" href="#works">P<span>works</span></a></li>
    <li><a title="Who?" href="#who">W<span>who</span></a></li>
    <li><a title="Where?" href="#where">W<span>where</span></a></li>
  </ul>
</nav>

这里是CSS

header nav ul li a
    position: relative;
    width: 40px;
    display: block;
    text-decoration: none;
    font-size: 18px;
    color: #000;

header nav ul li a:hover span
    width: auto;
    overflow: visible;
    text-align: right;

header nav ul li a span
    position: absolute;
    width: 0;
    right: 45px;
    overflow: hidden;
    transition:width 0.25s;
    -webkit-transition:width .25s;
    -moz-transition: width 0.25s;
    font-size: 16px;

如您所见,我正在尝试为width 设置动画,但是span 并没有逐渐增长,而是只显示没有任何transition。 为了让您了解我想要查看的效果,请查看本网站的 nav :http://kitkat.com/

我自己弄了一个nav:http://jsfiddle.net/ZUhsn/ 问题出现的地方。

希望我为您提供了所有信息以尝试解决我的问题。 干杯。

【问题讨论】:

如果您的宽度不是问题,请将跨度宽度从自动更改为固定大小。 是的,我看到它在固定宽度下可以工作,但是如何使它与auto 宽度一起工作? @steo,为什么需要auto 宽度? 100% 会给你想要的效果吗? 【参考方案1】:

试试这个:

header nav ul li a:hover
header nav ul li a:hover span
    width: 100%; /* YOU'LL NEED TO ADJUST THIS, IT CANNOT BE AUTO*/
    overflow: visible;
    text-align: right;


header nav ul li a span
    position: absolute;
    width: 0;
    right: 45px;
    overflow: hidden;
    transition:width 0.25s;
    -webkit-transition:width .25s;
    -moz-transition: width 0.25s;
    font-size: 16px;
    display:block; /*HERE IS MY OTHER CHANGE*/

http://jsfiddle.net/ZUhsn/4/

两个问题:

首先,span 默认情况下是一个内联元素,所以它没有你期望的宽度。通过应用display:block;,我们把它变成了一个有宽度的块级元素。

其次,您正在转换为'auto' 的宽度值。过渡只能跨数值进行动画处理,因此您必须为结束过渡提供带有单位的度量。

【讨论】:

【参考方案2】:

只需在hover 上将width : 100% 更改为您的span

header nav ul li a:hover span
    width : 100%;
    overflow: visible;
    text-align: right;

查看JSFiddle

【讨论】:

【参考方案3】:

以下是您提供的信息的快速重现:

    <style>
    .navigator
    
        position: absolute;
        left: 200px;
        border:1px solid black;
    

    .navigator span
    
        position: absolute;
        -moz-transition: 0.5s;
        opacity: 0;
        right: 0px;
        z-index: -1;
    

    .navigator a
    
        text-decoration: none;
        color: black;
    

    .navigator a:hover span
    
        right: 100%;
        opacity: 1;
        -moz-transition: 0.5s;
    
</style>

<nav class="navigator">
    <ul>
        <li>
            <a href="#home">
                H
                <span>
                    Home
                </span>
            </a>
        </li>
        <li>
            <a title="What?" href="#what">
                W
                <span>
                    What
                </span>
            </a>
        </li>
        <li>
            <a title="Portfolio" href="#works">
                P
                <span>
                    Works
                </span>
            </a>
        </li>
        <li>
            <a title="Who?" href="#who">
                W
                <span>
                    Who
                </span>
            </a>
        </li>
        <li>
            <a title="Where?" href="#where">
                W
                <span>
                    Where
                </span>
            </a>
        </li>
    </ul>


 </nav>

而且它的工作非常完美......

【讨论】:

以上是关于CSS宽度过渡根本不起作用的主要内容,如果未能解决你的问题,请参考以下文章

css3中transition 过渡效果如何只对transform:scale 起作用,对其它像transform: translate不起作用!

背景图像过渡在CSS中不起作用[重复]

CSS悬停过渡不起作用

CSS3:为啥这个过渡不起作用,我该如何解决?

Firefox 的背景图像的 CSS3 过渡不起作用

CSS3颜色过渡在Chrome中不起作用