Javascript 使用变换和不透明度触发 CSS 转换在 Firefox 71 中不起作用
Javascript triggered CSS transition using transform and opacity not working in Firefox 71
使用Firefox 71.
我想触发一个过渡,其中输入按钮(实际上是 div,id=target
,从右侧滑入并同时淡入。
幻灯片效果很好,但不透明现象没有发生。显然我必须从 JavaScript
触发这个,因为 div 不在屏幕上所以 pseudo class CSS
触发器是无用的。
我已经用动画和 @keyframes
做到了这一点,效果很好,但我喜欢过渡的简洁性。任何帮助和进一步的帮助将不胜感激。
史蒂夫
<!DOCTYPE html>
<html>
<head>
<title>Test Transition</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style type="text/css">
body{
padding: 0;
margin: 0;
font-family: Arial;
font-size: 48pt;
box-sizing: border-box;
}
#target{
position: absolute;
width: 200px;
height: 200px;
right: -212px;
bottom: 200px;
border: 6px solid darkblue;
border-radius: 100px;
opacity: 0;
transition-property: transform, opacity;
transition-duration: 1s;
transition-timing-function: ease-in;
}
#inner_target{
position: relative;
text-align: center;
}
.start{
transform: translateX(-412px);
opacity: 1;
}
</style>
</head>
<body>
<button id="launch" type="button">Launch</button>
<div id="target">
<p id="inner_target">Enter</p>
</div>
<script type="text/javascript">
let launch = document.getElementById('launch');
let target = document.getElementById('target');
launch.addEventListener('click', startAnimation);
function startAnimation(e) {
target.classList.toggle('start');
}
</script>
</body>
</html>
这是因为 CSS 特殊性。您正在使用 ID #target
来设置元素的样式,然后应用 CSS class start
使其移动和淡入。原始的 CSS 块因为 #target
包含起始 opacity
,但没有起始 transform
。在设置 start
class 之后,在元素上设置 transform
并移动。 opacity
也设置了,但是没有效果。原因是原来的opacity
是用ID设置的,新的opacity
是用class设置的,在CSS中ID比[=38更具体=]是的。因此,原来的 opacity
胜出,什么也没有发生。
更改代码以使用 class 而不是 ID 来设置目标元素的样式:
<div id="target" class="mytarget">
...
</div>
并将您的 CSS 中的 ID 更改为 class:
.mytarget {
...
opacity: 0.0;
transition-property: transform, opacity;
transition-duration: 1s;
transition-timing-function: ease-in;
}
您的 opacity
转换现在可以工作了 (CodePen)。
使用Firefox 71.
我想触发一个过渡,其中输入按钮(实际上是 div,id=target
,从右侧滑入并同时淡入。
幻灯片效果很好,但不透明现象没有发生。显然我必须从 JavaScript
触发这个,因为 div 不在屏幕上所以 pseudo class CSS
触发器是无用的。
我已经用动画和 @keyframes
做到了这一点,效果很好,但我喜欢过渡的简洁性。任何帮助和进一步的帮助将不胜感激。
史蒂夫
<!DOCTYPE html>
<html>
<head>
<title>Test Transition</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style type="text/css">
body{
padding: 0;
margin: 0;
font-family: Arial;
font-size: 48pt;
box-sizing: border-box;
}
#target{
position: absolute;
width: 200px;
height: 200px;
right: -212px;
bottom: 200px;
border: 6px solid darkblue;
border-radius: 100px;
opacity: 0;
transition-property: transform, opacity;
transition-duration: 1s;
transition-timing-function: ease-in;
}
#inner_target{
position: relative;
text-align: center;
}
.start{
transform: translateX(-412px);
opacity: 1;
}
</style>
</head>
<body>
<button id="launch" type="button">Launch</button>
<div id="target">
<p id="inner_target">Enter</p>
</div>
<script type="text/javascript">
let launch = document.getElementById('launch');
let target = document.getElementById('target');
launch.addEventListener('click', startAnimation);
function startAnimation(e) {
target.classList.toggle('start');
}
</script>
</body>
</html>
这是因为 CSS 特殊性。您正在使用 ID #target
来设置元素的样式,然后应用 CSS class start
使其移动和淡入。原始的 CSS 块因为 #target
包含起始 opacity
,但没有起始 transform
。在设置 start
class 之后,在元素上设置 transform
并移动。 opacity
也设置了,但是没有效果。原因是原来的opacity
是用ID设置的,新的opacity
是用class设置的,在CSS中ID比[=38更具体=]是的。因此,原来的 opacity
胜出,什么也没有发生。
更改代码以使用 class 而不是 ID 来设置目标元素的样式:
<div id="target" class="mytarget">
...
</div>
并将您的 CSS 中的 ID 更改为 class:
.mytarget {
...
opacity: 0.0;
transition-property: transform, opacity;
transition-duration: 1s;
transition-timing-function: ease-in;
}
您的 opacity
转换现在可以工作了 (CodePen)。