
Прогресс бар позволяет наглядно отображать выполнение задач и может быть реализован с помощью <progress> или структуры <div> с динамическим изменением ширины. Тег <progress> поддерживает атрибуты value и max, что позволяет быстро задать текущий статус и общий объем задачи.
Для более гибкого отображения используется контейнер <div> с вложенным элементом, ширина которого задается в процентах. Такой подход позволяет управлять цветом, формой и анимацией, а также интегрировать обновление прогресса через JavaScript без сторонних библиотек.
При динамическом изменении прогресса ключевой параметр – процент выполнения. JavaScript можно использовать для расчета ширины внутреннего блока по формуле width = (текущее значение / максимальное значение) * 100%. Это обеспечивает точное соответствие визуального индикатора фактическому состоянию задачи.
В этой статье приведено пошаговое руководство по созданию прогресс бара с нуля: от простой HTML-разметки до настройки динамического обновления и базовой анимации, с акцентом на контроль каждого параметра без использования Canvas или сторонних библиотек.
Создание прогресс бара в HTML: пошаговое руководство
Для создания прогресс бара в HTML используется тег <progress>. Он отображает текущий прогресс процесса и имеет атрибуты value и max. Атрибут value задает текущее значение, а max – максимальное. Например:
<progress value="40" max="100"></progress>
Этот код создаст прогресс бар, заполненный на 40% от общего значения 100.
Для более гибкой визуализации можно использовать контейнер <div> и внутренний <div> с шириной в процентах. Пример структуры:
<div class="progress-container">
<div class="progress-bar" style="width: 40%;"></div>
</div>
В этом случае ширина внутреннего блока задает заполнение прогресс бара. Значение width можно изменять динамически через JavaScript:
document.querySelector('.progress-bar').style.width = '70%';
Для доступности важно добавить текстовое описание и атрибут aria-valuenow:
<div class="progress-bar" role="progressbar" aria-valuenow="40" aria-valuemin="0" aria-valuemax="100" style="width: 40%;">40%</div>
Рекомендуется использовать числовой индикатор внутри прогресс бара, чтобы пользователи видели точное значение. При динамическом обновлении значения JavaScript может изменять и текст:
const bar = document.querySelector('.progress-bar');
let value = 40;
bar.style.width = value + '%';
bar.textContent = value + '%';
Таким образом, HTML и минимальный JavaScript позволяют создавать прогресс бары с точным управлением и визуальной наглядностью.
Выбор подходящей структуры HTML для прогресс бара

При создании прогресс бара важно выбрать структуру, которая обеспечивает доступность, простоту обновления и совместимость с CSS-анимациями. Основные варианты:
- Элемент
<progress>: встроенный тег HTML5 для отображения прогресса. Поддерживает атрибутыvalueиmax, что упрощает динамическое обновление. Поддерживается большинством современных браузеров. - Контейнер с вложенным элементом
<div>: универсальный метод. Внешнийdivзадаёт рамку и фон, внутреннийdiv– заполнение. Позволяет легко добавлять анимацию изменения ширины через CSS. - Список
<ul><li>: подходит для прогресс баров с шагами. Каждыйliотображает отдельный шаг и может быть отмечен как завершённый через класс. Обеспечивает гибкость при построении пошаговых индикаторов.
Рекомендации при выборе структуры:
- Для простого отображения прогресса без сложной визуализации используйте
<progress>. - Если необходима кастомная анимация или цветовая заливка, выбирайте контейнер с вложенными
<div>. - Для пошаговых процессов с визуальной индикацией шагов используйте
<ul><li>. - Всегда учитывайте доступность: добавляйте
aria-valuenow,aria-valuemin,aria-valuemaxдля динамическихdiv-баров.
Правильная структура облегчает поддержку и расширение прогресс бара, а также повышает совместимость с инструментами тестирования и адаптивными интерфейсами.
Добавление базового стиля с помощью CSS

