Красивые эффекты для значков при наведении с помощью CSS3

Рассмотрим пять разных состояний значков, когда на них наведён курсор мыши, для создания которых используются CSS3 переходы и трансформации. Для каждого примера используется спрайт изображений.

Общий CSS-код для значков

Создадим общий код для значков.


.icon {
    display: inline-block;
    vertical-align: top;
    overflow: hidden;
    margin: 4px;
    width: 96px;
    height: 96px;
    font-size: 0;
    text-indent: -9999px;
}

Эффект № 1 – Одноцветный значок с изменяющимся фоном

Допустим нас есть спрайт, и каждый значок имеет два варианта. Мы можем применить переход к свойству background, чтобы одно изображение перетекало в другое при наведении. Поскольку мы используем переход для свойства background, мы можем также изменить при наведении и свойство background-color. Вот наш CSS:


.icon-mono {
  background: url("../img/icons1.png");
  background-image: url("../img/icons1.svg"), none;
  background-color: #595959;
  -webkit-transition: background 0.3s;
          transition: background 0.3s;
}

/* facebook */
.icon-mono.facebook {
  background-position: 0 0;
}

.icon-mono.facebook:hover {
  background-color: #3b5998;
  background-position: 0 -96px;
}
google+ github rss

Эффект №2 – Приподнятый значок с изменяющейся границей

Имитируем границу, используя псевдо-элемент и анимируя его за счет изменения высоты. Для псевдо-элемента будет задан фоновый цвет, и значок будет приподниматься на расстояние равное высоте псевдо-элемента, как будто ее «подталкивают» вверх. Вот CSS:


.icon-nudge {
  position: relative;
  background: url("../images/icon2.png");
  background-image: url("../images/icon2.svg"), none;
  -webkit-transition: background 0.2s;
          transition: background 0.2s;
}

.icon-nudge::after {
  display: block;
  position: absolute;
  bottom: 0;
  left: 0;
  width: 100%;
  height: 0;
  content: "";
  -webkit-transition: height 0.2s;
          transition: height 0.2s;
}

.icon-nudge:hover::after {
  height: 8px;
}

/* facebook */
.icon-nudge.facebook {
  background-color: #3b5998;
  background-position: 0 0;
}

.icon-nudge.facebook:hover {
  background-position: 0 -8px;
}

.icon-nudge.facebook::after {
  background-color: #1e2e4f;
}
google+ github rss

Эффект №3 – Значок, появляющийся слева

В данном примере будет отображаться обычная одноцветная иконка. Когда пользователь наведет курсор мыши на значок, то цветной вариант значка «выплывает» слева и выталкивает одноцветный вариант иконки. Мы снова будем использовать псевдо-элемент, на этот раз для двух состояний (обычного и при наведении), оставив обычный элемент с классом .icon в качестве контейнера. Псевдо-элемент будет плавно перемещаться внутри контейнера благодаря свойству left, и за счет свойства transition «скольжение» элементов будет плавным. Вот CSS:


.icon-slide {
  position: relative;
}

.icon-slide::before,
.icon-slide::after {
  display: block;
  position: absolute;
  top: 0;
  width: 100%;
  height: 100%;
  background: url("../img/icons3.png");
  background-image: url("../img/icons3.svg"), none;
  content: "";
  -webkit-transition: left 0.3s;
          transition: left 0.3s;
}

.icon-slide::before {
  left: 0;
  background-color: #595959;
}

.icon-slide::after {
  left: -100%;
}

.icon-slide:hover::before {
  left: 100%;
}

.icon-slide:hover::after {
  left: 0;
}

/* facebook */
.icon-slide.facebook::before,
.icon-slide.facebook::after {
  background-position: 0 0;
}

.icon-slide.facebook::after {
  background-color: #3b5998;
}
google+ github rss

Эффект №4 – Сплошной фон, с анимацией переходящий в тонкую рамку

В данном примере по умолчанию для всех значков будет задан сплошной фоновый цвет. При наведении будет осуществляться переход фона в тонкую рамку, используя свойство box-shadow, которое будет иметь значение inset. Тень будет указана для псевдо-элемента, расположенного позади иконки. Для самой тени не будет использовано вообще никакого размытия, т.е. будет отображаться сплошной фон. При наведении мы будем уменьшать значение.


.icon-border {
  position: relative;
}

.icon-border::before,
.icon-border::after {
  display: block;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  content: "";
}

.icon-border::before {
  z-index: 1;
  -webkit-transition: box-shadow 0.3s;
          transition: box-shadow 0.3s;
}

.icon-border::after {
  z-index: 2;
  background: url("../img/icons4.png");
  background-image: url("../img/icons4.svg"), none;
}

/* facebook */
.icon-border.facebook::before {
  box-shadow: inset 0 0 0 48px #3b5998;
}

.icon-border.facebook:hover::before {
  box-shadow: inset 0 0 0 4px #3b5998;
}

.icon-border.facebook::after {
  background-position: 0 0;
}
google+ github rss

Эффект №5 – Вращение кубической иконки

В данном примере будут использоваться CSS3 перспективы, позволяющие создавать фигуры, у которых как будто есть объем и глубина (3D). Будем использовать стандартный элемент в качестве контейнера и два псевдо-элемента в качестве лицевой и обратной сторон куба. При наведении куб будет вращаться по оси X, создавая классный эффект.


.icon-cube {
  position: relative;
  -webkit-perspective: 800px;
          perspective: 800px;
  overflow: visible;
}

.icon-cube::before,
.icon-cube::after {
  display: block;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: url("../img/icons5.png");
  background-image: url("../img/icons5.svg"), none;
  content: "";
  -webkit-transition: all 0.3s;
          transition: all 0.3s;
}

.icon-cube::before {
  z-index: 2;
  background-color: #595959;
}

.icon-cube::after {
  z-index: 1;
  opacity: 0;
  -webkit-transform: translateY(48px) rotateX(-90deg);
          transform: translateY(48px) rotateX(-90deg);
}

.icon-cube:hover::before {
  opacity: 0;
  -webkit-transform: translateY(-48px) rotateX(90deg);
          transform: translateY(-48px) rotateX(90deg);
}

.icon-cube:hover::after {
  opacity: 1;
  -webkit-transform: rotateX(0);
          transform: rotateX(0);
}

/* facebook */
.icon-cube.facebook::before,
.icon-cube.facebook::after {
  background-position: 0 0;
}

.icon-cube.facebook::after {
  background-color: #3b5998;
}
google+ github rss

По мотивам статьи Nicer Icon Hover Effects With CSS3 Transitions - Call Me Nick

Реклама