直到动画完成后,CSS旋转对象才会旋转

时间:2016-06-15 22:43:45

标签: html css css-animations keyframe

我正在CSS中创建一个简单的复选框覆盖,并尝试添加动画以使其显示。因为复选标记只是一个旋转的矩形,底部和侧面有边框,所以当我为它设置动画时,直到动画完成后它才会实际旋转。我尝试将<h3>Checkboxes</h3> <div> <input id="checkbox-1" class="checkbox" name="checkbox-1" type="checkbox" checked> <label for="checkbox-1" class="checkbox-label">First Choice</label> </div> 添加到动画关键帧中,但出于某种原因,当我这样做时,它根本没有动画。 如何确保复选标记在整个动画过程中以及完成后保持旋转45º?

演示:https://jsfiddle.net/brandonscript/L09h7jng/

HTML

@-webkit-keyframes bounce {
  0% {
    -webkit-transform: scale(.25);
    opacity: .8;
  }
  50% {
    -webkit-transform: scale(1.4);
    opacity: .25;
  }
  100% {
    -webkit-transform: scale(1);
    opacity: .8;
  }
}

@keyframes bounce {
  0% {
    transform: scale(.25);
    opacity: .8;
  }
  50% {
    transform: scale(1.4);
    opacity: 1.4;
  }
  100% {
    transform: scale(1);
    opacity: 1;
  }
}

.checkbox {
  position: absolute;
  display: none;
}

.checkbox + label {
  position: relative;
  display: block;
  padding-left: 30px;
  cursor: pointer;
  vertical-align: middle;
}

.checkbox + label:hover:before {
  animation-duration: 0.4s;
  animation-fill-mode: both;
  animation-name: hover-color;
}

.checkbox + label:before {
  position: absolute;
  top: 0;
  left: 0;
  display: inline-block;
  width: 20px;
  height: 20px;
  content: '';
  border: 1px solid $color-piston;
}

.checkbox + label:after {
  position: absolute;
  display: none;
  content: '';
}

.checkbox:checked + label:before {
  //animation-name: none;
}

.checkbox:checked + label:after {
  display: block;
}

.checkbox + label:before {
  border-radius: 3px;
}

.checkbox + label:after {
  top: 2px;
  left: 7px;
  box-sizing: border-box;
  width: 6px;
  height: 12px;
  border-width: 2px;
  border-style: solid;
  border-color: $color-success;
  border-top: 0;
  border-left: 0;
  transition: all .2s;
  -webkit-animation: bounce 0.3s;
  -webkit-animation-iteration-count: 1;
  -webkit-animation-fill-mode: forward;
  -moz-animation: bounce 0.3s;
  -moz-animation-iteration-count: 1;
  -moz-animation-fill-mode: forward;
  animation: bounce 0.3s;
  animation-iteration-count: 1;
  animation-fill-mode: forward;
  transform: rotate(45deg);
}

.checkbox:checked + label:before {
  border: 1px solid $color-piston;
  background: #FFFFFF;
}

(S)CSS

$ color-success:#12C376;

{{1}}

2 个答案:

答案 0 :(得分:1)

将你的轮换放在关键帧内(对webkit和普通版都这样做):

@keyframes bounce {
  0% {
    transform: scale(.25) rotate(15deg);
    opacity: .8;
  }
  50% {
    transform: scale(1.4);
    opacity: 1.4;
  }
  100% {
    transform: scale(1) rotate(45deg);
    opacity: 1;
  }
}

:after也应该应用了旋转:

.checkbox + label:after {
  ...
  transform: rotate(45deg);
}

小提琴:https://jsfiddle.net/L09h7jng/4/

答案 1 :(得分:0)

尝试将旋转(45度)放到动画进度中所有变换的每一行......

@-webkit-keyframes bounce {
  0% {
    -webkit-transform: scale(.25) rotate(45deg);
    opacity: .8;
  }
  50% {
    -webkit-transform: scale(1.4) rotate(45deg);
    opacity: 1.4;
  }
  100% {
    -webkit-transform: scale(1) rotate(45deg);
    opacity: 1;
  }
}

@keyframes bounce {
  0% {
    transform: scale(.25) rotate(45deg);
    opacity: .8;
  }
  50% {
    transform: scale(1.4) rotate(45deg);
    opacity: 1.4;
  }
  100% {
    transform: scale(1) rotate(45deg);
    opacity: 1;
  }
}