Для начала создадим контейнер прогресс-бара с фиксированной шириной и высотой. Используем display: block, чтобы элемент корректно отображался, и border-radius для сглаживания углов:
Пример CSS:
.progress-container {
width: 300px;
height: 25px;
background-color: #e0e0e0;
border-radius: 12px;
 >overflow: hidden;
}
Внутри контейнера создается заполняющий элемент прогресс-бара. Устанавливаем height: 100% для полной высоты контейнера и начальную ширину 0% для анимации заполнения:
.progress-bar {
 >height: 100%;
 >width: 0%;
 >background-color: #76c7c0;
 >transition: width 0.5s ease;
}
Для визуальной четкости используем transition, чтобы изменение ширины выглядело плавно. Цвет фона можно менять в зависимости от состояния прогресса, например, background-color: #f39c12 для предупреждения.
При необходимости добавляем текстовое отображение прогресса. Используем position: absolute внутри контейнера и text-align: center:
.progress-text {
 >position: absolute;
 >width: 100%;
 >text-align: center;
 >line-height: 25px;
 >font-weight: bold;
 >color: #fff;
}
Эти базовые правила создают устойчивый и наглядный прогресс-бар, готовый к дальнейшей кастомизации, а плавное изменение ширины делает интерфейс более информативным и аккуратным.
Настройка цвета и ширины прогресс бара

Цвет прогресс бара определяется через свойство background-color у внутреннего элемента. Для динамических изменений можно использовать CSS-переменные или inline-стили. Например, для зеленого прогресс бара: style="background-color: #28a745;".
Ширина прогресс бара задается в процентах относительно контейнера. При фиксированной ширине контейнера в 400px, ширина внутреннего элемента для заполнения 50% составит width: 50% или width: 200px при использовании пикселей.
| Свойство | Пример | Описание |
|---|---|---|
| background-color | #007bff | Устанавливает основной цвет заполнения прогресс бара |
| width | 75% | Задает текущий уровень заполнения относительно контейнера |
| height | 20px | Определяет толщину полосы прогресса |
| border-radius | 5px | Скругляет углы для визуальной мягкости |
| transition | width 0.3s ease | Обеспечивает плавное изменение ширины при обновлении значения |
Для комбинирования цвета и ширины используют CSS-класс с динамическим inline-стилем: <div class="progress-bar" style="width: 60%; background-color: #ffc107;"></div>. Это позволяет менять значения программно без пересборки HTML.
Высота контейнера прогресс бара влияет на визуальное восприятие ширины заполнения. Рекомендуется выбирать высоту от 10 до 30 пикселей для стандартных интерфейсов и до 50 пикселей для панелей с крупной информацией.
Создание анимации заполнения с CSS

Анимация прогресс бара достигается с помощью CSS-свойства width и ключевых кадров @keyframes. Для начала создайте контейнер и сам индикатор заполнения:
<div class="progress-container">
<div class="progress-bar"></div>
</div>
Основные рекомендации по стилям:
- Контейнер: фиксированная ширина и высота, фон для отображения пустого состояния.
- Бар заполнения: начальная ширина 0%, плавный переход с помощью
transitionили анимации@keyframes. - Используйте закругленные углы
border-radiusдля визуальной мягкости.
Пример CSS-анимации:
.progress-container {
width: 300px;
height: 20px;
background-color: #e0e0e0;
border-radius: 10px;
overflow: hidden;
}
.progress-bar {
width: 0%;
height: 100%;
background-color: #4caf50;
border-radius: 10px 0 0 10px;
animation: fillBar 3s forwards;
}
@keyframes fillBar {
0% { width: 0%; }
100% { width: 80%; }
}
Тонкости анимации:
- Свойство
forwardsсохраняет конечное состояние после завершения. - Изменение времени анимации (
3s) регулирует скорость заполнения. - Цвет можно менять через
@keyframes, чтобы добавить динамический эффект градиента. - Для повторного запуска анимации используйте
animation-iteration-countили JS-события.
Анимация с CSS позволяет создавать плавное визуальное заполнение без JavaScript, обеспечивая легковесность и совместимость с большинством браузеров.
Обновление прогресс бара через JavaScript

Для изменения прогресс бара используйте элемент <progress> с атрибутами value и max. Значение обновляется через JavaScript: document.getElementById('progress').value = 30;, где 30 – текущий прогресс.
Для постепенного увеличения используйте setInterval. Пример: let value = 0; let bar = document.getElementById('progress'); let timer = setInterval(() => { value += 2; bar.value = value; if(value >= bar.max) clearInterval(timer); }, 100); Интервал 100 мс увеличивает прогресс на 2 единицы до достижения максимума.
Если прогресс зависит от загрузки файла, применяйте событие progress объекта XMLHttpRequest: xhr.onprogress = e => { bar.value = (e.loaded / e.total) * 100; }; Это позволяет отображать реальный процент загрузки.
Для нескольких прогресс баров создайте универсальную функцию: function setProgress(id, percent) { document.getElementById(id).value = percent; } Она упрощает управление любыми элементами.
Не используйте прямое изменение ширины через CSS для <progress>, это нарушает семантику и снижает совместимость с assistive-технологиями.
Отслеживание прогресса загрузки файлов или задач

