css 动画新魔法

CSS 即将推出两项新功能,它们将使我们在实现动画时更容易地避免使用 JavaScript:

  • 为了实现进入/退出动画,在 display: none; 之间进行动画转换。
  • 在元素的固有尺寸(如 height: auto;)之间进行动画转换。

传统上,如果要将某个元素以动画形式从屏幕中移入或移出(而不是仅仅在视觉上将其隐藏),JavaScript 必须在等待动画或过渡完成后将该元素从页面中移除。现在不再需要了!

当这些新功能出现在浏览器中时,您就可以像使用其他属性一样,使用关键帧动画对 display: none 制作动画了:

.item {
  animation: fade-out 0.5s forwards;
}

@keyframes fade-out {
  100% {
    opacity: 0;
    display: none;
  }
}

真不错

你也可以用 CSS 过渡来做同样的事情,但你需要将新的transition-behavior 属性设置为allow-discrete,这样才能起作用。我可以看到类似 * {transition-behavior: allow-discrete} 的内容将来会成为我重置 CSS 的一部分,以便默认启用这种行为。

但相反的情况呢?您有一个当前未显示的元素,而您想在它出现时将其动画化。同样,我们通常会使用 JavaScript 来处理这种情况,以确保初始样式设置正确,并且元素在动画化之前不会在页面上显示。

现在,我们可以像这样指定起始样式:

.item {
	@starting-style {
    opacity: 0;
	}
	
	opacity: 1;
  transition: opacity 0.5s;
}

优雅而实用。如果你想了解这些新功能的更多信息,我建议你查看 Chrome for Developers 博客上的这篇文章

CSS 的第二项新功能是可以根据元素的固有尺寸进行动画调整。最常见的使用案例是可折叠区域:我们希望可折叠区域在关闭时高度为 height: 0px ,而在打开时其高度应根据内容自动调整。

由于 CSS 一直以来都不允许动画调整为 height: auto;,因此我们不得不使用 JavaScript 来测量内容的高度,并根据该像素值调整动画。

当该功能在浏览器中出现时,我们就可以这样实现了:

.item { 
  height: 0; 
}

.item.open { 
  height: calc-size(auto);
}

这个神奇的功能来自于 calc-size() 函数,这是一个奇怪的应用程序接口选择–为什么不直接使用现有的 calc() 函数呢?这里是 CSS 工作组对该功能草案的评论,其中解释了原因

这些功能只是 CSS 不断发展、变得更强大、更具表现力的众多方式中的一小部分。要了解即将推出的其他所有新功能,请观看 Una Kravets 在 Google I/O 上制作的精彩视频

Una 说,我们正处于网络用户界面的黄金时代,我对此深表赞同。

 

阅读余下内容
 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注


京ICP备12002735号