我可以通过 ":hover" 和 ":active" 以外的选择器触发 CSS 转换吗?

Ron*_*ald 3 css css-selectors css-transitions

我正在通过 sololearn.com 学习 CSS3 中的过渡,其中给出的使用过渡的唯一示例与:hover选择器结合使用。

我能找到的所有其他东西都使用它,或者:active没有解释可以使用哪些其他选择器,或者为什么不显示这两个以外的选择器作为示例。

有没有办法在没有用户交互的情况下开始转换?或者这需要 JavaScript 吗?

And*_*hiu 5

tl;博士

您可以使用任何选择器来启动transition,但您实际上并不需要它。您只需要:

  • 设置transition元素的属性
  • 更改要转换的属性的值。

您可以在不使用 CSS 选择器的情况下完成上述两种操作,这只不过是一种可用于设置 DOM 元素属性的便捷方法。


初步答复

transitions 可以使用任何选择器。但是它们与任何选择器都没有关系,并且您实际上不需要选择器来执行 CSS 转换。

您只需要transition设置以下过渡属性即可工作:

  • transition-duration,
  • transition-delay,
  • transition-timing-function
  • transition-property. (必须是动画过渡到工作)。

此后,每当名为 in 的属性transition-property在两个可动画值之间更改其值时,初始值和设置值之间的更改将根据设置的transition属性发生

无论是什么触发了过渡属性的值的变化,都会发生这种情况

它可以:

  • 更改是因为特定的 CSS 选择器(您定义的)开始或停止应用(匹配元素);
  • 直接使用 JavaScript 进行更改。

或者,当然,通过两者的组合(即使用 JavaScript 来应用一个类,这会改变正在转换的属性的值)

因此,实际上,您的问题的答案是:transitions 可以与任何选择器一起使用,但它们也可以在没有选择器的情况下使用。它们基于 DOM 元素属性值工作,与任何选择器无关

演示 a 的一种常用方法transition是使用:hover状态,因为在选择器之间切换(即控制/演示/观察转换)所需要做的就是使用状态。嗯,……悬停!


在:

例如,有没有办法在没有用户交互的情况下开始转换?

当然有!一个非常基本的例子是<body>在所有页面资源加载完成后添加一个类。
<body>创建元素,它不具有类,当所有资源都已完成加载时,Windowonload事件触发。我们可以使用这个事件来添加类。如果一个过渡被正确定义,body并且因为一个更强的选择器现在应用于元素,过渡属性会发生变化,过渡就会发生。无需任何用户交互。

看到它工作:

window.onload = function() {
  document.querySelector('body').classList.add('loaded')
}
Run Code Online (Sandbox Code Playgroud)
body {
  background-color: #fff;
  transition: background-color 1s linear;
}
.loaded { background-color: #212121;}
Run Code Online (Sandbox Code Playgroud)

您还可以设置一个递归函数,该函数切换元素的状态并在设定的时间后调用自身,在设定的时间后以连续循环有效地将状态切换回:

对于上面的例子,这意味着:

window.onload = toggleBodyClass;
function toggleBodyClass() {
  document.querySelector('body').classList.toggle('loaded');
  setTimeout(toggleBodyClass, 1234);
}
Run Code Online (Sandbox Code Playgroud)
body {
  background-color: #fff;
  transition: background-color 1s linear;
}
.loaded { background-color: #212121;}
Run Code Online (Sandbox Code Playgroud)


如果问题是:“选择器能否在不使用 JavaScript 和/或用户交互的情况下开始/停止应用?” 它真的转化为:
“是否有其他东西触发的转换而不是通常触发 a 的东西transition?” ,可能的答案有: “你为什么想知道?” “是没有JavaScript和/或用户交互有网页浏览?”