Для визуализации процесса загрузки файлов или выполнения задач используют элемент <progress> или кастомные div-бар элементы с динамическим изменением ширины. В HTML5 тег <progress> принимает атрибуты value и max, где value – текущее состояние, а max – общая величина задачи.
При загрузке файлов через JavaScript используют объект XMLHttpRequest с событием progress. Оно возвращает loaded и total в байтах, что позволяет вычислить процент выполнения:
let percent = (event.loaded / event.total) * 100;
Этот процент применяют для изменения атрибута value элемента <progress> или ширины div с помощью style.width. Для задач, не связанных с загрузкой, используют периодические обновления состояния задачи через setInterval или события WebSocket, чтобы синхронизировать прогресс-бар с сервером.
При работе с крупными файлами рекомендуется обновлять прогресс не при каждом байте, а с интервалом ≥100 мс, чтобы снизить нагрузку на браузер и обеспечить плавную анимацию. Для нескольких параллельных задач используют массивы объектов прогресса и динамически создают несколько баров, обновляя каждый независимо.
Для числовой точности отображения прогресса применяют округление до 1–2 знаков после запятой. При комбинированных задачах, где одна задача состоит из нескольких этапов, общий прогресс вычисляют как средневзвешенное по завершённости всех этапов.
Добавление числового или процентного индикатора

Для визуализации прогресса с точностью до числа или процента, к стандартной структуре прогресс-бара добавляют отдельный элемент, отображающий значение.
Пример базовой HTML-разметки с индикатором:
| <div class=»progress-container»> |
| <div class=»progress-bar» style=»width: 45%;»></div> |
| <span class=»progress-label»>45%</span> |
| </div> |
Рекомендации по размещению индикатора:
| Размещение | Особенности |
|---|---|
| Внутри полосы | Текст следует помещать поверх заполненной части, ширину текста учитывают, чтобы не обрезался при low width. |
| Снаружи полосы | Используется для маленьких полос, избегает наложения текста на фон, можно позиционировать справа, слева или сверху. |
Для динамического обновления процента используют JavaScript:
| const bar = document.querySelector(‘.progress-bar’); |
| const label = document.querySelector(‘.progress-label’); |
| let value = 0; |
| const interval = setInterval(() => { |
| if(value >= 100) { clearInterval(interval); return; } |
| value += 5; |
| bar.style.width = value + ‘%’; |
| label.textContent = value + ‘%’; |
| }, 200); |
Практический совет: при добавлении числового индикатора выбирайте контрастный цвет текста относительно фона заполненной части для читаемости. Минимальная ширина полосы с внутренним индикатором – 50px.
При использовании процентов в CSS можно автоматизировать отображение через attr(data-value) в современных браузерах, но для совместимости предпочтителен JavaScript.
Вопрос-ответ:
Что такое прогресс бар и для чего он используется в HTML?
Прогресс бар — это визуальный элемент интерфейса, который отображает степень выполнения какой-либо задачи, например загрузки файла или выполнения скрипта. В HTML для его создания чаще всего используется тег
Как создать простой прогресс бар с использованием только HTML?
Самый простой способ — использовать тег . Здесь атрибут value указывает текущий уровень прогресса, а max — максимальное значение. Этот элемент отображает заполненную часть полосы автоматически. Его можно дополнительно стилизовать с помощью CSS, чтобы изменить цвет или форму.
Можно ли сделать прогресс бар динамическим, чтобы он обновлялся в зависимости от действий пользователя?
Да, для этого обычно применяют JavaScript. С помощью скрипта можно изменять атрибут value элемента
Какие методы CSS можно использовать для стилизации прогресс бара?
Для изменения внешнего вида прогресс бара применяют селекторы ::-webkit-progress-bar и ::-webkit-progress-value (для браузеров на основе Chromium) или ::-moz-progress-bar (для Firefox). С их помощью можно задать цвет фона, градиент, рамку, высоту и скругление углов. Также можно использовать анимации, чтобы заполнение полосы выглядело плавным, и изменять цвет в зависимости от процента выполнения.
Как сделать прогресс бар с кастомной анимацией заполнения?
Для создания анимации обычно используют CSS. Можно определить ключевые кадры @keyframes, которые изменяют ширину внутреннего блока прогресс бара от 0% до 100%. Этот блок помещается внутрь контейнера, а с помощью свойства animation задаются скорость и тип анимации. Такой подход позволяет создать плавное заполнение, которое выглядит более привлекательным, чем стандартный прогресс бар браузера.
