Создаем анимированный шар с помощью CSS3
Различные эффекты всегда украшали сайт, но и с ними не стоит перебарщивать, с появлением css3 мы получили достаточно широкие возможности для воплощения своих креативных идей. Каскадные таблицы позволят создать уникальные вещи на сайте, все ограничивается только воображением, ну и конечно умением разработчика. В данном уроке мы рассмотрим как создать замечательный объемный шар, который будет прыгать, при этом создавая эффект трехмерности и изменения формы от прикосновения с поверхностью.
Данный эффект наглядно демонстрирует возможности трансформаций CSS3. Следует заметить, что трансформации будут работать только в браузерах поддерживающих свойства CSS3.
Шаг 1. HTML
Начнем с разметки HTML, У нас есть три простых элемента div
. “#ballWrapper” — основной контейнер, который содержит наш мяч.
1 2 3 4 |
<div id="ballWrapper"> <div id="ball"></div> <div id="ballShadow"></div> </div> |
Данный элемент div определяет положение мяча и высоту на экране. Элемент “#ball” формирует разметку для мяча, а “#ballShadow” содержит тень отдельно.
Шаг 2. CSS
Сначала установим ширину и высоту основного контейнера. Он будет занимать положение по центру экрана:
1 2 3 4 5 6 7 8 |
#ballWrapper { width: 140px; height: 300px; position: fixed; left: 50%; top: 50%; margin: -150px 0 0 -70px; } |
Координаты контейнера имеют значения ’50%’, а для полей используются отрицательные значения равные половине высоты и ширины. Так мяч центрируется на экране.
1 2 3 4 5 6 7 8 9 |
#ball { width: 140px; height: 140px; border-radius: 70px; background: linear-gradient(top, rgba(187,187,187,1) 0%,rgba(119,119,119,1) 99%); box-shadow: inset 0 -5px 15px rgba(255,255,255,0.4), inset -2px -1px 40px rgba(0,0,0,0.4), 0 0 1px #000; } |
Мы устанавливаем для мяча равные ширину и высоту, а для свойства ‘border-radius’ значение ’70px’ (которое является половиной оригинальной высоты и шириной). В итоге получается круглая форма.
Элемент получает линейный фон и 3 разных уровня теней, чтобы сформировать 3D эффект. Первый уровень тени предназначен для формирования темной зоны внизу мяча. Второй уровень формирует рассеянное свечение также внизу мяча. А третий уровень формирует размытую тень позади контура мяча
Если взглянуть на мяч, то видна небольшая овальная светлая форма, которая формирует эффект отражения. Вот код, который его формирует:
1 2 3 4 5 6 7 8 9 10 |
#ball::after { content: ""; width: 80px; height: 40px; position: absolute; left: 30px; top: 10px; background: linear-gradient(top, rgba(232,232,232,1) 0%,rgba(232,232,232,1) 1%,rgba(255,255,255,0) 100%); border-radius: 40px / 20px; } |
Используется псевдо-элемент CSS ::after, который получает линейный градиент с непрозрачностью. В дополнение устанавливаем скругленные углы рамки ’40px / 20px’ формируя овальную форму. Теперь установим тень мяча:
1 2 3 4 5 6 7 8 9 10 11 12 |
#ballShadow { width: 60px; height: 75px; position: absolute; z-index: 0; bottom: 0; left: 50%; margin-left: -30px; background: rgba(20, 20, 20, .1); box-shadow: 0px 0 20px 35px rgba(20,20,20,.1); border-radius: 30px / 40px; } |
Здесь снова используются свойства для центрирования тени. Но она смещается вниз элемента ‘#ballWrapper’. Также добавляет полупрозрачный фон, тень и скругленная рамка.
Начнем с добавления свойства анимации для всего мяча:
1 2 3 |
#ball { animation: jump 1s infinite; } |
Здесь определяется имя анимации (jump), ее длительность (1 секунда) и количество раз выполнения ( в нашем случае значение ‘infinite’ определяет бесконечное выполнение анимации).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
@keyframes jump { 0% { top: 0; } 50% { top: 140px; height: 140px; } 55% { top: 160px; height: 120px; border-radius: 70px / 60px; } 65% { top: 120px; height: 140px; border-radius: 70px; } 95% { top: 0; } 100% { top: 0; } } |
Здесь происходит работа со свойством ‘top’ мяча. Начиная с 0 до 160 и назад до 0. В середине анимации также также изменяется свойство ‘border-radius’ — так формируется «удар» мяча о фон.
1 2 3 |
#ballShadow { animation: shrink 1s infinite; } |
Здесь используются те же значения, что и для мяча, только с другой анимацией, которая называется shrink:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
@-keyframes shrink { 0% { bottom: 0; margin-left: -30px; width: 60px; height: 75px; background: rgba(20, 20, 20, .1); box-shadow: 0px 0 20px 35px rgba(20,20,20,.1); border-radius: 30px / 40px; } 50% { bottom: 30px; margin-left: -10px; width: 20px; height: 5px; background: rgba(20, 20, 20, .3); box-shadow: 0px 0 20px 35px rgba(20,20,20,.3); border-radius: 20px / 20px; } 100% { bottom: 0; margin-left: -30px; width: 60px; height: 75px; background: rgba(20, 20, 20, .1); box-shadow: 0px 0 20px 35px rgba(20,20,20,.1); border-radius: 30px / 40px; } } |
В завершении добавим эффект для нажатия кнопки мыши. Мяч будет удаляться от нас. Для достижения эффекта используем псевдо-класс ‘:active‘, добавляется трансформация и изменение свойства ‘scale’:
1 2 3 4 5 6 7 8 |
#ballWrapper { transform: scale(1); transition: all 5s linear 0s; } #ballWrapper:active { transform: scale(0); } |
Материал взят из зарубежного источника. И представлен исключительно в ознакомительных целях.
Читайте также:
Опубликовал Cooper 02.06.2012 в 16:22, в категории CSS. Вы можете следить за комментариями через RSS 2.0. Вы можете перейти в конец записи и оставить комментарий. Пинги запрещены. |