Сегодня рассмотрим несколько примеров красивой анимации блоков при помощи CSS3. Такие блоки хорошо смотрятся на всевозможных продающих страницах, в интернет магазинах и просто на сайте в качестве рекламных блоков.
Вначале блок выдает какую то информацию (картинку товара или просто текст), а при наведении курсора появляется другая информация, кликнув по которой переходишь по ссылке.
Пример 1
В начале напишем HTML-код.
<!--   Блоки, содержащие информацию анонса для вывода на экран  -->
<div class="block_info">
   <div class="info"></div>
   <a href="#" class="inf_link" title="Переход по ссылке!"></a>
   <h2>Заголовок 1</h2>
   <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.... </p>
   
             <!--   Блоки, "рисующие" линии по периметру блока  -->   
   <div class="L_top"></div>
   <div class="L_right"></div>
   <div class="L_bottom"></div>
   <div class="L_left"></div>
</div>
Верхняя часть кода содержит ту информацию, которая должна появляться на экране. В данном примере блок с картинкой, ссылку и текст. В нижней части 4 блока, с помощью которых «рисуются» линии по периметру блока при наведении курсора.
Первоначально на экране видим картинку на сером фоне, но при наведении курсора картинка уменьшается и «убегает» в верхний угол блока, по периметру «рисуются» линии, и на белом фоне появляется текст-ссылка.
Для примера сделаем 2, почти идентичных блока, которые расположены ниже:
Заголовок 1
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse hendrerit dignissim metus ac finibus. Duis non pulvinar tortor. Sed semper eleifend sollicitudin.
Заголовок 2
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse hendrerit dignissim metus ac finibus. Duis non pulvinar tortor. Sed semper eleifend sollicitudin.
Задаем стили для самого блока, заголовка и текста:
.block_info {
   width: 300px; /*ширина блока*/
   height: 200px; /*высота блока*/
   margin: 0 30px 30px 50px;      
   position: relative;
   overflow: hidden;
   background: #444; /*цвет фона блока*/
   transition: background .2s ease-in-out .6s; /*изменение фона блока при анимации*/
}
.block_info p {
   color: #333; /*цвет текста описания*/
   opacity: 0;
   text-align: justify;
   padding: 0 20px 20px 20px;
   -webkit-transition: opacity 0.2s ease-in-out .6s;
   transition: opacity 0.2s ease-in-out .6s;   /*Изменение текста при анимации*/
}
.block_info h2 {
   text-align: center;
   color: #77B3D4; /*цвет текста заголовка*/
   font-size: 20px;
   margin: 0;
   padding: 0;
   line-height: 25px;
   opacity: 0;
   padding: 20px 20px 10px 20px;
   -webkit-transition: opacity 0.2s ease-in-out .6s;
   transition: opacity 0.2s ease-in-out .6s;    /*Изменение заголовка при анимации*/
}
Размеры блока, шрифта, их цвет, каждый выбирает на свой вкус.
Теперь ссылка и картинка:
.inf_link{
   position: absolute;
   top:0;
   left:0;
   display: block;
   cursor: pointer;
   width: 100%;
   height: 100%;
}
         /*   Свойства блока с картинкой   */
.info{
   width: 100%;
   height: 100%;
   position: absolute;
   top:0;
   left:0;
   -webkit-transition: all 0.4s ease-in-out .3s;
   transition: all 0.4s ease-in-out .3s;   
   z-index: 10;
}
         /*  Вывод картинки  */
.info {
   background: url(images/img1.jpg) no-repeat 50% 50%;
}
Ну а теперь наводим курсор:
/* Фон из серого становится белым, а заголовок и текст  - видимым.   */
.block_info:hover {
   background: #eee;
}
.block_info:hover p, .block_info:hover h2{
	opacity: 1;
}
         /*  Картинка "переезжает в верхний левый угол, при этом уменьшается */
