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;

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

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

Псевдокласс :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 эффекта, который работает тоже на принципе сдвига на заданное число.
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;
}
-
-
Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.