Вторник, 18 Декабря 2012 16:36

Интересный hover эффект

Written by 
Оцени эту запись
(1 Голос)

В данной  статье мы сделаем блок, у которого цвет фона будет зависеть от направления появления состояния hover.

 

 

У нас будет некоторый блок с некоторым текстом. Цвет фона этого блока будет меняться при наведении. Причем новый цвет фона будет зависеть от того, с какой стороны пользователь навел курсор мышки на блок -- сверху, справа, снизу или слева.

 

 

 
 
 
 
Hover me!

 

 

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

 

 

<div class="multi_hover">
        <div class="multi_hover_side"></div>
        <div class="multi_hover_side"></div>
        <div class="multi_hover_side"></div>
        <div class="multi_hover_side"></div>
        <div class="multi_hover_body">Hover me!</div>
</div>
 
Блок multi_hover является родительским. Каждый из multi_hover_side отвечает за свою сторону, они повернуты на 45 градусов и спозиционированны по углам. В блоке multi_hover_body содержится текст. И, на самом деле, цвет фона мы меняем именно у multi_hover_body.
 
 
А теперь смотрим CSS:
 
 
<style>
        .multi_hover {
            margin: 10px auto;
            width: 100px;
            height: 100px;
            position: relative;
            overflow: hidden;
        }
        .multi_hover_body {
            position: absolute;
            top: 0;
            left: 0;
            width: 100%;
            height: 100%;
            background: violet;
            text-align: center;
            line-height: 100px;
            vertical-align: middle;
            color: white;
            font-size: 16px;
            font-family: Arial;
            z-index: 1;
        }
        .multi_hover_side {
            position: absolute;
            width: 70%;
            height: 70%;
            background: transparent;
            -webkit-transform: rotate(45deg);
            z-index: 2;
        }
        .multi_hover_side:nth-child(1):hover ~ .multi_hover_body {
            background: blue;
        }
        .multi_hover_side:nth-child(2):hover ~ .multi_hover_body {
            background: blueviolet;
        }
        .multi_hover_side:nth-child(3):hover ~ .multi_hover_body {
            background: #20b2aa;
        }
        .multi_hover_side:nth-child(4):hover ~ .multi_hover_body {
            background: Purple;
        }
        .multi_hover_side:nth-child(1) {
            top: -36%;
            left: 15px;
        }
        .multi_hover_side:nth-child(2) {
            top: 15px;
            right: -36%;
        }
        .multi_hover_side:nth-child(3) {
            bottom: -36%;
            left: 15px;
        }
        .multi_hover_side:nth-child(4) {
            top: 15px;
            left: -36%;
        }
        .multi_hover_side:hover {
            width: 100%;
            height: 100%;
            top: 0;
            left: 0;
            bottom: 0;
            right: 0;
            -webkit-transform: rotate(0deg);
            z-index: 3;
        }
</style>
 
 
Идея заключается в следующем - есть 4 блока, которые отвечают за направляния:
 
 
 
 
 
Рядом с ними находится блок с текстом и фоновым цветом. При наведении на определенный боковой блок, мы меняем цвет блока с текстом:
 
 
.multi_hover_side:nth-child(1):hover ~ .multi_hover_body {
            background: blue;
}
 
 
Чтобы не получилось постоянное изменение фона при перемещении курсора над нашим блоком (в разные концы), при наведении на боковые блоки, мы ставим их в центр, растягиваем на весь размер родительского и увеличиваем z-index:
 
 
.multi_hover_side:hover {
            width: 100%;
            height: 100%;
            top: 0;
            left: 0;
            bottom: 0;
            right: 0;
            -webkit-transform: rotate(0deg);
            z-index: 3;
}
 
 
 
 
 
 

Additional Info

You have no rights to post comments

верстка | CSS | верстка сайтов | HTML | верстальщик | блочная верстка | JavaScript | css верстка | профессиональная верстка сайтов