Мощь CSS3 огромна и в этом уроке вы сможете увидеть, как использовать его креативно. Мы собираемся создать несколько эффектов при наведении курсора мыши с помощью CSS3 transitions. При наведении курсора на эскиз будет показываться описание миниатюр, с использованием различных стилей в каждом примере.
Пожалуйста, обратите внимание, что эти примеры будут корректно работать только в современных браузерах, которые поддерживают свойства CSS3.
HTML-разметка
Структура разметки очень простая и интуитивно понятная. Создайте контейнер, который будет содержать изображение и любую другую информацию, такую как заголовок, описание и прочее.
Внутри блока с классом view вставте элемент с классом mask, который будет отвечать за наши эффекты CSS3, внутри него мы и поместим название, описание и ссылку на полное изображение. (Для некоторых примеров, нам нужно будет добавить mask как отдельный элемент и обернуть описание в div с классом content.)
Мы установим общие правила для наших стилей, а затем мы будем добавлять специальные классы с желаемыми эффектами. В статье мы будем опускать CSS3-префиксы для различных браузеров, но вы их можете увидеть в исходниках.
Добавим специальный класс view-first в элемент с классом view для этого эффекта. Мы будем добавлять специальный класс для каждого экземпляра view элемента (view-first, view-second, view-third, и т.д.).
<divclass="view view-first">
</div>
В первомпримере мы будемиспользовать тольконекоторые базовые переходы чтобы создать не плохой эффектпри наведении курсора:
.view-first img {
transition: all 0.2s linear; } .view-first.mask{
opacity:0; background-color: rgba(219,127,8,0.7);
transition: all 0.4s ease-in-out; } .view-first h2 {
transform: translateY(-100px);
opacity:0;
transition: all 0.2s ease-in-out; } .view-first p {
transform: translateY(100px);
opacity:0;
transition: all 0.2s linear; } .view-first a.info{
opacity:0;
transition: all 0.2s ease-in-out; }
А теперь самое интересное в нашем эффекте. Когда мы перемещаем курсор над изображением, можно использовать свойство delay чтобы имитировать простую анимацию. transition-delay, который мы используем при наведении может быть изменен, чтобы отличаться от обычного класса. В этом примере мы не использовали какой-либо задержки в обычном классе, но мы добавили delay в hover, который будет немного задерживать эффект перехода.
Здесь класс mask будет иметь различные атрибуты, в частности мы собираемся применить свойство transform (translate и rotate).Описание элементов будут переведены, то есть перемещены так, чтобы мы могли сдвинуть их при наведении:
.view-second img {
transition: all 0.2s ease-in; } .view-second.mask{ background-color: rgba(115,146,184,0.7); width:300px; padding:60px; height:300px;
opacity:0;
transform: translate(265px,145px) rotate(45deg);
transition: all 0.2s ease-in-out; } .view-second h2 { border-bottom:1pxsolid rgba(0,0,0,0.3); background:transparent; margin:20px40px0px40px;
transform: translate(200px,-200px);
transition: all 0.2s ease-in-out; } .view-second p {
transform: translate(-200px,200px);
transition: all 0.2s ease-in-out; } .view-second a.info{
transform: translate(0px,100px);
transition: all 0.2s 0.1s ease-in-out; }
Для нашего hover-эффекта мы используем translate-преобразование для того, чтобы перемещать наши элементы на место. mask также будет поворачиваться. Элементы описания будут двигаться с небольшой задержкой:
В четвертом примере мы выполним простое уменьшение изображения и увеличение нашего контента с вращением, все это благодаря scale преобразованию. Мы установим transition-delay равным 0,2 для стилей изображения, но при наведении мы изменим его на 0s. Это позволит начать анимацию немедленно при наведении мыши, но задержать её когда курсор уходит.
.view-fourth img {
transition: all 0.4s ease-in-out 0.2s;
opacity:1; } .view-fourth.mask{ background-color: rgba(0,0,0,0.8);
opacity:0;
transform: scale(0) rotate(-180deg);
transition: all 0.4s ease-in;
border-radius:0px; } .view-fourth h2{
opacity:0; border-bottom:1pxsolid rgba(0,0,0,0.3); background:transparent; margin:20px40px0px40px;
transition: all 0.5s ease-in-out; } .view-fourth p {
opacity:0;
transition: all 0.5s ease-in-out; } .view-fourth a.info{
opacity:0;
transition: all 0.5s ease-in-out; }
Это инструкции, чтобы получить этот эффект - с CSS3 можно делать все :).
В этом пятом примере мы будем использовать свойство translate наряду с transition-timing-function ease-in-out для того, чтобы сдвинуть контент с левой стороны.
В этом примере мы сделаем описание появляющееся спереди, уменьшим изображение до исходного размера (scale c 10 до 1). Кнопка "read more" будет появляться снизу (translate).
.view-sixth img {
transition: all 0.4s ease-in-out 0.5s; } .view-sixth .mask{ background-color: rgba(146,96,91,0.5);
opacity:0;
transition: all 0.3s ease-in 0.4s; } .view-sixth h2{
opacity:0; border-bottom:1pxsolid rgba(0,0,0,0.3); background:transparent; margin:20px40px0px40px;
transform: scale(10);
transition: all 0.3s ease-in-out 0.1s; } .view-sixth p {
opacity:0;
transform: scale(10);
transition: all 0.3s ease-in-out 0.2s; } .view-sixth a.info{
opacity:0;
transform: translateY(100px);
transition: all 0.3s ease-in-out 0.1s; }
Обратный переход будет задержан таким образом, чтобы он выглядел гладким:
В седьмом примере идея в том, чтобы повернуть изображение в центре и переместить его вдаль. Затем появится описание, пряча за собой вращающиеся изображение.
.view-seventh img{
transition: all 0.5s ease-out;
opacity:1; } .view-seventh.mask{ background-color: rgba(77,44,35,0.5);
transform: rotate(0deg) scale(1);
opacity:0;
transition: all 0.3s ease-out;
transform: translateY(-200px) rotate(180deg); } .view-seventh h2{
transform: translateY(-200px);
transition: all 0.2s ease-in-out; } .view-seventh p {
transform: translateY(-200px);
transition: all 0.2s ease-in-out; } .view-seventh a.info{
transform: translateY(-200px);
transition: all 0.2s ease-in-out; }
При наведении мы добавим задержку для элементов с описанием. Это позволит нам видеть вращающиеся изображение, прежде чем описание скроет картинку. В обратном переходе все исчезнет сразу же, и мы увидим изображение вращающееся в обратном направлении:
Элементы mask будут иметь различные значения translation и transfrom-origin. А также мы укажем что один выровнен по верхней границе, а другой по нижней:
Мы настроили transition-delay для элементов mask таким образом, что, когда мы наводим курсор, переход происходит мгновенно, но при уходе мыши, задержка будет больше.
В последнем примере, мы будем увеличивать изображение, а затем прятать, перенося описание на передний план. Мы можем сделать это, используя шкалу преобразования (scale transform) и настраивая уровень прозрачности:
.view-tenth img {
transform: scaleY(1);
transition: all 0.7s ease-in-out; } .view-tenth.mask{ background-color: rgba(255,231,179,0.3);
transition: all 0.5s linear;
opacity:0; } .view-tenth h2{ border-bottom:1pxsolid rgba(0,0,0,0.3); background:transparent; margin:20px40px0px40px;
transform: scale(0); color:#333;
transition: all 0.5s linear;
opacity:0; } .view-tenth p { color:#333;
opacity:0;
transform: scale(0);
transition: all 0.5s linear; } .view-tenth a.info{
opacity:0;
transform: scale(0);
transition: all 0.5s linear; }
При наведении мы просто масштабируем изображение, а зачем прячем его, уменьшив его прозрачность до 0:
CSS3 имеет действительно большой потенциал для создания красивых эффектов. Вскоре, надеюсь, мы будет в состоянии избегать использование JavaScript для создания простых эффектов и полагаться на 100% на CSS, во всех браузерах.
Я надеюсь, что вам понравились эти эксперименты, но прежде всего я надеюсь, что они могут вдохновить вас на создание своих эффектов.