CSS 使用 JS 添加 class 时未应用过渡
CSS transition not being applied on adding a class with JS
所以我正在尝试做一些我确定我以前一定做过无数次的事情,但由于某种原因,这次没有用。
我有以下 html 的位:
<span class="toggle-nav"><span>Toggle navigation</span></span>
和以下 css:
.toggle-nav {
position absolute
top:1rem;
left:1rem;
z-index 10
width: 4rem;
height: 3.5rem;
cursor:pointer;
background: $primary;
span
span:before
span:after {
content: '';
position: absolute;
left:0;
top:0;
display: block;
text-indent: -9999px;
background-color: #fff;
height:.5rem;
width: 100%;
transition: background-color .5s ease-in-out, transform .5s ease-in-out
}
span {
top: .5rem;
width: 3rem;
margin-left .5rem
}
.open & {
span {
background-color: transparent;
&:after {
transform: rotate(-45deg);
top: 1rem;
}
&:before {
transform: rotate(45deg);
}
}
}
}
我有一些 JS 可以将 'open' 的 class 切换到 toggle-nav 的父级。正在应用所有需要的样式,它看起来正是我想要的样子。但是,由于某种原因,过渡部分被完全忽略了。这是漫长的一天,我确定我只是错过了一些非常简单但我看不到的东西。有人有什么想法吗?
编辑:这是一个代码笔,因此您可以更清楚地看到发生了什么:
http://codepen.io/alexward1981/pen/PZVBZV
令人沮丧的是,codepen 可以工作,但我的网站没有,所以我猜是其他东西干扰了它。
这是回流的问题,另一个函数在点击时将它移动到它的父元素,以防止另一个 class 对其应用模糊。我已经重组了代码,所以它不再需要这样做了。问题已解决。
顺便说一句,对于任何来到这里并认为 "well how do I fix a reflow?" 这很简单的人。
而不是:
el.addClass('open');
就这样:
setTimeout(
function() {
el.addClass('open');
}, 0
);
removeClass 部分也是如此。
所以我正在尝试做一些我确定我以前一定做过无数次的事情,但由于某种原因,这次没有用。
我有以下 html 的位:
<span class="toggle-nav"><span>Toggle navigation</span></span>
和以下 css:
.toggle-nav {
position absolute
top:1rem;
left:1rem;
z-index 10
width: 4rem;
height: 3.5rem;
cursor:pointer;
background: $primary;
span
span:before
span:after {
content: '';
position: absolute;
left:0;
top:0;
display: block;
text-indent: -9999px;
background-color: #fff;
height:.5rem;
width: 100%;
transition: background-color .5s ease-in-out, transform .5s ease-in-out
}
span {
top: .5rem;
width: 3rem;
margin-left .5rem
}
.open & {
span {
background-color: transparent;
&:after {
transform: rotate(-45deg);
top: 1rem;
}
&:before {
transform: rotate(45deg);
}
}
}
}
我有一些 JS 可以将 'open' 的 class 切换到 toggle-nav 的父级。正在应用所有需要的样式,它看起来正是我想要的样子。但是,由于某种原因,过渡部分被完全忽略了。这是漫长的一天,我确定我只是错过了一些非常简单但我看不到的东西。有人有什么想法吗?
编辑:这是一个代码笔,因此您可以更清楚地看到发生了什么:
http://codepen.io/alexward1981/pen/PZVBZV
令人沮丧的是,codepen 可以工作,但我的网站没有,所以我猜是其他东西干扰了它。
这是回流的问题,另一个函数在点击时将它移动到它的父元素,以防止另一个 class 对其应用模糊。我已经重组了代码,所以它不再需要这样做了。问题已解决。
顺便说一句,对于任何来到这里并认为 "well how do I fix a reflow?" 这很简单的人。
而不是:
el.addClass('open');
就这样:
setTimeout(
function() {
el.addClass('open');
}, 0
);
removeClass 部分也是如此。