Круговой индикатор процесса на CSS
Что будем делать?
Такие индикаторы загрузки вы наверняка встречали, особенно на Flash сайтах. Это сектор круга, который становится все больше и больше, пока не превратиться в завершенный круг.
На первый взгляд задача кажется простой: делаем круг, вращаем его и скрываем часть за маской. Но на деле все оказывается несколько сложнее. CSS не подготовлен для решения таких задач, даже при использовании препроцессоров наподобие SASS & Compass. Мы всегда боремся, когда приходится делать различные формы, а особенно при определении стилей и анимации для них. Большая часть рабочего времени уходит на то. чтобы получить что-то работающее, а в жертву приносится семантичность кода и его поддержка.
Зачем делаем?
Наиболее вероятное использование таких элементов - таймеры. Но данную концепцию можно использовать, чтобы сделать круговую диаграмму на одном CSS.
Хотя есть несколько изумительных инструментов для управления круговыми диаграммами (в основном, на JavaScript), мы тем не менее сделаем такой элемент только на CSS и даже анимируем его с помощью нескольких трюков.
Семантичность кода будет так себе! Но сопровождение можно сделать достаточно удобным.
HTML
Нам нужно 3 разных элемента:
- spinner: половинка круга, которая будет вращаться;
- mask: данный элемент скрывает вращающийся круг в ходе первых 50% анимации;
- filler: данный элемент заполняет круг в ходе последних 50% анимации.
И все три элемента должны иметь одного родителя для абсолютного позиционирования:
<div class="wrapper"> <div class="spinner pie"></div> <div class="filler pie"></div> <div class="mask"></div> </div>
Так как spinner и filler являются двумя половинками одного круга, то мы будем использовать для них класс .pie.
CSS
Чтобы сохранить код урока четким и понятным, префиксы производителей браузеров опущены.
Родительский элемент получает размеры и абсолютное позиционирование контекста для таймера:
.wrapper {
width: 250px;
height: 250px;
position: relative;
background: white;
}
Важно, чтобы ширина и высота были равны, чтобы получить круг и все работало.
Элементы "spinner" и "filler" используют данный код CSS:
.pie {
width: 50%;
height: 100%;
position: absolute;
background: #08C;
border: 10px solid rgba(0,0,0,0.4);
}
Они имеют ширину равную 50% родительского элемента, так они являются двумя частями одного круга, а их высота равна высоте родительского элемента. Также мы определяем для них одинаковый цвет и рамку.
Элемент "spinner"
.spinner {
border-radius: 125px 0 0 125px;
z-index: 200;
border-right: none;
animation: rota 10s linear infinite;
}
Делаем его полукругом с помощью свойства border-radius на верхнем левом и нижнем левом углах. Также определяем положительное значение для z-index, чтобы разместить его поверх заполняющего элемента, но ниже маски.
Затем добавляем animation длительностью 10 секунд. Об анимации мы поговорим позже.
Элемент "filler"
.filler {
border-radius: 0 125px 125px 0;
z-index: 100;
border-left: none;
animation: fill 10s steps(1, end) infinite;
left: 50%;
opacity: 0;
}
Для данного элемента устанавливаем border-radius и z-index, удаляем border-left, и делаем анимацию длительностью 10секунд. Для данного элемента animation-timing-function не получает значения linear, но будет steps(1, end). Это значит, что animation будет выполняться мгновенно.
Так как заполняющий элемент не должен быть видимым в ходе первой половины анимации, его непрозрачность будет 0, а положение - 50% ширины родительского элемента.
Элемент "mask"
.mask {
width: 50%;
height: 100%;
position: absolute;
z-index: 300;
opacity: 1;
background: inherit;
animation: mask 10s steps(1, end) infinite;
}
Маска присутствует с начала анимации, поэтому ее непрозрачность имеет значение 1, а фон наследуется от родительского элемента (чтобы она была невидима). Чтобы закрывать вращающийся элемент, она будет иметь те же размеры, а свойство z-index устанавливается в значение 300.
Кадры анимации
@keyframes rota {
0% { transform: rotate(0deg); }
100% { transform: rotate(360deg); }
}
@keyframes fill {
0% { opacity: 0; }
50%, 100% { opacity: 1; }
}
@keyframes mask {
0% { opacity: 1; }
50%, 100% { opacity: 0; }
}Первая анимация (rota) используется для элемента spinner. Он постепенно вращается от 0 до 360 градусов за 10 секунд.
Вторая анимация (fill) используется для элемента filler. Он немедленно изменяет непрозрачность с 0 до 1 по истечении 5 секунд.
Последняя анимация (mask) используется для элемента mask. Он немедленно изменяет непрозрачность с 1 до 0 по истечении 5 секунд.
Анимация имеет следующий вид:
- T0 - элемент spinner слева, скрыт маской . Элемент filler скрыт.
- T1 - элемент spinner начинает вращаться по часовой стрелке и медленно появляется из-за маски.
- T2 - элемент spinnerr повернут на угол 360/10*2 = 72° продолжает вращаться.
- T3 - элемент spinner повернут на угол 360/10*3 = 108° продолжает вращаться.
- T4 - элемент spinner повернут на угол 360/10*4 = 144° продолжает вращаться.
- T5 - элемент spinner повернут на угол 360/10*5 = 180° продолжает вращаться. В данный момент элемент filler мгновенно становится видимым, а маска скрывается.
- T6 - элемент spinner повернут на угол 360/10*6 = 216° продолжает вращаться.
- T7 - элемент spinner повернут на угол 360/10*7 = 252° продолжает вращаться.
- T8 -элемент spinner повернут на угол 360/10*8 = 288° продолжает вращаться.
- T9 - элемент spinner повернут на угол 360/10*9 = 324° продолжает вращаться.
- T10 - элемент spinner повернут на угол 360°. Вернулись к точке старта. Сбрасываем анимацию. Маска появляется, а заполняющий элемент скрывается.
Бонус
Несколько дополнительных трюков.
Пауза при наведении курсора
.wrapper:hover .filler,
.wrapper:hover .spinner,
.wrapper:hover .mask {
animation-play-state: paused;
}
С помощью данного кода вы можете остановить всю анимацию при наведении курсора на родительский элемент.
Вставляем содержание
Благодаря свойству z-index мы можем легко добавить какое-нибудь содержание в элемент spinner и заставить его вращаться. Попробуйте следующий код :
.spinner:after {
content: "";
position: absolute;
width: 10px;
height: 10px;
border-radius: 50%;
top: 10px;
right: 10px;
background: #fff;
border: 1px solid rgba(0,0,0,0.4);
box-shadow: inset 0 0 3px rgba(0,0,0,0.2);
}
Препроцессор или переменные CSS
В текущий момент код очень не просто поддерживать. Но если мы используем переменные (в препроцессоре или ожидаемые внутренние переменные CSS), все может стать существенно проще. Например, можно добавить переменные для управления длительностью вместо того, чтобы исправлять код в 3 определениях анимаций.
Если хочется улучшить сопровождаемость кода без использования препроцессоров, можно создать класс с одним управлением длительностью анимаций и добавлять его к 3 дочерним элементам. Например так :
.animation-duration {
animation-duration: 10s;
}
<div class="wrapper"> <div class="spinner pie animation-duration"></div> <div class="filler pie animation-duration"></div> <div class="mask animation-duration"></div> </div>
Недостатки
Данная техника имеет ряд недостатков:
- Не поддерживаются градиенты.
- Не поддерживаются тени.
- Нет адаптивности. Если изменяется размер родительского элемента, то все будет нормально, кроме радиуса закругления рамки. Его придется менять вручную.
- Нет семантичности (4 элемента для одной анимации).
Поддержка браузеров
Так как мы используем анимации CSS, то поддержка в браузерах достаточно скудная:
- Internet Explorer 10
- Firefox 12+
- Chrome
- Safari 5+
- Opera 12+
- iOS Safari 3+
- Android 2+
Источник: http://feedproxy.google.com/~r/ruseller/CdHX/~3/1NVGot9Vb0Q/lessons.php
|
Что будем делать?Такие индикаторы загрузки вы наверняка встречали, особенно на Flash сайтах. Это сектор круга, который становится все больше и больше, пока не превратиться в завершенный круг.На |
РэдЛайн, создание сайта, заказать сайт, разработка сайтов, реклама в Интернете, продвижение, маркетинговые исследования, дизайн студия, веб дизайн, раскрутка сайта, создать сайт компании, сделать сайт, создание сайтов, изготовление сайта, обслуживание сайтов, изготовление сайтов, заказать интернет сайт, создать сайт, изготовить сайт, разработка сайта, web студия, создание веб сайта, поддержка сайта, сайт на заказ, сопровождение сайта, дизайн сайта, сайт под ключ, заказ сайта, реклама сайта, хостинг, регистрация доменов, хабаровск, краснодар, москва, комсомольск |
Дайджест новых статей по интернет-маркетингу на ваш email
Новые статьи и публикации
- 2026-09-30 » Таргетированная реклама в Максе: что тестирование инвентаря VK Рекламы значит для вашего бизнеса
- 2026-09-30 » Универсальные сегменты в Яндекс Аудиториях: как объединение email, телефона и ClientID повышает точность рекламы
- 2026-09-30 » Claude Sonnet 5.5: что новая модель Anthropic значит для вашего бизнеса и рекламы
- 2026-09-30 » Медийная реклама на Ozon с автоподбором аудитории: что это дает вашему бизнесу
- 2026-09-30 » Цифровой рубль и новые схемы мошенничества: как защитить свой бизнес
- 2026-09-25 » Россияне выбирают товары в классическом Поиске, но факты проверяют в нейровыдаче: что это значит для вашего бизнеса
- 2026-09-25 » Стоимость целевого действия в интернет-рекламе выросла на 17,4%: что это значит для вашего бизнеса и как реагировать
- 2026-09-25 » Telegram тестирует квадратный формат видеосообщений: что это значит для бизнеса и маркетинга
- 2026-09-25 » В Единой перфоманс-кампании станет проще продвигать товары и страницы каталога: что изменилось и как это использовать
- 2026-09-25 » Яндекс Метрика запустила бесплатные бенчмарки по индустриям: как малому бизнесу сравнивать себя с рынком
- 2026-09-18 » Telegram Ads открыл таргетинг на аудиторию ботов: как бизнесу использовать новый формат
- 2026-09-18 » ChatGPT начал показывать рекламу в диалогах на русском языке: что это меняет для вашего бизнеса
- 2026-09-18 » Половина покупателей используют ИИ-сервисы вместо чтения отзывов: как бизнесу не потерять клиента в новой реальности
- 2026-09-18 » Сбер выпустил первую модель ГигаЧата с логическим мышлением: что это значит для вашего бизнеса
- 2026-09-18 » Новый статус «Надежный бизнес» в Поиске Яндекса: что это дает интернет-магазинам и сайтам услуг
- 2026-09-09 » Революция в охватной рекламе: как «Панорама» в Директе меняет правила игры для малого и среднего бизнеса
- 2026-09-09 » Новый рубеж для видеоконтента: как монетизация Rutube Shorts открывает возможности для бизнеса
- 2026-09-09 » Новая эра автоматизации: как Алиса AI для бизнеса меняет правила игры на рынке ИИ-агентов
- 2026-09-09 » Больше баллов — больше отзывов: как новые настройки награды в «Баллах за отзывы» Яндекса помогут вашему бизнесу расти
- 2026-09-09 » Поддельные приложения Rutube, VK Видео и Макс в топах App Store: что это значит для вашего бизнеса и как защитить свои цифровые активы
- 2026-09-02 » Лимит дохода самозанятых могут поднять почти вдвое: что это значит для вашего бизнеса
- 2026-09-02 » Новые отчеты Яндекс Метрики: как анализировать удержание и ценность пользователей
- 2026-09-02 » Google сделал ИИ-ответы стандартом поиска: как это меняет правила игры для вашего бизнеса
- 2026-09-02 » Идентификация доменов через Госуслуги с 1 сентября 2026 года: что изменилось для вашего бизнеса и как не потерять сайт
- 2026-09-02 » Цифровой рубль стал обязательным: что меняется для бизнеса с 1 сентября 2026 года
- 2026-08-25 » Статистика каналов в Максе: почему это важно для вашего бизнеса
- 2026-08-25 » Долгожданный контакт: как появление @AdSupport меняет правила игры в Telegram-рекламе
- 2026-08-25 » Скидка, которая видит покупателя насквозь: как новый инструмент Яндекса превращает бюджет в продажи
- 2026-08-25 » Новая эра телевизионной рекламы: как Яндекс Директ превращает экран в витрину
- 2026-08-25 » Отзывы как двигатель продаж: как обратная связь клиентов продвигает ваш сайт в поиске
Самое важное в каждом деле – пересилить момент, когда нам не хочется работать. И. Павлов |
Мы создаем сайты, которые работают! Профессионально обслуживаем и продвигаем их , а также по всей России и ближнему зарубежью с 2006 года!
Как мы работаем
Заявка
Позвоните или оставьте заявку на сайте.
Консультация
Обсуждаем что именно Вам нужно и помогаем определить как это лучше сделать!
Договор
Заключаем договор на оказание услуг, в котором прописаны условия и обязанности обеих сторон.
Выполнение работ
Непосредственно оказание требующихся услуг и работ по вашему заданию.
Поддержка
Сдача выполненых работ, последующие корректировки и поддержка при необходимости.

Мы создаем практически любые сайты от продающих страниц до сложных, высоконагруженных и нестандартных веб приложений! Наши сайты это надежные маркетинговые инструменты для успеха Вашего бизнеса и увеличения вашей прибыли! Мы делаем красивые и максимально эффектные сайты по доступным ценам уже много лет!
Комплексный подход это не просто продвижение сайта, это целый комплекс мероприятий, который определяется целями и задачами поставленными перед сайтом и организацией, которая за этим стоит. Время однобоких методов в продвижении сайтов уже прошло, конкуренция слишком высока, чтобы была возможность расслабиться и получать \ удерживать клиентов из Интернета, просто сделав сайт и не занимаясь им...
Мы оказываем полный комплекс услуг по сопровождению сайта: информационному и техническому обслуживанию и развитию Интернет сайтов.
Контекстная реклама - это эффективный инструмент в интернет маркетинге, целью которого является увеличение продаж. Главный плюс контекстной рекламы заключается в том, что она работает избирательно.