tl;博士
您可以使用任何选择器来启动transition,但您实际上并不需要它。您只需要:
- 在元素上设置
transition 属性
- 更改要转换的属性的值。
您可以在不使用 CSS 选择器的情况下完成上述两种操作,这不过是一种用于设置 DOM 元素属性的便捷方法。
初步回答
transitions 适用于任何选择器。但它们与任何选择器都没有关系,而且您实际上并不需要选择器来执行 CSS 转换。
transition 工作所需的只是设置以下转换属性:
-
transition-duration,
-
transition-delay,
transition-timing-function
-
transition-property。 (必须是动画才能过渡到工作)。
此后,每当transition-property 中命名的属性在两个可动画值之间更改其值时,初始值和设置值之间的更改将根据设置的transition 属性发生。 p>
无论究竟是什么触发了已转换属性的值更改,都会发生这种情况
它可以:
- 更改,因为特定的 CSS 选择器(您定义的)开始或停止应用(匹配元素);
- 使用 JavaScript 直接更改。
或者,当然,通过两者的结合(即使用 JavaScript 应用一个类,这会改变正在转换的属性的值)
因此,实际上,您的问题的答案是:transitions 可以与任何选择器一起使用,但它们也可以在没有选择器的情况下使用。它们基于 DOM 元素属性值工作,与任何选择器无关。
演示transition 的常用方法是使用:hover 状态,因为在选择器之间切换(即控制/演示/观察转换)所需要做的就是。嗯,...悬停!
开启:
例如,有没有一种方法可以在没有用户交互的情况下开始转换?
当然有!一个非常基本的示例是在所有页面资源完成加载后在<body> 上添加一个类。
当<body> 元素被创建时它没有类并且当所有资源都完成加载时,Window 的onload 事件触发。我们可以使用这个事件来添加类。如果在body 上正确定义了过渡,并且由于现在在元素上应用了更强大的选择器,transitioned 属性发生了变化,那么过渡将会发生。无需任何用户交互。
看看它的工作原理:
window.onload = function() {
document.querySelector('body').classList.add('loaded')
}
body {
background-color: #fff;
transition: background-color 1s linear;
}
.loaded { background-color: #212121;}
您还可以设置一个递归函数,该函数切换元素的状态并在设定的时间后调用自身,在设定的时间后有效地在连续循环中切换状态:
对于上面的例子,这意味着:
window.onload = toggleBodyClass;
function toggleBodyClass() {
document.querySelector('body').classList.toggle('loaded');
setTimeout(toggleBodyClass, 1234);
}
body {
background-color: #fff;
transition: background-color 1s linear;
}
.loaded { background-color: #212121;}
如果问题是:“选择器可以在不使用 JavaScript 和/或用户交互的情况下开始/停止应用吗?” 它实际上可以转化为:
“是否有过渡由通常触发transition的其他东西触发?”,可能的答案有:
“你为什么想知道?” 到 “是否有没有 JavaScript 和/或用户交互的网页浏览?”