CSS3 эффекты при наведении с использованием переходов, преобразований и анимации ( Transitions, Transformations, Animations)
Этот пост полностью посвящён примерам с CSS3 эффектами. Мы узнаем больше об эффектах при наведении с использованием переходов, превращений и анимации. Все эффекты приведены с исходным кодом и визуальными примерами.
Эти примеры помогут вам создавать и украшать веб-сайты весело, легко, быстро и эффективно, а также расширит возможности посетителей сайта, потому что вы можете создать интересные эффекты без использования JavaScript или тяжелых флэш-анимаций.
Vendor – префиксы: Все, что вы должны о них знать!
Прежде чем начать, необходимо получить правильное представление о префиксах: [-webkit- | -moz- | -о- | -ms-], которые часто встречаются на этой странице. Вопрос в том, должны ли вы действительно использовать все из них в каждом конкретном случае. Например, Firefox справляется преобразованиями (transforms) с октября 2012 года без -moz- префикса, но если вы хотите иметь поддержку IE9, вам необходимо включить в код префикс -ms-. На этой странице включены префиксы только там, где это имеет смысл для текущего и будущего использования. Если вы обеспокоены обратной совместимостью, обратите внимание на эту таблицу и добавляйте только то, что нужно.
Тип | Включения | Обратная совместимость | Для версии | Дата выпуска |
---|---|---|---|---|
transform (2d) | -webkit- | -moz- -o- -ms- | FF <= 15 Opera <= 12 IE 9 | 10/2012 10/2012 03/2011 |
transform (3d) | -webkit- | -moz- | FF <= 15 | 10/2012 |
transition | -webkit- (for Android/Blackberry) | -moz- -o- | FF <= 15 Opera <= 12 | 10/2012 10/2012 |
animation | -webkit- | -moz- | FF <= 15 | 10/2012 |
backface-visibility | -webkit- | -moz- | FF <= 15 | 10/2012 |
@keyframes | -webkit- | -o- | Opera <= 12 | 10/2012 |
box-shadow | – | -webkit- (Для разных браузеров) | Разный | Разный |
Как вы видите, больше нет необходимости везде вставлять vendor – префиксы, большинство современных браузеров автоматически обновляются (или, по крайней мере, полу-автоматически) до последних версий и те дни остались в прошлом. Вообще, просто добавляйте -webkit- к не-префиксной версии, и этого будет достаточно. На этом, пожалуй закончим и давайте погрузимся в мир CSS3.
01: Размер изображения
.image:hover { -webkit-transform:scale(1.2); transform:scale(1.2);} .image { -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
02: Увеличение
.container:hover .image { -webkit-transform:scale(1.3); transform:scale(1.3);} .container { overflow:hidden; width:200px; height:150px;} .image { -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
03: Уменьшение
.container:hover .image { -webkit-transform:scale(1); transform:scale(1);} .container { overflow:hidden; width:200px; height:150px;} .image { -webkit-transform:scale(1.3); transform:scale(1.3); -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
04: Радиус границы и эффект тени
.image:hover { border-radius:50%; box-shadow: 0 10px 6px -6px grey;} .image { -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
05: Граница искажения радиуса
.image:hover { border-top-left-radius: 120px; border-bottom-right-radius: 120px; border-top-right-radius: 15px; border-bottom-left-radius: 15px;} .image { border-bottom-left-radius: 120px; border-top-right-radius: 120px; border-bottom-right-radius: 15px; border-top-left-radius: 15px; -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
06: Граница искажения радиуса II
.image:hover { border-top-left-radius: 30px 120px; border-bottom-right-radius: 30px 120px; border-bottom-left-radius: 15px; border-top-right-radius: 15px;} .image { border-top-left-radius: 15px; border-top-right-radius: 120px 30px; border-bottom-left-radius: 120px 30px; border-bottom-right-radius: 15px; -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
07: Светящиеся границы
.image:hover { -webkit-box-shadow: 0px 0px 15px 10px rgba(255, 255, 255, .75); box-shadow: 0px 0px 15px 10px rgba(255, 255, 255, .75);} .image { -webkit-box-shadow: 0px 0px 15px 5px rgba(0, 185, 233, .75); box-shadow: 0px 0px 15px 5px rgba(0, 185, 233, .75); -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
08: Вращение (2D)
.image:hover { -webkit-transform: rotate(45deg); transform: rotate(45deg);} .image { -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
09: Деформация
.image:hover { -webkit-transform: skew(0deg,20deg); transform: skew(0deg,20deg);} .image { -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
10: Сдвиг и непрозрачность
.image:hover { -webkit-transform: translate(20px,-50px); transform: translate(20px,-50px); opacity: 0.4;} .image { opacity: 1; -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
11: Разворот
.container:hover .image{ -webkit-transform: rotateY(180deg); -webkit-transform-style: preserve-3d; transform: rotateY(180deg); transform-style: preserve-3d;} .container .image, .container:hover .image { -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
12: Вертикальный Разворот
HTML
<div class="container"> <div class="carddiv"> <img class="frontofcard" src="img" alt="img"> <p class="backofcard">Text</p> </div> </div>
CSS
.carddiv { width:200px; height:150px; position:relative; -webkit-transform-style: preserve-3d; -webkit-transform-origin: 100% 75px; -webkit-transition: all 0.7s ease; transform-style: preserve-3d; transform-origin: 100% 75px; transition: all 0.7s ease;} .container:hover .carddiv { -webkit-transform: rotateX(-180deg); transform: rotateX(-180deg);} .frontofcard, .backofcard { width:200px; height:150px; position:absolute; left:0; -webkit-backface-visibility:hidden; backface-visibility:hidden;} .backofcard { padding-top:50px; -webkit-transform: rotateX(180deg); transform: rotateX(180deg);}
13: Трансформация
.image:hover { -webkit-box-shadow: 0px 0px 15px 15px #fff; box-shadow: 0px 0px 15px 15px #fff; border-radius:50%; opacity: 0.6; -webkit-transform: rotate(720deg); transform: rotate(720deg);} .image { opacity: 1; -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
14: Изображение с наложением текста и эффектом затухания
HTML
<div class="container"> <img src="" alt=""> <div class="textbox"> <p class="text">TEXT</p></div></div>
CSS
.container { position:relative;} .textbox:hover { opacity:1;} .text { padding-top: 50px;} .textbox { width:200px; height:150px; position:absolute; top:0; left:0; opacity:0; border-radius:5px; background-color: rgba(0,0,0,0.75); -webkit-box-shadow: 0px 0px 15px 2px rgba(255,255,255,.75); box-shadow: 0px 0px 15px 2px rgba(255,255,255,.75); -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
15: Изображение с наложением текста и эффектом масштабирования
HTML
<div class="container"> <img src="" alt=""> <div class="textbox"> <p class="text">TEXT</p></div></div>
CSS
.container { position:relative;} .container .textbox { width:200px; height:150px; position:absolute; top:0; left:0; -webkit-transform: scale(0); transform: scale(0); border-radius:5px; background-color: rgba(0,0,0,0.75); -webkit-box-shadow: 0px 0px 15px 2px rgba(255,255,255,.75); box-shadow: 0px 0px 15px 2px rgba(255,255,255,.75);} .container:hover .textbox { -webkit-transform: scale(1); transform: scale(1);} .text { padding-top: 50px;} .textbox { -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
16: Изображение с наложением текста и эффектом сдвига текста
HTML
<div class="container"> <img src="" alt=""> <div class="textbox"> <p class="text">TEXT</p></div></div>
CSS
.container { position:relative; overflow:hidden;} .container .textbox { width:200px; height:150px; position:absolute; top:0; left:0; margin-top:-160px; border-radius:5px; background-color: rgba(0,0,0,0.75); -webkit-box-shadow: inset 0px 0px 5px 2px rgba(255,255,255,.75); box-shadow: inset 0px 0px 5px 2px rgba(255,255,255,.75);} .container:hover .textbox { margin-top:0;} .text { padding-top: 50px;} .textbox { -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
17: Сдвиг текста и изображения при наведении
HTML
<div class="container"> <img src="" alt=""> <div class="textbox"> <p class="text">TEXT</p></div></div>
CSS
.container { position:relative; overflow:hidden; width:200px; height:150px;} .container .textbox { position:absolute; top:0; left:0; width:200px; height:150px; margin-left:-210px;} .container:hover .textbox { margin-left:0;} .container img { margin-left:0;} .container:hover img { margin-left:210px;} .text { padding-top: 50px;} .container img, .textbox { -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
Примеры с 1 по 17:
Коротко о различных видах функции “easing“
Если вы посмотрите на некоторые из исходных кодов, вы, возможно, заметите, что все примеры используют функцию синхронизации [su_tooltip style=”red” position=”north” shadow=”yes” rounded=”yes” title=”Каскадные таблицы стилей” content=”CSS”]CSS3 [/su_tooltip] ease
со временем перехода 0,7 секунд. Это сделано для того, чтобы подчеркнуть реальный эффект, а не переходную функцию за ним. Тем не менее, вы можете не только настроить время перехода, но также способ перехода обрабатываемый браузером. Вот некоторые из возможных вариантов с объяснением, что это на самом деле:
ease
: анимация начинается быстро, но значительно замедляется в конце.ease-in-out
: анимация начинается и заканчивается медленно.ease-in
: анимация начинается очень медленно и достигает полной скорости в конце.ease-out
: анимация начинается на полной скорости, но постепенно замедляется.linear
: анимация имеет ту же скорость от начала до конца (без замедления).
Скорее всего, это все, что вам когда-нибудь понадобится. Тем не менее, если вы своего рода перфекционист или просто хотите иметь что-то, сделанное именно так, как вам нравится, вы можете использовать свой собственный анимационный переход, используя cubic-bezier()
. Чтобы его использовать, просто замените слово ease
в приведенных примерах на что-то вроде cubic-bezier(1,-0.75,0.5,1.2)
. Первые и последние два значения не более чем простые контрольные точки, представленных как (x1, y1, x2, y2) на графике функции. Не важно, что, функция начинается (0,0) и заканчивается в точке (1,1). Но с этими двумя контрольными точками, вы можете влиять на путь между (0,0) и (1,1). Поэкспериментируйте с величинами для регулировки функции синхронизации, в зависимости от ваших целей. Например cubic-bezier(0.42,0,1,1)
имеет тот же эффект, как и ease-in,
то время как cubic-bezier(0,0,0.58,1)
имеет тот же эффект, как ease-out
.
Итак продолжим:
18: Плавная смена двух изображений
HTML
<div class="container"> <img class="image2" src="img2" alt=""> <img class="image1" src="img1" alt=""> </div>
CSS
.container { position:relative; width:200px; height:150px;} .container img { position:absolute; top:0; left:0; -webkit-transition: opacity 1.1s ease; transition: opacity 1.1s ease;} .container:hover .image1 { opacity:0;}
19: Простой CSS3 слайдер изображений (без JavaScript!)
HTML
<div class="container"> <img src="img5" alt="img5"> <img src="img4" alt="img4"> <img src="img3" alt="img3"> <img src="img2" alt="img2"> <img src="img1" alt="img1"> </div>
CSS
.container { position:relative; width:200px; height:150px;} .container img { position:absolute; top:0; left:0;} .container:hover img { -webkit-animation-name: slider; -webkit-animation-timing-function: ease; -webkit-animation-duration: 10s; -webkit-animation-iteration-count: infinite; animation-name: slider; animation-timing-function: ease; animation-duration: 10s; animation-iteration-count: infinite;} @-webkit-keyframes slider { 0% {opacity:1;} 20% {opacity:0;} 80% {opacity:0;} 100% {opacity:1;}} @keyframes slider { 0% {opacity:1;} 20% {opacity:0;} 80% {opacity:0;} 100% {opacity:1;}} .container img:nth-child(1) {-webkit-animation-delay: 8s; animation-delay: 8s;} .container img:nth-child(2) {-webkit-animation-delay: 6s; animation-delay: 6s;} .container img:nth-child(3) {-webkit-animation-delay: 4s; animation-delay: 4s;} .container img:nth-child(4) {-webkit-animation-delay: 2s; animation-delay: 2s;} .container img:nth-child(5) {-webkit-animation-delay: 0s; animation-delay: 0s;}
20: Расширенный CSS3 слайдер изображений (без JavaScript!)
HTML
<div class="container"> <img src="img5" alt="img5"> <img src="img4" alt="img4"> <img src="img3" alt="img3"> <img src="img2" alt="img2"> <img src="img1" alt="img1"> <p class="hovertext">Hover here</p> </div>
CSS
.container { position:relative; width:200px; height:150px;} .container img { position:absolute; top:0; left:0; opacity:0;} .container:hover img { -webkit-animation-name: slider; -webkit-animation-timing-function: ease; -webkit-animation-duration: 10s; -webkit-animation-iteration-count: infinite; animation-name: slider; animation-timing-function: ease; animation-duration: 10s; animation-iteration-count: infinite;} @-webkit-keyframes slider { 0% {opacity:0;-webkit-transform: rotate(0) scale(0.5) skew(30deg,20deg);} 20% {opacity:1;-webkit-transform: rotate(0) scale(1) skew(0deg,0deg);} 30% {opacity:0;-webkit-transform: rotate(-360deg) scale(0) skew(0deg,0deg);} 100% {opacity:0;-webkit-transform: rotate(0) scale(0.5) skew(30deg,20deg);}} @keyframes slider { 0% {opacity:0;transform: rotate(0) scale(0.5) skew(30deg,20deg);} 20% {opacity:1;transform: rotate(0) scale(1) skew(0deg,0deg);} 30% {opacity:0;transform: rotate(-360deg) scale(0) skew(0deg,0deg);} 100% {opacity:0;transform: rotate(0) scale(0.5) skew(30deg,20deg);}} .container img:nth-of-type(1) {-webkit-animation-delay: 8s;animation-delay: 8s;} .container img:nth-of-type(2) {-webkit-animation-delay: 6s;animation-delay: 6s;} .container img:nth-of-type(3) {-webkit-animation-delay: 4s;animation-delay: 4s;} .container img:nth-of-type(4) {-webkit-animation-delay: 2s;animation-delay: 2s;} .container img:nth-of-type(5) {-webkit-animation-delay: 0s;animation-delay: 0s;} .container .hovertext { position: absolute; top:60px; left:30px; font-size:1.5em; color: rgba(255,255,255,1); -webkit-transition: all 0.7s ease; transition: all 0.7s ease;} .container:hover .hovertext { top:20px; color: rgba(255,255,255,0); -webkit-transition: all 0.7s ease; transition: all 0.7s ease;}
21: Эффект встряхивания изображения
@-webkit-keyframes shakeit { 0% { -webkit-transform: rotate(0deg) translate(2px, 1px); } 10% { -webkit-transform: rotate(2deg) translate(1px, 2px); } 20% { -webkit-transform: rotate(-2deg) translate(3px, 0px) ; } 30% { -webkit-transform: rotate(0deg) translate(0px, -2px); } 40% { -webkit-transform: rotate(-2deg) translate(-1px, 1px); } 50% { -webkit-transform: rotate(2deg) translate(1px, -2px); } 60% { -webkit-transform: rotate(0deg) translate(3px, -1px); } 70% { -webkit-transform: rotate(2deg) translate(-2px, -1px); } 80% { -webkit-transform: rotate(-2deg) translate(1px, 1px); } 90% { -webkit-transform: rotate(0deg) translate(-2px, -2px); } 100% { -webkit-transform: rotate(2deg) translate(-1px, 2px); }} @keyframes shakeit { 0% { transform: rotate(0deg) translate(2px, 1px); } 10% { transform: rotate(2deg) translate(1px, 2px); } 20% { transform: rotate(-2deg) translate(3px, 0px) ; } 30% { transform: rotate(0deg) translate(0px, -2px); } 40% { transform: rotate(-2deg) translate(-1px, 1px); } 50% { transform: rotate(2deg) translate(1px, -2px); } 60% { transform: rotate(0deg) translate(3px, -1px); } 70% { transform: rotate(2deg) translate(-2px, -1px); } 80% { transform: rotate(-2deg) translate(1px, 1px); } 90% { transform: rotate(0deg) translate(-2px, -2px); } 100% { transform: rotate(2deg) translate(-1px, 2px); }} .shakeit img:hover { -webkit-animation-name: shakeit; -webkit-animation-duration: 1s; -webkit-animation-timing-function: linear; -webkit-animation-iteration-count: infinite; animation-name: shakeit; animation-duration: 1s; animation-timing-function: linear; animation-iteration-count: infinite;}
22: Изменение цвета и радиуса углов
@-webkit-keyframes changes { 0% {box-shadow: 0px 0px 15px #FFFFFF; background-color: #000000;} 10% {box-shadow: 0px 0px 15px #2F4F4F; background-color: #0000FF;} 20% {box-shadow: 0px 0px 15px #800080; background-color: #FF00FF;} 30% {box-shadow: 0px 0px 15px #FF0000; background-color: #008080;} 40% {box-shadow: 0px 0px 15px #FFFF00; background-color: #00FF00;} 50% {box-shadow: 0px 0px 15px #000000; background-color: #FFFFFF;} 60% {box-shadow: 0px 0px 15px #0000FF; background-color: #FFFF00;} 70% {box-shadow: 0px 0px 15px #FF00FF; background-color: #FF0000;} 80% {box-shadow: 0px 0px 15px #008080; background-color: #800080;} 90% {box-shadow: 0px 0px 15px #00FF00; background-color: #2F4F4F;} 100% {box-shadow: 0px 0px 15px #FFFFFF; background-color: #000000;}} @keyframes changes { 0% {box-shadow: 0px 0px 15px #FFFFFF; background-color: #000000;} 10% {box-shadow: 0px 0px 15px #2F4F4F; background-color: #0000FF;} 20% {box-shadow: 0px 0px 15px #800080; background-color: #FF00FF;} 30% {box-shadow: 0px 0px 15px #FF0000; background-color: #008080;} 40% {box-shadow: 0px 0px 15px #FFFF00; background-color: #00FF00;} 50% {box-shadow: 0px 0px 15px #000000; background-color: #FFFFFF;} 60% {box-shadow: 0px 0px 15px #0000FF; background-color: #FFFF00;} 70% {box-shadow: 0px 0px 15px #FF00FF; background-color: #FF0000;} 80% {box-shadow: 0px 0px 15px #008080; background-color: #800080;} 90% {box-shadow: 0px 0px 15px #00FF00; background-color: #2F4F4F;} 100% {box-shadow: 0px 0px 15px #FFFFFF; background-color: #000000;}} .changes:hover { -webkit-animation-name: changes; -webkit-animation-duration: 10s; -webkit-animation-timing-function: linear; -webkit-animation-iteration-count: infinite; animation-name: changes; animation-duration: 10s; animation-timing-function: linear; animation-iteration-count: infinite;}
23: Преобразование формы
.container { width:200px; height:150px; position:relative;} .textarea { background-color:#FFF; top:50px; left:25px; width:160px; height:35px; position:absolute; border: 2px solid #333; box-shadow: 0px 0px 15px #000; -webkit-transition: all 0.7s ease; transition: all 0.7s ease;} .textarea:focus { background-color:#000030; top:0; left:0; height:150px; width:200px; border-radius:5px; border: 2px solid #d4d0ba; box-shadow: 0px 0px 15px #FFFFFF;}
24: Расширяющийся блок для кода
HTML
<div class="container outer"> <div class="inner"> Content with test-linebreaks: <br><br><br> <br><br><br><br> Content ends here</div> </div>
CSS
.container { position:relative;} .container:after { text-align: center; position: absolute; background:#999; top: 17px; right: -28px; width: 120px; height: 1.6em; font-size: 1.1em; content: "TEXT"; -webkit-transform: rotate(45deg); transform: rotate(45deg); } .outer, .outer:hover { -webkit-transition: all 0.7s ease; transition: all 0.7s ease;} .outer{ color: #000; background: #DDD; overflow: hidden;} .outer:hover { color: #FFF; background: #666; overflow: hidden;} .inner { max-height: 110px; overflow: auto; -webkit-transition: max-height 1.7s ease; transition: max-height 1.7s ease;} .outer:hover > .inner { max-height: 1200px; -webkit-transition: max-height 3.5s ease 0.7s; transition: max-height 3.5s ease 0.7s;}
25: HTML подсказка
HTML
<div class="container"> <img src="" alt=""> <div class="tooltip"> <p class="tooltiptxt">Got it!</p></div></div>
CSS
.tooltip { position: relative; opacity: 0; color: #FFF; top: -100px; left: 0px; width: 180px; padding: 10px; border-radius: 25px; -webkit-border-radius: 25px; background-color: rgba(0,0,30,0.5); -webkit-box-shadow: 0px 0px 15px 2px rgba(255,255,255,.75); box-shadow: 0px 0px 15px 2px rgba(255,255,255, .75); -webkit-transition: .5s; transition: .5s; -webkit-transform: rotateY(180deg); transform: rotateY(180deg); } .container .tooltip:after { position: absolute; top: 100%; left: 45%; height: 0; width: 0; border: 6px solid transparent; border-top: 6px solid rgba(0, 0, 30, 0.5); content: "Awesome!"; white-space: nowrap; color:#DDD; } .container:hover .tooltip { opacity: 1; top: -225px; -webkit-transform: rotateY(0deg); transform: rotateY(0deg); }