.block_info:hover .inf {
   top:-35%;
   left:-40%;
   -webkit-transform:scale(0.3);
   transform:scale(0.3);
}
Настала очередь блоков, «рисующих» линии по периметру
.L_top, .L_right, .L_bottom, .L_left {
   position: absolute;
   background: #77B3D4; /*цвет границы*/
   -webkit-transition:
      top 0.4s ease-in-out 0s,
      right 0.4s ease-in-out 0s,
      bottom 0.4s ease-in-out 0s,
      left 0.4s ease-in-out 0s;
   transition:
      top 0.4s ease-in-out 0s,
      right 0.4s ease-in-out 0s,
      bottom 0.4s ease-in-out 0s,
      left 0.4s ease-in-out 0s;
}
.L_top, .L_bottom {width: 100%;height: 6px;}
.L_left, .L_right {width: 6px;height: 100%;}
    /*  граница сверху  */
.L_top {left:-100%;top:0;}
.block_info:hover .L_top {left:0;}
    /*  граница справа  */
.L_right {top:-100%;right:0;}
.block_info:hover .L_right {top:0;}
    /*  граница снизу   */
.L_bottom {right:-100%;bottom:0;}
.block_info:hover .L_bottom {right:0;}
    /*  граница слева  */
.L_left {bottom:-100%;left:0;}
.block_info:hover .L_left {bottom:0;}
}
Первоначально блоки «сдвинуты» каждый в свою сторону на -100% и поэтому их не видно. При наведении курсора начинается анимации и блоки занимают «нулевое» (left:0; top:0; right:0; bottom:0; ) положение. Это схемотически изображено ниже, где указано первоначальное положение блоков и направление последующего движения.
Пример 2
Чтобы увидеть следующую анимацию навидим курсор на блок.
AUDI
Audi ipsum dolor sit amet, consectetur adipisicing elit. Temporibus animi velit itaque minus nostrum ea.
Все начинается с HTML. Код для одного из блоков:
<div class="block_info2 ">
   <div class="number">
      <div class="num">A</div>
   </div>
   <div class="content">
      <div class="text">
         <p class="name">AUDI</p>
         <p><b>Audi</b> ipsum dolor sit amet, consectetur adipisicing elit. Temporibus animi...</p>
      </div>
      <img  class="text-img" src="audi-q5.jpg" alt="Audi">
   </div>
</div>
Оформление основного блока:
.block_info2{   
   width: 360px;
   height: 178px;
   margin: 0 15px 15px;
   position: relative;
   cursor: pointer;
   border: 1px solid #cccaca;
}
Левая часть — блок с буквой (на этом месте может быть любой знак, иконка) в кружке.
.number {
   background: #fff;       /*  Цвет фона  */
   background-size: 50%;   /*  Размер фонового изображения  */
   width: 78px;
   height: 176px;
   float: left;
   border: 1px solid #ddd;
   border-right: none;   
   }
.num {
   background: #c4e0f2;   /*  Цвет фона кружка  */
   width: 60px;           /*Размеры блока, обязательно одинаковые, иначе вместо круга получим овал */
   height: 60px;
   border: 2px solid #fff; /*  Граница цвета фона, позволяет "отодвинуть" тень от блока.  */
   border-radius: 50%;     /*  Позволяет из квадрата сделать круг или овал (смотри выше)  */
   box-shadow: 1px 1px 3px -2px #333;  /*  Тень  */
   font-size: 2.5em;
   line-height: 60px;
   margin: 55px auto 0;
   text-align: center;
   -webkit-transition: all 0.4s ease 0s;
   transition: all 0.4s ease 0s;
}
.block_info2:hover div.number{
   background-size: 50% auto;
}
      /*  Изменение тени и вращение при анимации  */
