Статьи

Создайте свои собственные индикаторы прогресса CSS3

CSS3 возвестил о революции в функциональности и дизайне сайта. CSS3 позволяет веб-разработчикам создавать динамический, гибкий и легко изменяемый веб-контент, минуя громоздкие изображения и плагины JavaScript. Из этого туториала вы узнаете, как с нуля создавать впечатляющий индикатор выполнения, используя чистые стили CSS3; нет изображений, нет JS.

Прежде чем мы начнем, для целей этой демонстрации я рекомендую вам установить последнюю версию Firefox, Chrome или Safari. Свойства CSS3, которые я использую ниже, в настоящее время не поддерживаются ни Internet Explorer, ни Opera.

Наш урок создаст эффекты индикатора выполнения, похожие на те, что изображены на следующем рисунке:

Шаг первый: HTML

HTML-код для этих индикаторов прогресса обманчиво прост. Начните с создания элемента <div> В этом элементе установите дочерний элемент <span> Код должен выглядеть так:

 <div class="progress">
   <span></span>
</div>

Как только разметка на месте, вы готовы перейти к забавной части; застрять в CSS3! Для визуальных эффектов на индикаторе выполнения требуется отдельный класс CSS. Например, эффект градиента, показанный на изображении выше, имеет класс «градиент»; полосатый эффект представлен классом «полоса». То же относится и к эффектам анимации и блеска.

Шаг второй: базовый CSS

Кодировать базовый индикатор выполнения CSS очень просто. По сути, вы должны создать два разных элемента; сам класс «progress» и дочерний элемент <span> Аналогичные правила применяются для настройки стилей для других классов. После того как вы установили основы, вы кодируете необходимые эффекты, которые будут применены к дочернему элементу <span> Ваш базовый код CSS должен выглядеть примерно так:

 .progress {
  margin: 5px 0 3px;
  border: 6px solid #333;
  background: #333;
  overflow: hidden;
  border-radius: 50px;
  -moz-border-radius: 50px;
  -webkit-border-radius: 50px;
  box-shadow: 1px 1px 1px #777;
  -moz-box-shadow: 1px 1px 1px #777;
  -webkit-box-shadow: 1px 1px 1px #777;
}
.progress > span {
  display: block;
  height: 20px;
  width: 20%;
  border-radius: 5px;
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px;
}

Цвета, поля, высота элемента и другие свойства могут быть изменены в соответствии с макетом вашего собственного сайта.

Шаг третий: эффект градиента

Вместо того, чтобы использовать эффект градиента CSS3, я считаю более эффективным использовать свойство box-shadow Свойство gradient Другая проблема заключается в том, что Internet Explorer 8 не поддерживает многие из более сложных стилей CSS3, включая градиентный фон. Чтобы обойти это, в приведенном ниже коде вы заметите, что я применил свойство filter По крайней мере, пользователи вашего сайта, использующие IE8, увидят какой-то эффект градиента, а не простой цвет.

Код для создания индикатора выполнения эффекта градиента показан ниже.

 
.gradient > span {
  box-shadow: 0 5px 5px rgba(255,255,255,0.6) inset, 0 -5px 7px rgba(0, 0, 0, 0.4) inset;
  -moz-box-shadow: 0 5px 5px rgba(255,255,255,0.6) inset, 0 -5px 7px rgba(0, 0, 0, 0.4) inset;
  -webkit-box-shadow: 0 5px 5px rgba(255,255,255,0.6) inset, 0 -5px 7px rgba(0, 0, 0, 0.4) inset;
  filter: progid:DXImageTransform.Microsoft.gradient(
    startColorstr='#33ffffff',
    endColorstr='#33000000',
    GradientType=0 );
}

Шаг четвертый: эффект блеска

Свойство gradient Это накладывает частично прозрачный эффект блеска поверх самого индикатора выполнения, то есть вы можете использовать его для применения эффекта блеска к любому нижележащему цвету. Как и при создании эффекта градиента, я создал класс «глянец», чтобы определить необходимые стили. Вот CSS:

 .gloss > span {
  background-image: -moz-linear-gradient(top,
    rgba(255,255,255,0.2) 0%,
    rgba(255,255,255,0.1) 45%,
    rgba(0,0,0,0.2) 55%,
    rgba(0,0,0,0.1) 100%);
  background-image: -webkit-gradient(linear, left top, left bottom,
    color-stop(0%,rgba(255,255,255,0.2)),
    color-stop(45%,rgba(255,255,255,0.1)),
    color-stop(55%,rgba(0,0,0,0.2)),
    color-stop(100%,rgba(0,0,0,0.1)));
  background-image: -webkit-linear-gradient(top,
    rgba(255,255,255,0.5) 0%,
    rgba(255,255,255,0.1) 45%,
    rgba(0,0,0,0.2) 55%,
    rgba(0,0,0,0.1) 100%);
  background-image: -o-linear-gradient(top,
    rgba(255,255,255,0.2) 0%,
    rgba(255,255,255,0.1) 45%,
    rgba(0,0,0,0.2) 55%,
    rgba(0,0,0,0.1) 100%);
  background-image: -ms-linear-gradient(top,
    rgba(255,255,255,0.2) 0%,
    rgba(255,255,255,0.1) 45%,
    rgba(0,0,0,0.2) 55%,
    rgba(0,0,0,0.1) 100%);
  background-image: linear-gradient(to bottom,
    rgba(255,255,255,0.2) 0%,
    rgba(255,255,255,0.1) 45%,
    rgba(0,0,0,0.2) 55%,
    rgba(0,0,0,0.1) 100%);
}

