Захотелось мне поиграть с анимацией. Сегодня пробовала использовать @keyframes. Заинтересовало меня в этом правиле то, что можно прописать достаточно интересную анимацию, а потом назначать ее разным элементам с разным временем и эффектами.

Каждое состояние в анимации называется ключевым кадром и мы можем указать в какой момент какое свойство элемента следует изменить. Время указываем в процентах, принимая за 100% полную продолжительность цикла (без учета эффектов перехода)

Например, анимация моргания смайла в улыбке возможна такая:

@keyframes eye {
   85% { transform: scaleY(0.1); }
   90% { transform: none; }   
 }

85% цикла мы применяем свойство transform: scaleY(0.1); — сужаем глаза. Дальше за 5% распахиваем — убираем трансформацию и 10% ничего не трогаем — глаза открыты
Оставлю здесь код моего улыбчивого смайла. Я не художник) Возможно стоит научить его улыбаться на hover? Идея взята на сайте WebReference

@keyframes eye {
  85% { transform: scaleY(0.1); }
  90% { transform: none; }     
}

@keyframes mouth {
  
  0% { transform: none; }
  5% { transform: scaleY(0.3); }
}

.smile{
  width: 100px;
  height: 100px;
  border-radius: 50%;
  background: yellow;
  border: 2px solid black;    
  margin: 10px auto;
  position: relative;
}
.eye{
   content: '';
   display: block;
   width: 15px;
   height: 30px;
   border-radius: 50%;
   background: #000;
   position: absolute;
   top: 30px;
   animation: eye 3s ease-in-out infinite;
}
.eye-left{
  left: 30px;
  
}

.eye-right{
  right: 30px;
}

.mouth{
  display: block;
  width: 30px;
  height: 20px;
  border-radius: 50%;
  border-bottom: 3px solid red;
  position: absolute;
  bottom: 20px;
  left: 35px;
  animation: mouth 3s ease-in-out infinite;
}

</style>

<div class="smile">
    <span class="eye eye-left"></span>
    <span class="eye eye-right"></span>
    <span class="mouth"></span>
</div>

Для запуска всей этой красоты используется свойство animation, его не рекомендуют использовать вместо transition без необходимости, но поиграть-то можно 😉 Правило вроде бы простое: прямой переход из пункта А в пункт Б — transition, с посещением пунктов В, Г и Д — это уже animation.

После смайла я захотела порисовать кольцо загрузки. Первый вариант просто крутит с остановками, а второй пытается изобразить затухание колебания при наведении. Опять же не художник. Физику не считала.

@keyframes loading {
0% { transform: none;}
100% { transform: rotate(360deg); }
}
...
animation: loading 3s ease-in-out infinite;
@keyframes loading-2 {
0% { transform: none; }
2% { transform: rotate(360deg); }
6% { transform: none; }
14% { transform: rotate(300deg); }
30% { transform: none; }
62% { transform: rotate(200deg); }
}
...
animation: loading-2 10s linear infinite;

Все делала на JSFiddle и скопировала на codepen в поисках удобного варианта поделиться