使用 CSS 过渡的滑动 + 淡入淡出效果

Posted

技术标签:

【中文标题】使用 CSS 过渡的滑动 + 淡入淡出效果【英文标题】:Slide + fade effect using CSS transitions 【发布时间】:2013-01-29 03:13:48 【问题描述】:

我正在尝试使用 CSS 效果或过渡来复制 this effect。

Using animations 我可以为opacity 设置动画,但只能淡入,而height(应该控制幻灯片)似乎根本不起作用:(

我得到的最接近的是using javascript 在我想要动画的元素上设置一个临时类,并在其上应用初始不透明度。但是height 也不起作用。并且动画开始似乎有一点延迟。

还有其他想法吗?


所以我最终使用了 Simon 提到的问题中发布的解决方案:使用 javascript,我将要制作动画的元素包装在我应用动画的“包装器”DIV 中。每次单击标签时,包装器的高度都会从 0 更改为内容 DIV 的高度:

fiddle here

我知道它需要一些 javascript,但想法是用 CSS 制作动画,这就是它的作用。如果 JS 被禁用,切换仍然可以工作...

【问题讨论】:

【参考方案1】:

当涉及的高度之一是自动时,您目前无法在高度上设置动画,您必须设置两个明确的高度。作为对此similar question.的答案发布了一个广泛的解决方法

【讨论】:

【参考方案2】:

我对你的 JS Fiddle 做了修改,我相信这就是你想要的; please see it here.

原来需要在div上指定一个高度(0),别忘了overflow:hidden;这样内容就不会从 div 中“溢出”。但是,您仍然需要 jQuery / Javascript 来切换一个类,但这意味着需要更少的 Javascript。 (我切换了您将在小提琴上看到的“更改”类)

input 
   display:none;

label 
    display:inline-block;

div 
    white-space: pre;
    background: #eee;
    color: #333;
    overflow:hidden;
    height:0;
    opacity:0;
    -moz-transition:height 1s opacity 1s;
    -webkit-transition:height 1s opacity 1s;
    -o-transition:height 1s opacity 1s;
    -ms-transition:height 1s opacity 1s;
    transition:height 1s, opacity 1s;

.changed 
    height:200px;
    opacity: 1;

我在过渡 CSS 属性中添加了一些供应商前缀,因为我不确定您将使用哪种浏览器,而且我使用的是 firefox,所以我需要 -moz- 前缀,哈哈 :)

我能看到的唯一问题是 height:auto 或 height:100% 没有动画,所以你需要指定 ems 或 px...如果这将是一个问题(比如如果内容将是动态的),我建议使用 jQuery 进行高度动画。

【讨论】:

我可以确认这确实有效,你看过 JSFiddle 吗?还有你用的是什么浏览器?

以上是关于使用 CSS 过渡的滑动 + 淡入淡出效果的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Bootstrap 3 Carousel 中更改滑动动画以淡入/淡出过渡

CSS 最简洁hover事件的淡入淡出写法,且不占文档流位置!

在 jQuery 中与 CSS 中的过渡同时使用淡入淡出和淡出

在 css jQuery 中应用淡入淡出到粘性导航的过渡淡入淡出

CSS 过渡 - 仅在悬停时淡入淡出元素

jQuery效果:隐藏显示切换滑动淡入淡出动画