关键帧动画在内部 Div 页面加载时不起作用
Keyframe Animation Not Working On Inner-Div On Page Load
我正在尝试使用这个问题的解决方案:
css3 transition animation on load?
我的 HTML 和 CSS:
@keyframes slideInFromRight {
0% {
transform: translateX(100%);
}
100% {
transform: translateX(0);
}
}
.announcements-container {
position: fixed;
top: 80px;
right: 20px;
z-index: 1001;
display: flex;
flex-direction: column;
width: 300px;
/* animation: 1s ease-out 0s 1 slideInFromRight; */
}
.announcments-1 {
animation: 1s ease-out 0s 1 slideInFromRight;
}
.announcements-2 {
margin-top: 15px;
}
.annoucements-header {
background-color: #1481C3;
color: #ffffff;
font-family: "Proxima Nova Bold";
padding: 7px 10px;
}
.annoucements-close {
position: absolute;
right: 5px;
width: 24px;
height: 36px;
cursor: pointer;
opacity: .85;
}
.annoucements-close:hover {
opacity: 1;
}
.annoucements-close::before,
.annoucements-close::after {
content: '';
width: 24px;
height: 2px;
background: white;
position: absolute;
top: 7px;
left: 0;
}
.annoucements-close::before {
transform: rotate(-45deg);
}
.annoucements-close::after {
transform: rotate(45deg);
}
<body>
<div class="announcements-container">
<div class="announcements-1">
<div class="annoucements-header">
<span class="annoucement-type-quantity">2 School Announcements</span>
<i class="annoucements-close"></i>
</div>
</div>
<div class="announcements-2">
<div class="annoucements-header">
<span class="annoucement-type-quantity">1 Admin Annoucement</span>
<i class="annoucements-close"></i>
</div>
</div>
</div>
</body>
如您所见,当 animation: 1s ease-out 0s 1 slideInFromRight;
应用于内部 div 时它不会执行任何操作。但是,它确实适用于容器 div:
@keyframes slideInFromRight {
0% {
transform: translateX(100%);
}
100% {
transform: translateX(0);
}
}
.announcements-container {
position: fixed;
top: 80px;
right: 20px;
z-index: 1001;
display: flex;
flex-direction: column;
width: 300px;
animation: 1s ease-out 0s 1 slideInFromRight;
}
.announcments-1 {
/*animation: 1s ease-out 0s 1 slideInFromRight;*/
}
.announcements-2 {
margin-top: 15px;
}
.annoucements-header {
background-color: #1481C3;
color: #ffffff;
font-family: "Proxima Nova Bold";
padding: 7px 10px;
}
.annoucements-close {
position: absolute;
right: 5px;
width: 24px;
height: 36px;
cursor: pointer;
opacity: .85;
}
.annoucements-close:hover {
opacity: 1;
}
.annoucements-close::before,
.annoucements-close::after {
content: '';
width: 24px;
height: 2px;
background: white;
position: absolute;
top: 7px;
left: 0;
}
.annoucements-close::before {
transform: rotate(-45deg);
}
.annoucements-close::after {
transform: rotate(45deg);
}
<body>
<div class="announcements-container">
<div class="announcements-1">
<div class="annoucements-header">
<span class="annoucement-type-quantity">2 School Announcements</span>
<i class="annoucements-close"></i>
</div>
</div>
<div class="announcements-2">
<div class="annoucements-header">
<span class="annoucement-type-quantity">1 Admin Annoucement</span>
<i class="annoucements-close"></i>
</div>
</div>
</div>
</body>
但问题在于,我希望 div 依次滑入。如果我 'X' 从顶部 div 出来,我希望第二个 div 向上滑动并取代它的位置,这就是为什么我假设容器 [=51] =] 是必要的。
我还能做些什么来使动画一次应用于子 div 吗?
是否有关于关键帧的东西阻止了 inner-divs 上的动画?用 JavaScript 做这个更好吗?
一开始可能看起来很奇怪,但您的样式表中有错字。 您声明 announcements-1
但使用 announcments-1
设置样式的地方。
因此,做出正确的选择将得到您想要的结果:
@keyframes slideInFromRight {
0% {
transform: translateX(100%);
}
100% {
transform: translateX(0);
}
}
.announcements-container {
position: fixed;
top: 80px;
right: 20px;
z-index: 1001;
display: flex;
flex-direction: column;
width: 300px;
/*animation: 1s ease-out 0s 1 slideInFromRight;*/
}
.announcements-1 {
animation: 1s ease-out 0s 1 slideInFromRight;
}
.announcements-2 {
margin-top: 15px;
}
.annoucements-header {
background-color: #1481C3;
color: #ffffff;
font-family: "Proxima Nova Bold";
padding: 7px 10px;
}
.annoucements-close {
position: absolute;
right: 5px;
width: 24px;
height: 36px;
cursor: pointer;
opacity: .85;
}
.annoucements-close:hover {
opacity: 1;
}
.annoucements-close::before,
.annoucements-close::after {
content: '';
width: 24px;
height: 2px;
background: white;
position: absolute;
top: 7px;
left: 0;
}
.annoucements-close::before {
transform: rotate(-45deg);
}
.annoucements-close::after {
transform: rotate(45deg);
}
<body>
<div class="announcements-container">
<div class="announcements-1">
<div class="annoucements-header">
<span class="annoucement-type-quantity">2 School Announcements</span>
<i class="annoucements-close"></i>
</div>
</div>
<div class="announcements-2">
<div class="annoucements-header">
<span class="annoucement-type-quantity">1 Admin Annoucement</span>
<i class="annoucements-close"></i>
</div>
</div>
</div>
</body>
我正在尝试使用这个问题的解决方案:
css3 transition animation on load?
我的 HTML 和 CSS:
@keyframes slideInFromRight {
0% {
transform: translateX(100%);
}
100% {
transform: translateX(0);
}
}
.announcements-container {
position: fixed;
top: 80px;
right: 20px;
z-index: 1001;
display: flex;
flex-direction: column;
width: 300px;
/* animation: 1s ease-out 0s 1 slideInFromRight; */
}
.announcments-1 {
animation: 1s ease-out 0s 1 slideInFromRight;
}
.announcements-2 {
margin-top: 15px;
}
.annoucements-header {
background-color: #1481C3;
color: #ffffff;
font-family: "Proxima Nova Bold";
padding: 7px 10px;
}
.annoucements-close {
position: absolute;
right: 5px;
width: 24px;
height: 36px;
cursor: pointer;
opacity: .85;
}
.annoucements-close:hover {
opacity: 1;
}
.annoucements-close::before,
.annoucements-close::after {
content: '';
width: 24px;
height: 2px;
background: white;
position: absolute;
top: 7px;
left: 0;
}
.annoucements-close::before {
transform: rotate(-45deg);
}
.annoucements-close::after {
transform: rotate(45deg);
}
<body>
<div class="announcements-container">
<div class="announcements-1">
<div class="annoucements-header">
<span class="annoucement-type-quantity">2 School Announcements</span>
<i class="annoucements-close"></i>
</div>
</div>
<div class="announcements-2">
<div class="annoucements-header">
<span class="annoucement-type-quantity">1 Admin Annoucement</span>
<i class="annoucements-close"></i>
</div>
</div>
</div>
</body>
如您所见,当 animation: 1s ease-out 0s 1 slideInFromRight;
应用于内部 div 时它不会执行任何操作。但是,它确实适用于容器 div:
@keyframes slideInFromRight {
0% {
transform: translateX(100%);
}
100% {
transform: translateX(0);
}
}
.announcements-container {
position: fixed;
top: 80px;
right: 20px;
z-index: 1001;
display: flex;
flex-direction: column;
width: 300px;
animation: 1s ease-out 0s 1 slideInFromRight;
}
.announcments-1 {
/*animation: 1s ease-out 0s 1 slideInFromRight;*/
}
.announcements-2 {
margin-top: 15px;
}
.annoucements-header {
background-color: #1481C3;
color: #ffffff;
font-family: "Proxima Nova Bold";
padding: 7px 10px;
}
.annoucements-close {
position: absolute;
right: 5px;
width: 24px;
height: 36px;
cursor: pointer;
opacity: .85;
}
.annoucements-close:hover {
opacity: 1;
}
.annoucements-close::before,
.annoucements-close::after {
content: '';
width: 24px;
height: 2px;
background: white;
position: absolute;
top: 7px;
left: 0;
}
.annoucements-close::before {
transform: rotate(-45deg);
}
.annoucements-close::after {
transform: rotate(45deg);
}
<body>
<div class="announcements-container">
<div class="announcements-1">
<div class="annoucements-header">
<span class="annoucement-type-quantity">2 School Announcements</span>
<i class="annoucements-close"></i>
</div>
</div>
<div class="announcements-2">
<div class="annoucements-header">
<span class="annoucement-type-quantity">1 Admin Annoucement</span>
<i class="annoucements-close"></i>
</div>
</div>
</div>
</body>
但问题在于,我希望 div 依次滑入。如果我 'X' 从顶部 div 出来,我希望第二个 div 向上滑动并取代它的位置,这就是为什么我假设容器 [=51] =] 是必要的。
我还能做些什么来使动画一次应用于子 div 吗? 是否有关于关键帧的东西阻止了 inner-divs 上的动画?用 JavaScript 做这个更好吗?
一开始可能看起来很奇怪,但您的样式表中有错字。 您声明 announcements-1
但使用 announcments-1
设置样式的地方。
因此,做出正确的选择将得到您想要的结果:
@keyframes slideInFromRight {
0% {
transform: translateX(100%);
}
100% {
transform: translateX(0);
}
}
.announcements-container {
position: fixed;
top: 80px;
right: 20px;
z-index: 1001;
display: flex;
flex-direction: column;
width: 300px;
/*animation: 1s ease-out 0s 1 slideInFromRight;*/
}
.announcements-1 {
animation: 1s ease-out 0s 1 slideInFromRight;
}
.announcements-2 {
margin-top: 15px;
}
.annoucements-header {
background-color: #1481C3;
color: #ffffff;
font-family: "Proxima Nova Bold";
padding: 7px 10px;
}
.annoucements-close {
position: absolute;
right: 5px;
width: 24px;
height: 36px;
cursor: pointer;
opacity: .85;
}
.annoucements-close:hover {
opacity: 1;
}
.annoucements-close::before,
.annoucements-close::after {
content: '';
width: 24px;
height: 2px;
background: white;
position: absolute;
top: 7px;
left: 0;
}
.annoucements-close::before {
transform: rotate(-45deg);
}
.annoucements-close::after {
transform: rotate(45deg);
}
<body>
<div class="announcements-container">
<div class="announcements-1">
<div class="annoucements-header">
<span class="annoucement-type-quantity">2 School Announcements</span>
<i class="annoucements-close"></i>
</div>
</div>
<div class="announcements-2">
<div class="annoucements-header">
<span class="annoucement-type-quantity">1 Admin Annoucement</span>
<i class="annoucements-close"></i>
</div>
</div>
</div>
</body>