.block_info2:hover div.number div.num {
   box-shadow: 0 0 3px -1px #333;
   -webkit-transform: rotate(360deg);
   -ms-transform: rotate(360deg);
   transform: rotate(360deg);
}
Правая часть — текст и картинка.
.content {
   float: right;            /*  Прижат к правой стороне  */
   height: 178px;           /*  Высота блока, равна высоте блока с классом .block_info2 */
   overflow: hidden;
   position: relative;
   width: 280px;
}
.text {
   background:#fefefe;
   border: 1px solid #ddd;
   height: 176px;          
   width: 280px;
}
.text p {
   margin: 0 20px;
}
.text p.name {
   font-size: 1.6em;
   margin-bottom: 10px;
   margin-top: 40px;
}
img.text-img {
   position: absolute;
   top: 168px;  
      /*При высоте блока 178рх (смотри выше) картинка опущена на 168рх, поэтому снизу "выглядывает" только ее часть*/
   -webkit-transition: all 0.4s ease 0s;
   transition: all 0.4s ease 0s;
}
      /*  При анимации картинка "всплывает вверх и становиться полупрозрачной*/
.block_info2:hover div.content img.text-img {
   opacity: 0.85;
   top: 0;
}
Пример 3
Следующие 2 примера практически одинаковы, но есть небольшое «геометрическое» отличие: вертикальная и горизонтальная анимации. Код каждого блока одинаковый, различаются только фоновыми рисунками, ну и цифровыми индексами соответственно: bgrd_1, bgrd_2, bgrd_3, bgrd_4. В качестве примера приведен код только для 2 блоков:
<div class="block_info bgrd_1">				
   <div class="binfo_wrap">
     <div class="binfo-info">
         <div class="binfo-info-front bgrd_1"></div>
         <div class="binfo-info-back">
             <p class="zh3">Заголовок 1</p>
              <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam ..</p>
         </div>	
     </div>
   </div>
   </div>
   <div class="block_info bgrd_2">				
   <div class="binfo_wrap">
     <div class="binfo-info">
         <div class="binfo-info-front bgrd_2"></div>
         <div class="binfo-info-back">
              <p class="zh">Заголовок 2</p>
              <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam ...</p>
         </div>	
     </div>
   </div>
</div>
Стили, за исключением указанных ниже для разных анимаций, схожи. Конечно каждый волен выбирать оформление в своем вкусе.
.block_info {
   width: 356px;
   height: 222px;
   margin: 15px ;
   float: left;
   position: relative;
   box-shadow: 3px 3px 7px rgba(0,0,0,0.5);
}
.block_info:hover .binfo-info-front {
   box-shadow: 3px -3px 12px rgba(0,0,0,1);
 /* Для вертикальной анимации */
   -webkit-transform: rotate3d(1,0,0,-180deg);
   -moz-transform: rotate3d(1,0,0,-180deg);
   -o-transform: rotate3d(1,0,0,-180deg);
   -ms-transform: rotate3d(1,0,0,-180deg);
   transform: rotate3d(1,0,0,-180deg);
	           или
/*  Для горизонтальной анимации */
   -webkit-transform: rotate3d(0,1,0,180deg);
   -moz-transform: rotate3d(0,1,0,180deg);
   -o-transform: rotate3d(0,1,0,180deg);
   -ms-transform: rotate3d(0,1,0,180deg);
   transform: rotate3d(0,1,0,180deg);	 
}
           /* Цвет фона под текстом анонса */
.block_info:hover .binfo-info-back{
   background: rgba(224, 179, 119, 0.67); 
}
            /* Фоновые рисунки на все 4 блока*/
