- Перелистывающийся баннер с кнопками навигации и прогрессбаром: используем плагин Cycle2 для jQuery
- 15 CSS Banners
- Author
- Links
- Made with
- About a code
- Banner Ad
- Author
- Links
- Made with
- About a code
- Responsive Banners
- Author
- Links
- Made with
- About a code
- Banners
- Author
- Links
- Made with
- About a code
- Banner Animation: Video Game Images
- Author
- Links
- Made with
- About a code
- Animated Scrolling Banner
- Author
- Links
- Made with
- About a code
- SVG Geometric Sale Banners
- Author
- Links
- Made with
- About a code
- CSS-Tricks-Netlify-Banner
- Author
- Links
- Made with
- About a code
- Responsive Horizontal Banner Using CSS Backgrounds
- Author
- Links
- Made with
- About a code
- Summer CSS Banner Ad
- Author
- Links
- Made with
- About a code
- Holidays Banner
- Author
- Links
- Made with
- About a code
- SVG Banner AD
- Author
- Links
- Made with
- About a code
- Pure CSS Animated Ad Banner
- Author
- Links
- Made with
- About a code
- High Performance Django Ad
- Author
- Анимированный баннер на CSS3
- Разметка HTML
- Потерялся?
- Расслабься - мы поможем.
- CSS
- Обратная совместимость
- Основа
- Анимации
- Заключение
- 5 последних уроков рубрики «CSS»
- Забавные эффекты для букв
- Реализация забавных подсказок
- Анимированные буквы
- Солнцезащитные очки от первого лица
Перелистывающийся баннер с кнопками навигации и прогрессбаром: используем плагин Cycle2 для jQuery
При работе над веб-проектом поступило задание от заказчика сделать особый баннер на главной странице сайта.
Баннер должен удовлетворять таким требованиям:
1. Баннер представляет собой несколько изображений, они автоматически перелистываются спустя некоторый интервал времени. В нашем примере баннеров 5.
2. Каждая картинка-баннер является активной ссылкой на ту или иную страницу сайта (например, со специальными предложениями).
3. Под баннером расположены кнопки переключения баннеров. Кнопка, соответствующая текущему баннеру, выделена другим цветом (блок 1 на рисунке).
4. Под баннером и над кнопками располагается прогрессбар: цветная линия, плавно движущаяся слева направо по мере показа каждого баннера. По аналогии с прогрессбаром в программе-видеоплеере при воспроизведении ролика. Это блок 2 на рисунке.
Вот что нарисовал дизайнер, и требовалось реализовать:
Нашлась подходящая библиотека: это плагин Cycle2 для jQuery.
Ссылка на сайт плагина с подробной документацией и примерами: http://jquery.malsup.com/cycle2/.
Ознакомиться со всеми тонкостями и настройками при использовании плагина Cycle2 вы можете на странице документации: http://jquery.malsup.com/cycle2/api/, либо изучив примеры: http://jquery.malsup.com/cycle2/demo/. Мы же разберем решение только нашей задачи.
В секции head страницы добавим ссылки на jQuery и Cycle2. На нашем сайте они лежат в каталоге /js/:
HTML-код для пяти баннеров на странице выглядит так:
Блок баннера заключен в тег div c Этот id мы используем в css-файле для задания некоторых индивидуальных параметров расположения блока, не имеющих отношения к нашей статье.
— этот атрибут указывает, в каком вложенном теге содержатся перелистываемые блоки. Т.к. мы листаем блоки
data-cycle-pager= ".custom-pager"
являются переключаемыми баннерами со ссылками на страницы сайта.
— блок для отрисовки прогрессбара.
— блок для отрисовки кнопок навигации.
Рассмотрим CSS-стили для нашего баннера
.custom-pager < /*стиль блока навигации*/ margin-left:435px; margin-top:5px; overflow:hidden; >a.custom-pager-button < /*стили неактивной кнопки навигации*/ display:block; float:left; margin-right:5px; width:29px; height:13px; overflow:hidden; background-image:url(/img/newdis/ob-in.png); background-position:left top; background-repeat:no-repeat; cursor: pointer; >.custom-pager a.cycle-pager-active < /*стили для активной кнопки навигации*/ background-image:url(/img/newdis/ob.png) !important; cursor: pointer; >.custom-pager > * < cursor: pointer;>/*курсор при наведении на кнопки навигации - как у ссылки*/ #progress < /*стиль для прогрессбара*/ margin-top:3px; height: 3px; width: 0px; background: #860b70; z-index: 500; >
С этими параметрами у нас будет работать все, кроме прогрессбара.
Для реализации прогрессбара был доработан код из примера к Cycle2: http://jquery.malsup.com/cycle2/demo/progress.php.
Реализация анимации прогрессбара
В примере прогрессбар движется от 0 до 100% при показе каждого баннера. Нам же необходимо, чтобы прогрессбар был похож на воспроизведение видео в видеоплеере — двигался бы плавно от 0 до 100% по мере показа всех пяти баннеров.
Вот что получилось в результате:
var progress = $('#progress'), slideshow = $( '.cycle-slideshow' ); /*перед переключением баннера - приостановим движение прогрессбара в его текущем положении*/ slideshow.on( 'cycle-initialized cycle-before', function( e, opts ) < if(opts.slideNum==undefined) number=1; /*на первом баннере вместо номера баннера возвращается undefined, подставим первый номер*/ else number=opts.slideNum; number--; w=Math.round(100*number/opts.slideCount); /*вычислим текущее положение прогрессбара в % относительно предыдущего баннера*/ progress.stop(true).css( 'width', w+'%' ); /*остановим анимацию прогрессбара в найденном положении*/ >); /* после переключения баннера - возобновим анимацию от текущего положения прогрессбара к его положению относительно следующего баннера */ slideshow.on( 'cycle-initialized cycle-after', function( e, opts ) < if(opts.slideNum==undefined) number=1;/*на первом баннере вместо номера баннера возвращается undefined, подставим первый номер*/ else number=opts.slideNum; w=Math.round(100*number/opts.slideCount); /*найдем положение прогрессбара в % относительно текущего баннера*/ if(w>100) w=100; //заглушка на случай ошибки /*возобновим анимацию прогрессбара с текущего положения до положения в % относительно следующего баннера*/ progress.animate(< width: w+'%' >, opts.timeout, 'linear' ); >);
Как видно из комментариев к коду, используются обработчики двух событий: начала анимации переключения баннера и конца анимации переключения баннера. В обработчики передается объект opts, содержащий свойства блока баннеров.
В обработчике начала переключения баннера мы останавливаем анимацию в положении предыдущего баннера, т.е. баннера, который был до переключения.
Затем, в обработчике конца переключения баннера мы возобновляем анимацию от текущего ее положения к положению относительно текущего баннера, т.е. баннера, который появился после переключения.
Индекс текущего баннера мы можем узнать с помощью свойства opts.slideNum объекта opts.
Общее число баннеров мы узнаем в свойстве opts.slideCount.
Наконец, указать интервал времени для анимации равным времени показа мы можем, узнав время показа в свойстве opts.timeout. Это значение мы задавали в html-коде с помощью атрибута data-cycle-timeout= «10000».
15 CSS Banners
Collection of free HTML and CSS banner code examples from Codepen and other resources.
Author
Links
Made with
About a code
Banner Ad
Compatible browsers: Chrome, Edge, Firefox, Opera, Safari
Author
Links
Made with
About a code
Responsive Banners
Compatible browsers: Chrome, Edge, Firefox, Opera, Safari
Author
Links
Made with
About a code
Banners
Compatible browsers: Chrome, Edge, Firefox, Opera, Safari
Author
Links
Made with
About a code
Banner Animation: Video Game Images
Compatible browsers: Chrome, Edge, Firefox, Opera, Safari
Author
Links
Made with
About a code
Animated Scrolling Banner
Compatible browsers: Chrome, Edge, Firefox, Opera, Safari
Author
Links
Made with
About a code
SVG Geometric Sale Banners
SVG geometric sale banners with simple jQuery & CSS animations.
Compatible browsers: Chrome, Edge, Firefox, Opera, Safari
Author
Links
Made with
About a code
CSS-Tricks-Netlify-Banner
Compatible browsers: Chrome, Edge, Firefox, Opera, Safari
Author
Links
Made with
About a code
Responsive Horizontal Banner Using CSS Backgrounds
Compatible browsers: Chrome, Edge, Firefox, Opera, Safari
Author
Links
Made with
About a code
Summer CSS Banner Ad
Compatible browsers: Chrome, Edge, Firefox, Opera, Safari
Author
Links
Made with
About a code
Holidays Banner
Compatible browsers: Chrome, Edge, Firefox, Opera, Safari
Author
Links
Made with
About a code
SVG Banner AD
Compatible browsers: Chrome, Edge, Firefox, Opera, Safari
Author
Links
Made with
About a code
Pure CSS Animated Ad Banner
Compatible browsers: Chrome, Edge, Firefox, Opera, Safari
Author
Links
Made with
About a code
High Performance Django Ad
Experimenting with ads for lincolnloop.com’s book titled «High Performance Django». Super simple, nothing fancy.
Compatible browsers: Chrome, Edge, Firefox, Opera, Safari
Author
Анимированный баннер на CSS3
Сделаем рекламный баннер с помощью CSS3. В настоящее время полностью поддерживают анимации CSS3 только браузеры Firefox и WebKit. Но достаточно просто заставить баннер работать в других браузерах. Однако, не следует ожидать великолепного функционирования везде (особенно в IE 7 и старше) экспериментов с новейшими техниками CSS.
Примечание: Для сохранения пространства на странице все префиксы производителей браузеров опущены. Смотрите код в исходниках.
Разметка HTML
Сначала рассмотрим структуру баннера в HTML. На данном этапе мы должны представить, как будет функционировать анимация:
Потерялся?
Расслабься - мы поможем.
Для более глубокого понимания структуры разметки сфокусируемся на лодке:
С лодкой происходят три анимации:
- Выскальзывание лодки слева. Применяется для неупорядоченного списка (группа).
- Имитация раскачивания лодки на воде. Применяется к элементу списка (лодка).
- Появление знака вопроса. Применяется к элементу div (знак вопроса).
Если посмотреть на демонстрационную страницу, то можно увидеть, что анимация для пункта списка (лодки) также действует на элемент div внутри него (Знак вопроса). Также анимация «выскальзывания» для неупорядоченного списка действует на пункт списка (лодку и знак вопроса).
Следовательно, можно сделать вывод, что дочерние элементы получают анимации родителей в дополнение к собственным действиям. Теперь остается только перечислить структуры родитель/наследник.
CSS
Прежде, чем начинать разбор создания анимации, нужно обеспечить обратную совместимость со старыми браузерами.
Обратная совместимость
Мы обеспечим обратную совместимость просто задав стили разметки так, как будто анимаций CSS не существует совсем. Если кто-то будет смотреть страницу в старом браузере, то увидит обычную статичную картинку, а не пустое белое место.
Например: если использовать CSS? подобный ниже приведенному, то будут проблемы:
/* НЕПРАВИЛЬНО! */ @keyframe our-fade-in-animation < 0% 100% > div < opacity: 0; /* Данный div скрыт по умолчанию - ой!*/ animation: our-fade-in-animation 1s 1; >
Если браузер не поддерживает анимации, то элемент div останется невидимым для пользователя.
А вот так мы обеспечим обратную совместимость со старыми браузерами:
/* ВЕРНО */ @keyframe our-fade-in-animation < 0% 100% > div < opacity: 1; /* Данный div видим по умолчанию */ animation: our-fade-in-animation 1s 1; >
Теперь элемент div будет выводиться даже если анимация не может запуститься. А в современных браузерах div будет сначала скрыт в ходе анимации.
Основа
Теперь мы знаем как обеспечить обратную совместимость (что поможет избежать проблем при работе с реальными проектами). Пришла пора создать основу нашего кода CSS.
Нужно помнить о 3 моментах:
- Так как баннер будет использоваться на разных сайтах, мы сделаем все наши селекторы CSS особенными. Все они будут начинаться с идентификатора #ad-1. Таким образом мы постараемся избежать перекрытия нашего кода и кода сайта.
- Мы намерено игнорируем задержку анимации в установках. Если использовать задержку анимации при задании стилей с видимостью элементов по умолчанию, то структура баннера будет нарушаться внезапным исчезновением или появлением частей картинки после завершения анимации. Задержка анимации имитируется длительностью и настройкой кадров.
- Когда возможно используем одну анимацию для нескольких элементов. Таким образом мы экономим время и сокращаем размер кода.
Итак создаем основу для нашего баннера. Установим для нее относительное позиционирование чтобы внутренние элементы можно было корректно размещать. Также будет скрывать все, что выходит за рамки элемента:
Затем задаем стили для текста и полей ввода. Вызываем соответствующие анимации. Также нужно убедиться, что содержание имеет наивысший z-index для движущихся частей, чтобы они не перекрывались:
#ad-1 #content < width: 325px; float: right; margin: 40px; text-align: center; z-index: 4; position: relative; overflow: visible; >#ad-1 h2 < font-family: 'Alfa Slab One', cursive; color: #137dd5; font-size: 50px; line-height: 50px; text-shadow: 0px 0px 4px #fff; animation: delayed-fade-animation 7s 1 ease-in-out; /* Появление h2 с имитацией задержки */ >#ad-1 h3 < font-family: 'Boogaloo', cursive; color: #202224; font-size: 31px; line-height: 31px; text-shadow: 0px 0px 4px #fff; animation: delayed-fade-animation 10s 1 ease-in-out; /* Появление h3 с имитацией задержки */ >#ad-1 form < margin: 30px 0 0 6px; position: relative; animation: form-animation 12s 1 ease-in-out; /* Выскальзывание формы для ввода email адреса с имитацией задержки */ >#ad-1 #email < width: 158px; height: 48px; float: left; padding: 0 20px; font-size: 16px; font-family: 'Lucida Grande', sans-serif; color: #fff; text-shadow: 1px 1px 0px #a2917d; border-top-left-radius: 5px; border-bottom-left-radius: 5px; border:1px solid #a2917d; outline: none; box-shadow: -1px -1px 1px #fff; background-color: #c7b29b; background-image: linear-gradient(bottom, rgb(216,201,185) 0%, rgb(199,178,155) 100%); >#ad-1 #email:focus < background-image: linear-gradient(bottom, rgb(199,178,155) 0%, rgb(199,178,155) 100%); >#ad-1 #submit < height: 50px; float: left; cursor: pointer; padding: 0 20px; font-size: 20px; font-family: 'Boogaloo', cursive; color: #137dd5; text-shadow: 1px 1px 0px #fff; border-top-right-radius: 5px; border-bottom-right-radius: 5px; border:1px solid #bcc0c4; border-left: none; background-color: #fff; background-image: linear-gradient(bottom, rgb(245,247,249) 0%, rgb(255,255,255) 100%); >#ad-1 #submit:hover
Теперь зададим стили для воды и вызовем соответствующую анимацию:
#ad-1 ul#water < /* Если нужна другая анимация для воды, ее можно добавить здесь */ >#ad-1 li#water-back < width: 1200px; height: 84px; background-image: url(../images/ad-1/water-back.png); background-repeat: repeat-x; z-index: 1; position: absolute; bottom: 10px; left: -20px; animation: water-back-animation 3s infinite ease-in-out; /* Имитация плеска волн */ >#ad-1 li#water-front < width: 1200px; height: 158px; background-image: url(../images/ad-1/water-front.png); background-repeat: repeat-x; z-index: 3; position: absolute; bottom: -70px; left:-30px; animation: water-front-animation 2s infinite ease-in-out; /* Другая имитация плеска волн. Анимация будет выполняться немного быстрее для создания эффекта перспективы. */ >
Зададим стили для лодки и её элементов. Также вызываем соответствующие анимации:
#ad-1 ul#boat < width: 249px; height: 215px; z-index: 2; position: absolute; bottom: 25px; left: 20px; overflow: visible; animation: boat-in-animation 3s 1 ease-out; /* Slides the group in when ad starts */ >#ad-1 ul#boat li < width: 249px; height: 215px; background-image: url(../images/ad-1/boat.png); position: absolute; bottom: 0px; left: 0px; overflow: visible; animation: boat-animation 2s infinite ease-in-out; /* Simulate the boat bobbing on the water - similar to the animation already used on the water itself. */ >#ad-1 #question-mark < width: 24px; height: 50px; background-image: url(../images/ad-1/question-mark.png); position: absolute; right: 34px; top: -30px; animation: delayed-fade-animation 4s 1 ease-in-out; /* Fade in the question mark */ >
Теперь создадим стили для облаков. Для них мы будем использовать анимацию с эффектом бесконечного движения. иллюстрация демонстрирует суть идеи:
#ad-1 #clouds < position: absolute; top: 0px; z-index: 0; animation: cloud-animation 30s infinite linear; /* Прокручиваем облака влево, сбрасываем и повторяем */ >#ad-1 #cloud-group-1 < width:720px; position: absolute; left:0px; >#ad-1 #cloud-group-2 < width: 720px; position: absolute; left: 720px; >#ad-1 .cloud-1 < width: 172px; height: 121px; background-image: url(../images/ad-1/cloud-1.png); position: absolute; top: 10px; left: 40px; >#ad-1 .cloud-2 < width: 121px; height: 75px; background-image: url(../images/ad-1/cloud-2.png); position: absolute; top: -25px; left: 300px; >#ad-1 .cloud-3 < width: 132px; height: 105px; background-image: url(../images/ad-1/cloud-3.png); position: absolute; top: -5px; left: 530px; >
Анимации
Напоминание: Начиная с данной точки ничего в действительности не анимируется. Если посмотреть наш баннер сейчас, то вы увидите статичную картинку. Здесь создаются анимации, которые вызываются в выше приведенном коде.
Теперь в вдохнем жизнь в нашу прекрасную статичную картинку:
/* Анимация с имитацией задержки используется для вывода нескольких элементов. Имитация задержки осуществляется запуском процесса с 80% продолжения анимации (а не сразу). Так можно имитировать любую задержку: */ @keyframes delayed-fade-animation < 0% 80% 100% > /* Анимация для вывода формы с адресом email и кнопкой. Также используется имитация зхадержки */ @keyframes form-animation < 0% 90% 95% 100% > /* Данная анимация используется для вывода лодки за экрана в начале ролика: */ @keyframes boat-in-animation < 0% 100% > /* Анимация для облаков. Первая группа облаков начинает движение из центра, а вторая - справа от экрана. Первая группа медленно выводится с экрана, а вторая - появляется справа. Как только левая группа полностью скроется, облака очень быстро возвращаются в начальное положение: */ @keyframes cloud-animation < 0% 99.9999% 100% > /* Три последних анимации практически одинаковые - разница заключается в позиционировании элементов. Они имитируют плеск волн океана: */ @keyframes boat-animation < 0% 25% 70% 100% > @keyframes water-back-animation < 0% 25% 70% 100% > @keyframes water-front-animation < 0% 25% 70% 100% >
Заключение
В ходе данного урока мы изучили несколько ключевых концепций:
- Элементы наследники получают анимации своих родителей в дополнение к своим анимациям.
- При создании баннера надо стремиться использовать уникальный идентификатор, чтобы избежать перекрытия кода с существующим проектом CSS.
- Положение и стиль элементов нужно выбирать так, как будто анимация не доступна, чтобы обеспечить обратную совместимость.
- По возможность нужно использовать одну анимацию для нескольких элементов.
Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: tympanus.net/codrops/2012/01/10/animated-web-banners-with-css3/
Перевел: Сергей Фастунов
Урок создан: 26 Января 2012
Просмотров: 36127
Правила перепечатки
5 последних уроков рубрики «CSS»
Забавные эффекты для букв
Реализация забавных подсказок
Небольшой концепт забавных подсказок, которые реализованы на SVG и anime.js. Помимо особого стиля в примере реализована анимация и трансформация графических объектов.
Анимированные буквы
Солнцезащитные очки от первого лица
Прикольный эксперимент веб страницы отображение которой осуществляется “от первого лица” через солнцезащитные очки.