Поскольку анимации загрузки CSS уже поддерживаются всеми современными моделями браузеров, использование анимированного .gif для индикации загрузки страницы или ее элемента больше не требуется. Кроме того, сами .gif-изображения зачастую весят достаточно много и еще больше тормозят загрузку страницы. Этот спиннер будет работать во всех современных браузерах, в том числе в IE10 и выше. До изучения этой статьи рекомендуется ознакомиться с использования простых CSS-анимаций загрузки страницы.

Создание разметки спиннера: CSS анимация загрузки

Наш спиннер будет представлять собой простой круг, вращающийся вокруг своего собственного центра. Разметка спиннера - это всего лишь один элемент div. Наш спиннер будет псевдоэлементом :: before (вы также можете использовать :: after) нашего div.

<div class="spinner"></div>

Стили SCSS для статичного спиннера

До написания анимаций для нашего спиннера сперва просто напишем стили для него.

.spinner {
// Высота установлена для демонстрации
height: 100vh; 
position: relative;
&::before {
content: "";
height: 60px;
width: 60px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border: solid 5px #eee;
border-bottom-color: #0097a7;
border-radius: 50%;
}
}

Что мы получаем:

Создан псевдоэлемент с абсолютным позиционированием. Родительский элемент получает такую же ширину и высоту, а затем псевдоэлементу добавляется border-radius: 50% чтобы из квадрата получить, собственно, круг.

Одной из границ меняем цвет на отличный от основного.

Теперь приступим к анимации спиннера:

Мы будем использовать CSS-анимацию загрузки, уже имеющуюся в CSS3 для вращения нашего спиннера.

@keyframes spinner {
0% {
transform: translate(-50%, -50%) rotate(0deg);
}
100% {
transform: translate(-50%, -50%) rotate(360deg);
}
}
.spinner {
// Высота установлена для демонстрации
height: 100vh; 
position: relative;
opacity: 1;
transition: opacity linear 0.1s;
&::before {
content: "";
height: 60px;
width: 60px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border: solid 5px #eee;
border-bottom-color: #0097a7;
border-radius: 50%;
animation: 2s linear infinite spinner;
will-change: transform;
}
}

Теперь мы добавили:

  • Простой кейфрейм CSS-анимации, который вращает спиннер по кругу.
  • Анимация преобразует кейфрейм так, что он целиком проигрывается в течение 2 секунд. Значение linear замедления анимации обеспечивает плавное и непрерывное вращение. Также Вы можете заметить, что кейфрейм также включает transform: translate (-50%, -50%), потому что он используется для централизованного позиционирования спиннера. Это необходимо поскольку анимация перезаписывает значения transition по умолчанию.
  • Используя will-change: transform мы сообщаем браузеру, что этот элемент будет преобразован, и, следовательно, оптимизируем анимацию.
  • Мы также добавили opacity и transition элементу, чтобы, когда Ваш контент будет загружен, можно было плавно скрыть спиннер.

Теперь наш CSS-спиннер готов! Осталось лишь написать для него SCSS-миксин.

Создание SCSS-миксина для спиннера загрузки контента

CSS Анимация закрузкиЦелью этого миксина является создание гибкого, простого в реализации спиннера загрузки на чистом CSS. Зададим миксину три аргумента:

  • $activeColor: цвет для одной границы, который отличается от остальных трех.
  • $selector: псевдоэлемент, к которому будет применен спиннер.
  • $time: продолжительность анимации. Сколько времени требуется, чтобы вертушка сделала один полный оборот.
@mixin loading-spinner($color: "#EF6565", $selector: "&::before", $time: 1.5s) {
@keyframes spinner {
0% {
transform: translate(-50%, -50%) rotate(0deg);
}
100% {
transform: translate(-50%, -50%) rotate(360deg);
}
}
&.-loaded {
opacity: 0;
transition: opacity linear 0.1s;
}
#{$selector} {
content: "";
height: 60px;
width: 60px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
border: solid 5px #eee;
border-bottom-color: #{$color};
border-radius: 50%;
animation: 2s linear infinite spinner;
will-change: transform;
}
}
.spinner {
@include loading-spinner();
}

Таким образом мы создали простой и быстрый спиннер с анимацией загрузки контента, не прибегая к использованию JS-кода. Пользуйтесь всеми возможностями CSS и не перегружайте свою страницу!

Добавить комментарий

Ограниченный HTML

  • Допустимые HTML-теги: <a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • Строки и абзацы переносятся автоматически.
  • Адреса веб-страниц и email-адреса преобразовываются в ссылки автоматически.