.bgrd_1 {
   background-image: url(img_1.jpg);
}
.bgrd_2 {
   background-image: url(img_2.jpg);  
} 
.bgrd_3 {
   background-image: url(img_3.jpg);
}
.bgrd_4 {
   background-image: url(img_4.jpg);  
} 
.binfo_wrap, .binfo-info{
   position: absolute;
   width: 356px;
   height: 222px;
   
   -webkit-transition: all 0.4s ease-in-out;
   -moz-transition: all 0.4s ease-in-out;
   -o-transition: all 0.4s ease-in-out;
   -ms-transition: all 0.4s ease-in-out;
   transition: all 0.4s ease-in-out;
   
   -webkit-perspective: 1300px;
   -moz-perspective: 1300px;
   -o-perspective: 1300px;
   -ms-perspective: 1300px;
   perspective:1300px;
}
.binfo_wrap{
   top: 0;
   left:0;
   background: #f9f9f9; /*  Маскирующий фон, если его убрать тоже неплохой эффект получается  */
}
.binfo-info{
   -webkit-transform-style: preserve-3d;
   -moz-transform-style: preserve-3d;
   -o-transform-style: preserve-3d;
   -ms-transform-style: preserve-3d;
   transform-style: preserve-3d;
}
.binfo-info > div {
   display: block;
   position: absolute;
   width: 100%;
   height: 100%;
   background-position: center center;
   
   -webkit-transition: all 0.6s ease-in-out;
   -moz-transition: all 0.6s ease-in-out;
   -o-transition: all 0.6s ease-in-out;
   -ms-transition: all 0.6s ease-in-out;
   transition: all 0.6s ease-in-out;
}
.binfo-info .binfo-info-front {
   z-index: 100;
   box-shadow: 
     inset 2px 1px 4px rgba(0,0,0,0.1);
 /* Для вертикальной анимации */
   -webkit-transform-origin: 50% 100%;
   -moz-transform-origin: 50% 100%;
   -o-transform-origin: 50% 100%;
   -ms-transform-origin: 50% 100%;
   transform-origin: 50% 100% ;
	            или
 /* Для горизонтальной анимации */
   -webkit-transform-origin:100% 50% ;
   -moz-transform-origin:100% 50% ;
   -o-transform-origin:100% 50% ;
   -ms-transform-origin:100% 50% ;
   transform-origin:100% 50% ;
}
 p.zh {
   font-size: 20px;
   font-style: italic;
   text-align: center;
   margin: 15px; 
}
.binfo-info-back p {
   padding: 0 15px;
}
И вот, что из этого получается:
Заголовок 1
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam ..
Заголовок 1
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Aperiam ..
Пример 4
В данном варианте приведен некий текст, который предлагает скачать какую то информацию. Наводим курсор на картинку и видим ссылку на нужный вам материал.
Полный код этой демо-странички рассматривать нет смысла, рассмотрим только то, что касается анимации. Код блоков идентичен, отличие в фоновых картинках. Итак:
HTML
<div class="block_info">	
   <div class="bi-info">
      <a href="#" class="con">Скачать</a>
   </div>
   <div class="binfo-thumb bgrd_1"></div>
</div>
<div class="block_info">	
   <div class="bi-info">
      <a href="#" class="con">Скачать</a>
   </div>
   <div class="binfo-thumb bgrd_2"></div>
</div>
<div class="block_info">	
   <div class="bi-info">
      <a href="#" class="con">Скачать</a>
   </div>
   <div class="binfo-thumb bgrd_3"></div>
</div>
CSS
 /*   Нижний блок - основа   */
.block_info {
   width: 190px;
   height:190px ;
   border-radius: 50%;
   position: relative;
   margin:24px 15px;
   float: left;
   box-shadow: 1px 1px 7px rgba(0,0,0,1);
}
          /*   Нижний блок со ссылкой и его фоновый рисунок  */
