Рассмотрим пять разных состояний значков, когда на них наведён курсор мыши, для создания которых используются CSS3 переходы и трансформации. Для каждого примера используется спрайт изображений.
Создадим общий код для значков.
.icon {
display: inline-block;
vertical-align: top;
overflow: hidden;
margin: 4px;
width: 96px;
height: 96px;
font-size: 0;
text-indent: -9999px;
}
Допустим нас есть спрайт, и каждый значок имеет два варианта. Мы можем применить переход к свойству 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;
}
facebook
twitter
google+
github
rss
Имитируем границу, используя псевдо-элемент и анимируя его за счет изменения высоты. Для псевдо-элемента будет задан фоновый цвет, и значок будет приподниматься на расстояние равное высоте псевдо-элемента, как будто ее «подталкивают» вверх. Вот 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;
}
facebook
twitter
google+
github
rss
В данном примере будет отображаться обычная одноцветная иконка. Когда пользователь наведет курсор мыши на значок, то цветной вариант значка «выплывает» слева и выталкивает одноцветный вариант иконки. Мы снова будем использовать псевдо-элемент, на этот раз для двух состояний (обычного и при наведении), оставив обычный элемент с классом .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;
}
facebook
twitter
google+
github
rss
В данном примере по умолчанию для всех значков будет задан сплошной фоновый цвет. При наведении будет осуществляться переход фона в тонкую рамку, используя свойство 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;
}
facebook
twitter
google+
github
rss
В данном примере будут использоваться 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;
}
facebook
twitter
google+
github
rss
По мотивам статьи Nicer Icon Hover Effects With CSS3 Transitions - Call Me Nick