У меня есть простая анимация с использованием ключевых кадров и преобразований, в частности rotateX
и rotateZ
.Анимация работает так, как я ожидаю (по крайней мере, в Chrome, другие еще не пробовали).
Теперь, когда у меня есть эта работа, я хочу скрыть анимированные элементы, если они превышают своих родителей.Я положил нормальный overflow: hidden;
на родителя.
Тогда rotateX
просто перестает отображаться.rotateZ
продолжается ожидаемым.Как ни странно, похоже, что элемент продолжает трансформироваться при проверке, но дочерние элементы учитывают только rotateZ
.
@keyframes stir {
0% {
transform: rotateX(0deg) rotateZ(-25deg);
}
25% {
transform: rotateX(3deg) rotateZ(0deg);
}
50% {
transform: rotateX(0deg) rotateZ(25deg);
}
75% {
transform: rotateX(-3deg) rotateZ(0deg);
}
100% {
transform: rotateX(0deg) rotateZ(-25deg);
}
}
* {
box-sizing: border-box;
}
.mixing {
position: relative;
width: 80px;
padding-top: 50px;
margin: 50px auto;
}
.mixing .rim,
.mixing .rimb {
width: 80px;
height: 20px;
border: 2px solid #000;
border-radius: 40px / 10px;
background: #fff;
position: relative;
z-index: 5;
}
.mixing .rimb {
z-index: 3;
}
.mixing .sides {
position: relative;
background: #fff;
height: 8px;
width: 100%;
margin: -18px 0 0;
border-left: 2px solid #000;
border-right: 2px solid #000;
top: 10px;
z-index: 4;
}
.mixing .bowl {
width: 70px;
height: 40px;
margin: -16px auto 0;
border: 2px solid #000;
background: #fff;
border-radius: 0 0 30px 30px / 0 0 40px 40px;
}
.mixing .spoon-box {
width: 120px;
height: 70px;
border-radius: 0 0 60px 60px / 0 0 20px 20px;
position: absolute;
top: -2px;
left: -20px;
z-index: 10;
perspective: 25px;
transform-style: preserve-3d;
}
.mixing .spoon {
position: absolute;
left: 50%;
margin-left: -9px;
bottom: -50px;
transform-origin: center bottom;
animation: stir 2s infinite;
animation-timing-function: linear;
}
.mixing .spoon .stick {
height: 55px;
width: 8px;
border: 2px solid #000;
border-radius: 3px 3px 0 0;
border-width: 2px 2px 0px;
background: #fff;
margin: 8px 5px -4px;
position: relative;
z-index: 2;
}
.mixing .spoon .cup {
position: relative;
height: 22px;
width: 18px;
margin-bottom: 40px;
border: 2px solid #000;
background: #fff;
border-radius: 9px / 11px;
}
.broken .spoon-box {
overflow: hidden;
}
<div class="mixing">
<div class="rim"></div>
<div class="sides"></div>
<div class="rimb"></div>
<div class="bowl"></div>
<div class="spoon-box">
<div class="spoon">
<div class="stick"></div>
<div class="cup"></div>
</div>
</div>
</div>
<div class="mixing broken">
<div class="rim"></div>
<div class="sides"></div>
<div class="rimb"></div>
<div class="bowl"></div>
<div class="spoon-box">
<div class="spoon">
<div class="stick"></div>
<div class="cup"></div>
</div>
</div>
</div>
https://codepen.io/freer4/pen/jJNEpP