.bi-info {
   position: absolute;
   width: 100%;
   height: 100%;
   border-radius: 50%;
   overflow: hidden;
   background: url(img_4.jpg);
   box-shadow: inset 0 0 0 5px rgba(0,0,0,0.05);
}
         /*   Оформление ссылки   */
 a.con{
   font-family: Arial, sans-serif;
   color: #7297e0;
   font-size: 20px;
   line-height: 150px;
   padding-left: 40px;
   text-decoration: none;
   font-style:italic;
   letter-spacing: 4px;
   text-align: center;
   text-shadow:0px 0px 0 rgb(82,119,192),1px 0px 0 rgb(52,89,162), 2px 0px 0                                  rgb(22,59,132),3px 0px 2px rgba(0,0,0,0.25),
               3px 0px 1px rgba(0,0,0,0.5),0px 0px 2px rgba(0,0,0,.2);
}
a.con:hover {
   text-decoration:underline;
   }
        /*  Верхний блок   */
.binfo-thumb {
   width: 190px;
   height: 190px;
   border-radius: 50%;
   overflow: hidden;
   position: absolute;
   box-shadow: inset 0 0 0 15px rgba(255,255,255, 0.5);
   -webkit-transform-origin: 95% 40%;
   -moz-transform-origin: 95% 40%;
   -o-transform-origin: 95% 40%;
   -ms-transform-origin: 95% 40%;
   transform-origin: 95% 40%;
   -webkit-transition: all 0.3s ease-in-out;
   -moz-transition: all 0.3s ease-in-out;
   -o-transition: all 0.3s ease-in-out;
   -ms-transition: all 0.3s ease-in-out;
   transition: all 0.3s ease-in-out;
}
         /*  Фоновые рисунки верхних блоков  */
.bgrd_1 { 
   background-image: url(img_1.jpg);
   z-index: 12;
}
.bgrd_2 { 
   background-image: url(img_2.jpg);
   z-index: 11;
}
.bgrd_3 { 
   background-image: url(img_3.jpg);
   z-index: 10;
}
        
         /*  Создание "поворотной оси" (черная точка с правой стороны)  */
.binfo-thumb:after {
   content: '';
   width: 8px;
   height: 8px;
   position: absolute;
   border-radius: 50%;
   top: 40%;
   left: 95%;
   margin: -4px 0 0 -4px;
   background: rgb(14,14,14);
   background: -moz-radial-gradient(center, ellipse cover, rgba(14,14,14,1) 0%, rgba(125,126,125,1) 100%);
   background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,rgba(14,14,14,1)), color-stop(100%,rgba(125,126,125,1)));
   background: -webkit-radial-gradient(center, ellipse cover, rgba(14,14,14,1) 0%,rgba(125,126,125,1) 100%);
   background: -o-radial-gradient(center, ellipse cover, rgba(14,14,14,1) 0%,rgba(125,126,125,1) 100%);
   background: -ms-radial-gradient(center, ellipse cover, rgba(14,14,14,1) 0%,rgba(125,126,125,1) 100%);
   background: radial-gradient(ellipse at center, rgba(14,14,14,1) 0%,rgba(125,126,125,1) 100%);
   box-shadow: 0 0 1px rgba(255,255,255,0.9);
}
   /*  При наведении верхний блок сдвигается  на 110 градусов против часовой стрелки */
.block_info:hover .binfo-thumb {
   box-shadow: inset 0 0 0 15px rgba(255,255,255, 0.5), 0 1px 3px rgba(0,0,0,0.2);
   -webkit-transform: rotate(-110deg);
   -moz-transform: rotate(-110deg);
   -o-transform: rotate(-110deg);
   -ms-transform: rotate(-110deg);
   transform: rotate(-110deg);
}
Пример 5
headline
A wonderful serenity has taken possession of my entire soul, like thse .
Для блока напишем следующий код.
HTML
<div class="view">
  <img src="pic_1.jpg" alt="Картинка">
  <div class="mask">
    <h2>headline</h2>
    <p>A wonderful serenity has taken possession of my entire soul, like thse .</p>
    <a href="#">Transition on click</a>
  </div>
