⚙️
Front-end patterns
  • Введение
  • Шаблоны
    • Эффекты CSS
      • Overlay
      • Анимация display:none
      • Текст
        • Фон текста градиент с анимацией
      • Элементы формы
        • Вертикальное выравнивание placeholder по вертикали
      • Ссылки
        • Градиент как основной цвет
        • Линия под ссылкой ездит слева направо при наведении
      • Скрывать блок .clipped
    • Модальное окно
      • Dialog
    • Элементы формы
      • Select
      • Radio
      • CheckBox
      • Ввод текста (input)
        • Телефон (tel)
        • Почта (email)
      • Кнопка
    • Вкладки/Списки
      • Вкладки или Табы (tabs)
      • Аккордеон (Accordion)
    • Навигация
      • Основная и дополнительная навигация на сайте
        • Анимирование основной навигации
      • Пропустить навигацию
      • Хлебные крошки (Breadcrumbs)
      • Кнопка основной навигации (Бургер)
    • Структуры
      • Контейнер
      • Столбцы
      • Прогресс
      • Горизонтальная прокрутка карточек
      • Цитата
    • Тэги (семантика)
      • Текст
      • Логика
    • Увеличить скорость загрузки страницы
    • Шрифты
  • JS
    • Прокрутка страницы
    • Анимация элементов
  • A11Y
    • Фокус с клавиатуры
    • No sort
  • WordPress
    • Решения и подсказки
    • Плагины
    • Натягиваем сайт
      • Пустая тема
      • Делаем главную (пустую) страницу
      • Подключаем стили и js
      • Заменяем содержимое файлов (header, footer, page)
    • Свой плагин
      • Шаблон
      • Административная часть
      • Пользовательская часть
      • Локализация плагина
  • Ghost
    • Создание своей темы
      • Фалы шаблона
        • Partials
          • footer.hbs
          • header.hbs
          • post_card.hbs
        • index.hbs
        • default.hbs
        • post.hbs
      • Переменные
      • Циклы, условия и функции
  • Visual Studio
  • Gulp
    • Deploy on GitHub
    • Плагин
    • Моя сборка
      • Изображения
  • Регулярные выражения
  • Алгоритмы
    • Поиск
    • Сортировка
    • Поиск в ширину (глубину)
    • Типы данных
  • Конструкторы сайтов
Powered by GitBook
On this page
  • Основные данные
  • Нативный
  • Кастомный
  • Нативный + кастомный
  • Интерактивный дизайн
  • Screenreader
  • ARIA

Was this helpful?

  1. Шаблоны
  2. Структуры

Прогресс

Элемент отображения выполнения пр

PreviousСтолбцыNextГоризонтальная прокрутка карточек

Last updated 3 years ago

Was this helpful?

Основные данные

Блок прогресса можно выполнить используя нативные элемент html <progress> и без него.

Нативный

<progress class="progress-native" value="70" max="100"></progress>
.progress-native {
   appearance: none;
   border: none;
   margin-top: 10px;
   background: #eee;
   border: 0;
   width: 100%;
   height: 25px;
   border-radius: 9px;
   color: #9c3;

   &::-webkit-progress-bar {
      background: #eeeeee;
      border-radius: 9px;
   }
   &::-webkit-progress-value {
      background: linear-gradient(to bottom, rgb(23, 26, 21) 0%, #9c3 100%);
      border-radius: 9px;
   }
   &::-moz-progress-bar {
      background: linear-gradient(to bottom, rgb(48, 53, 44) 0%, #9c3 100%);
      border-radius: 9px;
   }
}

Недостатками варианта такой реализации:

  • нельзя складывать индикаторы выполнения

  • нельзя анимировать

  • нельзя разместить над ними текстовые метки

  • плохая поддержка и дублирование свойств

Достоинства:

Можно удобно обращаться к одному параметру в JS:

document.getElementById('progress').value = '50';

Кастомный

Вариант с строкой состояния и анимацией.

 <div class="progress" data-scriptname="unloading">
   <div class="progress__status">70%</div>
   <div class="progress__bar" role="progressbar" aria-valuenow="100" aria-valuemin="0" aria-valuemax="100" style="width: 70%"></div>
</div>
.progress {
   height: rem(25);
   border-radius: var(--size-border-radius);
   background-color: var(--color-bg-gray);

   &__status {
      position: absolute;
      width: 70%;
      text-align: center;
      color: var(--color-white);
      font-weight: bold;
   }

   &__bar {
      width: 70%;
      height: 100%;
      border-radius: var(--size-border-radius);
      background-color: var(--color-active);
      background-image: linear-gradient(
         45deg,
         rgba(255, 255, 255, 0.15) 25%,
         transparent 25%,
         transparent 50%,
         rgba(255, 255, 255, 0.15) 50%,
         rgba(255, 255, 255, 0.15) 75%,
         transparent 75%,
         transparent
      );
      background-size: 1rem 1rem;
      animation: progress-bar-stripes 1s linear infinite;
   }
}

@keyframes progress-bar-stripes {
   from {
      background-position: 32px 0;
   }
   to {
      background-position: 0 0;
   }
}

Нативный + кастомный

Этот вариант используется оба метода.

Недостатки:

  • нарушается семантика

  • требуется вносить дополнительные ARIA атрибуты

Мой вариант с псевдоэлементами:

<progress class="progress-native2" value="70" max="100"></progress>
.progress-native2 {
   position: relative;
   &::before {
      content: "";
      position: absolute;
      display: block;
      width: 100%;
      height: rem(24);
      background-color: #ccc;
      border-radius: var(--size-border-radius);
   }
   &::after {
      content: attr(value) "%";
      position: absolute;
      display: block;
      height: 24px;
      border-radius: var(--size-border-radius);
      background-color: violet;
   }
}

Интерактивный дизайн

Screenreader

При изменении состояния (процента) необходимо объявлять его.

ARIA

В этом разделе перечислены все соответствующие роли, состояния и свойства ARIA для кнопки.

role Сообщает AT, что выбрана роль стандартного элемента (в данном случае "progress")

aria-valuenow текущее состояние "прогресса"

aria-valuemin минимальное состояние

aria-valuemax максимальное состояние

Упрощенная реализация выглядит следующим образом (оригинал статьи: ):

Вариант 2:

Вариант усложненной реализации (с процентами и анимацией) -

https://htmlweb.ru/html/form/progress.php
https://jsbin.com/cefewo/edit?html,css,js,output
https://habr.com/ru/post/266895/
Progress