Шаг пятый: наложение полос

К настоящему времени вы должны быть знакомы с основным процессом. Чтобы создать эффект чередования, настройте класс «stripe», используя следующий код. Этот класс работает так же, как и глянец, при применении полупрозрачного покрытия к индикатору выполнения, который может быть адаптирован к любому цвету по мере необходимости.

 .stripe > span {
  background-size: 30px 30px;
  background-image: -moz-linear-gradient(-45deg,
    rgba(255,255,255,0.15) 0%,
    rgba(255,255,255,0.15) 25%,
    rgba(255,255,255,0) 25%,
    rgba(255,255,255,0) 50%,
    rgba(255,255,255,0.15) 50%,
    rgba(255,255,255,0.15) 75%,
    rgba(255,255,255,0) 75%,
    rgba(255,255,255,0) 100%);
  background-image: -webkit-gradient(linear, left top, right bottom,
    color-stop(0%,rgba(255,255,255,0.2)),
    color-stop(25%,rgba(255,255,255,0.2)),
    color-stop(25%,rgba(255,255,255,0)),
    color-stop(50%,rgba(255,255,255,0)),
    color-stop(50%,rgba(255,255,255,0.2)),
    color-stop(75%,rgba(255,255,255,0.2)),
    color-stop(75%,rgba(255,255,255,0)),
    color-stop(100%,rgba(255,255,255,0)));
  background-image: -webkit-linear-gradient(-45deg,
    rgba(255,255,255,0.3) 0%,
    rgba(255,255,255,0.3) 25%,
    rgba(255,255,255,0) 25%,
    rgba(255,255,255,0) 50%,
    rgba(255,255,255,0.3) 50%,
    rgba(255,255,255,0.3) 75%,
    rgba(255,255,255,0) 75%,
    rgba(255,255,255,0) 100%);
  background-image: -o-linear-gradient(-45deg,
    rgba(255,255,255,0.15) 0%,
    rgba(255,255,255,0.15) 25%,
    rgba(255,255,255,0) 25%,
    rgba(255,255,255,0) 50%,
    rgba(255,255,255,0.15) 50%,
    rgba(255,255,255,0.15) 75%,
    rgba(255,255,255,0) 75%,
    rgba(255,255,255,0) 100%);
  background-image: -ms-linear-gradient(-45deg,
    rgba(255,255,255,0.15) 0%,
    rgba(255,255,255,0.15) 25%,
    rgba(255,255,255,0) 25%,
    rgba(255,255,255,0) 50%,
    rgba(255,255,255,0.15) 50%,
    rgba(255,255,255,0.15) 75%,
    rgba(255,255,255,0) 75%,
    rgba(255,255,255,0) 100%);
  background-image: linear-gradient(135deg,
    rgba(255,255,255,0.15) 0%,
    rgba(255,255,255,0.15) 25%,
    rgba(255,255,255,0) 25%,
    rgba(255,255,255,0) 50%,
    rgba(255,255,255,0.15) 50%,
    rgba(255,255,255,0.15) 75%,
    rgba(255,255,255,0) 75%,
    rgba(255,255,255,0) 100%);
}

Шаг шестой: анимированные индикаторы прогресса

Если вы выполнили эти шаги до конца, то вы уже должны были оценить потенциал CSS3 для создания сложных графических эффектов без использования изображений и JavaScript. CSS3 также можно просто и эффективно использовать для создания впечатляющих анимированных стилей. Следующий код показывает, как вы можете отобразить анимированный индикатор выполнения, который будет конкурировать с наиболее дорогостоящими JS-анимациями.

Вы можете изменить ключевые кадры и значения анимации по своему усмотрению, а затем применить класс animate<span> Веселись и наслаждайся!

 
.animate {
  animation: progress 2s linear infinite;
  -moz-animation: progress 2s linear infinite;
  -webkit-animation: progress 2s linear infinite;
  -ms-animation: progress 2s linear infinite;
  -o-animation: progress 2s linear infinite;
}

@-webkit-keyframes progress {
  from {
    background-position: 0 0;
  }
  to {
    background-position: -60px -60px;
  }
}

@-moz-keyframes progress {
  from {
    background-position: 0 0;
  }
  to {
    background-position: -60px -60px;
  }
}

@-ms-keyframes progress {
  from {
    background-position: 0 0;
  }
  to {
    background-position: -60px -60px;
  }
}

@-o-keyframes progress {
  from {
    background-position: 0 0;
  }
  to {
    background-position: -60px -60px;
  }
}

@keyframes progress {
  from {
    background-position: 0 0;
  }
  to {
    background-position: -60px -60px;
  }
}

После выполнения этих шагов вы получите динамичный, профессионально выглядящий индикатор выполнения, который можно адаптировать к ряду ситуаций и темам веб-сайта. Это всего лишь один пример множества конструктивных особенностей, которые могут быть реализованы после некоторых экспериментов с функциями CSS3. Большинство специфических атрибутов панели, таких как цветовая схема, размер элемента и даже угол затенения градиента, могут быть легко адаптированы к вашим требованиям дизайна.