</div>
Оформляем блоки в таблице стилей. Цвета, размеры, отступы и др., как обычно на свой вкус, но есть обязательные условия, которые тоже можно корректировать при необходимости.
CSS
.view{
  font-family: sans-serif;
  width: 300px;
  height: 186px;
  float: left;
  margin: 50px;
  border: 10px solid transparent;
  box-shadow:  1px 1px  8px rgba(170, 170, 170, 0.49);
  /* Обязательные условия*/
  position: relative;	
  overflow: hidden;
}	
.view .mask{
  width: 300px;
  height:186px;
  text-align: center;
  /* Обязательные условия*/
  position: absolute;
  overflow: hidden;
  top: 0;
  left: 0;
}
Теперь очередь картинки, заголовка, анонса и ссылки. Здесь также есть обязательные условия, которые и обеспечивают анимацию.
С помощью свойства transform: translateY(…); заголовок «поднимаем вверх» на 100рх, а текст анонса соответственно «опускаем вниз» на 120рх.
Значения выбраны исходя из размеров блока и картинки. Также подлежат коррекции под необходимые значения.
Второе условие — «невидимость». Для этого используем свойство opacity: 0;. Благодаря этому условию ссылка никуда не убирается, просто не видна.
CSS
.view img {
  -webkit-transition: all ease-in .5s;
  transition: all ease-in .5s;
}
.mask h2 {
  color: #4b4848;
  font-size: 20px;
  font-weight: 400;
  line-height: 40px;
  letter-spacing:1px;
  margin-top: 10px;
  text-transform: uppercase;
  text-shadow: 1px 1px 1px #0d0a0b;
  background: rgba(248, 194, 71, 0.6);
   /* Обязательные условия*/
  -webkit-transform: translateY(-100px);
  -ms-transform: translateY(-100px);
  transform: translateY(-100px);
  -webkit-transition: all .5s;
  transition: all ease-in .5s;
  opacity: 0;
}
.mask p {
  color: #fff;
  padding: 10px;
  margin-bottom: 25px;
  text-shadow: 1px 0 2px #000;
  background: rgba(105, 98, 82, 0.49);
   /* Обязательные условия*/
  -webkit-transform: translateY(120px);
  -ms-transform: translateY(120px);
  transform: translateY(120px);
  -webkit-transition: all.5s ease-in .1s;
  transition: all.5s ease-in .1s;
  opacity: 0;
}
a.info {
  color:#2e9beb;
  font-size: 18px;
  letter-spacing:1px;
  text-decoration: none;
  background: rgba(245, 177, 22, 0.75);
  text-shadow: 1px 1px 1px #1c3764;
  box-shadow: 1px 1px 3px #444;
  border: 1px solid rgba(167, 130, 48, 0.8);
  border-radius: 5px;
  padding:10px;
   /* Обязательные условия*/
  opacity: 0;
  -webkit-transition: all ease-in .5s;
  transition: all ease-in .5s;
}
Осталось навести курсор на картинку и увидеть результат: заголовок «выезжает» сверху, текст анонса — снизу, а ссылка плавно проявляется.
CSS
.view:hover img{
  opacity: 0.25;
  box-shadow: 3px 3px 5px #000;
  -webkit-transform: scale(1.5, 1.5);
  -ms-transform: scale(1.5, 1.5);
  transform: scale(1.5, 1.5);
}
.view:hover h2{
  opacity: 1;
  -webkit-transform: translateY(0px);
  -ms-transform: translateY(0px);
  transform: translateY(0px);
}
.view:hover p{
  opacity: 1;
  -webkit-transform: translatex(0px);
  -ms-transform: translatex(0px);
  transform: translatex(0px);
  -webkit-transition: all  ease-in .5s;
  transition: all  ease-in .5s;
}
.view:hover a{
  cursor: pointer;
  opacity:1;
  -webkit-transition: opacity .3s ease-in .5s;
  transition: opacity .3s ease-in .5s;
}
a:active{
  box-shadow: none;
  background: #2bcade;
  color:rgb(252, 179, 14);
}
