На этом уроке научимся делать простой hover эффект для кнопки с помощью псевдокласса :nth-child . На кнопке есть текст - button , при наведении курсора на кнопку, текст button двигается вправо, а на его место слева подтягивается его клон. Кнопочка получается живой с двигающимся внутри текстом.

Hover эффект для кнопки + псевдокласс :nth-child

На этом уроке научимся делать простой hover эффект для кнопки с помощью псевдокласса :nth-child. На кнопке есть текст - button, при наведении курсора на кнопку, текст button двигается вправо, а на его место слева подтягивается его клон. Кнопочка получается живой с двигающимся внутри текстом.

Увидеть эффект в действии можно на

демо странице.

Код целиком:

JS Bin on jsbin.com

В чем тут фокус? Понятно, что этих надписей button должно быть две, абсолютно одинаковых. Создадим необходимую HTML структуру.

<body>
    <a href="#">
        <span>Button</span>
        <span>Button</span>
    </a>
</body>

Как видите кода очень мало, вся магия будет происходить в файле стилей. Одна ссылка и два span, решили обойтись даже без div-а. Сначала стилизуем гиперссылку, из которой и будет состоять наша кнопка.

a {
    position: absolute;
}

Свойство position: absolute в современных браузерах имеет двойное значение - задает позицию элемента относительно окна браузера и указывет на то, что строчный элемент гаперссылку надо отображать как блочный. Если его убрать из кода, то кнопка исчезнет, останется только текст.

Выравниваем кнопку посередине относительно окна браузера.

top: 50%;
left: 50%;
transform: translate(-50%,-50%)

Задаем ширину и высоту кнопки.

width: 250px;
height: 80px;

Это один из способов выравнивания текста по вертикали, можно применять, если известна высота блока и текст занимает одну строчку. Значение выставляется путем подбора.

line-height: 80px;
Hover эффект для кнопки + псевдокласс :nth-child

Остальные, чисто оформительские свойства селектора "a" не требуют комментариев, они просты и понятны. На данном этапе наша кнопка с двумя статичными надписями - button. Дальше мы будем работать только с тегом span.

Hover эффект для кнопки + псевдокласс :nth-child

Код ниже соединяет обе надписи.

a span {
    position: absolute; /*нижний span поднялся вверх*/
    top: 0;
    left: 0;
    width: 100%; /*выравнивание относительно блока*/
    height: 100%;
    transition: .5s;
}

Hover эффект для кнопки + псевдокласс :nth-child

Псевдокласс :nth-child и никакого мошенничества

Первый span с псевдоклассом nth-child(1) сдвинет текст button на 100% по горизонтали влево.

a span:nth-child(1) {
    transform: translateX(-100%);
}

А второй span с псевдоклассом nth-child(2) оставит текст button на месте.

a span:nth-child(2) {
    transform: translateX(0);
}

Hover эффект для кнопки + псевдокласс :nth-child

Обе надписи стоят на одной линии и заняли свои исходные позиции для hover эффекта, который работает тоже на принципе сдвига на заданное число.

a:hover span:nth-child(1) {
    transform: translateX(0);
    transition: .5s;
}


a:hover span:nth-child(2) {
    transform: translateX(100%);
    transition: .5s;
}

И последняя строчка кода в селекторе "a", не даст обеим надписям button выйти за пределы самой кнопки. Все лишнее будет спрятано.

a {
    overflow: hidden;
}