19

有没有办法使用-webkit-transitionwith display

我正在使用 CSS来隐藏和display显示第二级导航……但只有on有点不性感……a会很棒(比如)display: nonedisplay: block:hoverease-webkit-transition: display 300ms ease-in;

我知道使用 jQuery 很容易做到这一点,但我目前正在尝试使用 CSS3 设置所有内容(我知道:并非所有浏览器都支持它,但这与我目前正在从事的这个项目无关)

这是一些代码和结构:(li.menu1有一个:hoverwith section.nav-menu1 {display: block;}

<ul>
    <li class="menu1"><a href="#">Menu 1</a>
        <section class="nav-menu1">
            <h1 class="none">Level 2 Overlay</h1>
            <nav>
                <h2 class="none">Menu 1 Navigation</h2>
                <ul>
                    <li><a href="#">Menu 1 Level 2-1</a></li>
                    <li><a href="#">Menu 1 Level 2-2</a></li>
                    <li><a href="#">Menu 1 Level 2-3</a></li>
                </ul>
            </nav>
        </section>
    </li>
</ul>
4

4 回答 4

19

所以我不确定我是否看到所有的部分都放在一起。您想要动画不透明度和可见性,可见性有延迟,因此不透明度在触发之前完成;

opacity: 0;
-moz-transition: opacity .25s linear, visibility .1s linear .5s;
-webkit-transition: opacity .25s linear, visibility .1s linear .5s;
-o-transition: opacity .25s linear, visibility .1s linear .5s;
transition: opacity .25s linear, visibility .1s linear .5s;
visibility: hidden;

opacity: 1;
visibility: visible;

可见性将等待 0.5 秒,然后切换到隐藏。如果您希望它双向淡化,您甚至可以关闭一侧的可见性转换。(这样当淡入时,元素立即可见,而不是等待 0.5 秒和过渡。)

于 2011-03-08T04:26:12.110 回答
13

您应该使用heightwidth转换以显示和隐藏二级菜单。Display转换不支持属性。

ODC上有一篇文章与您的需求类似。此外,我对其进行了一些修改,以使其看起来更像菜单项。在 Opera 10.7 中完美运行,在 Firefox 3.6.12 中没有过渡,在 Chrome 7.0.517.41 中根本没有。

我希望这将作为您自己的动画菜单的起点有用。

更新 1: 您的菜单带有轻松过渡。可能,我的结构有问题。问题是过渡不适用于auto,因此您必须手动指定最终高度。

更新 2: 使用不透明度作为过渡属性。在不可见元素上设置可见性:隐藏和可见性:可见上可见。这将防止不可见的可点击链接。另外,可见-不可见过渡不起作用,不知道为什么。必须更多地工作。

例子

于 2010-11-15T05:10:53.900 回答
0

您应该为此使用不透明过渡,而不是显示过渡。Display:none 完全从布局中删除一个元素 - 我认为您希望它在那里,但不可见。

于 2010-11-14T17:25:39.170 回答
-2

使用overflow:hidden > overflow:visible,效果更好,我这样使用:

example {
 #menu ul li ul {

    background-color:#fe1c1c;
    width:85px;
    height:0px;
    opacity:0;
    box-shadow:1px 3px 10px #000000;
    border-radius:3px;
    z-index:1;
    -webkit-transition:all 0.5s ease;
    -moz-transition:all 0.6s ease;

}

 #menu ul li:hover ul  {

        overflow:visible;
    opacity:1;
    height:140px;
}

比可见更好,因为overflow:hidden行为完全像 a display:none

于 2012-09-09T01:52:38.997 回答