Найти тему
WebTutorials

Крутые эффекты при наведении, использующие свойства фона. Часть 2

Начало статьи.

Эффект наведения № 2

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

Изначально градиент фиксированной высоты и полной ширины находится вне поля зрения. Затем мы перемещаем градиент вправо, чтобы покрыть нижнюю сторону. Наконец, мы увеличиваем размер градиента с фиксированной высоты до 100%, чтобы покрыть весь элемент.
Изначально градиент фиксированной высоты и полной ширины находится вне поля зрения. Затем мы перемещаем градиент вправо, чтобы покрыть нижнюю сторону. Наконец, мы увеличиваем размер градиента с фиксированной высоты до 100%, чтобы покрыть весь элемент.

Сначала у нас есть переход background-position, за которым следует переход background-size. Переведем это в код:

-3

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

Теперь возникает вопрос: какие значения мы используем для background-position? Мы оставили эти поля пустыми выше. Значения background-size тривиальны, но значения для background-size — нет. И если мы сохраним фактическую конфигурацию, мы не сможем переместить наш градиент.

Наш градиент имеет ширину, равную 100%, поэтому мы не можем использовать процентные значения для background-position для его перемещения.

Процентные значения, используемые с background-position, всегда доставляют неудобства, особенно когда вы используете их впервые. Их поведение не интуитивно понятно, но четко определено и легко понятно, если мы понимаем логику, стоящую за ним. Я думаю, что для полного объяснения того, почему это работает, потребуется еще одна статья, но вот еще одно «длинное» объяснение, которое я разместил на Stack Overflow. Я рекомендую потратить несколько минут, чтобы прочитать этот ответ, и вы поблагодарите меня позже!

Хитрость заключается в том, чтобы изменить ширину на значение, отличное от 100%. Возьмем 200%. Нас не беспокоит фон, выходящий за пределы элемента, потому что переполнение в любом случае скрыто.

-4

И вот что мы получаем.

Пришло время оптимизировать наш код. Если мы возьмем идеи, которые мы узнали из первого эффекта наведения, мы можем использовать сокращенные свойства и писать меньше объявлений, чтобы это работало:

-5

Мы добавляем все свойства фона вместе, используя сокращенную версию, а затем используем --p для выражения наших значений. Размеры меняются от 0,08 em до 100 %, а положение — от 200 % до 100 %.

Я также использую другую переменную --t для оптимизации свойства перехода. При наведении мыши мы устанавливаем значение .3s, что дает нам это:

transition: .3s .3s, background-position .3s 0s;
transition: .3s .3s, background-position .3s 0s;

При выходе мыши --t не определено, поэтому будет использоваться резервное значение:

transition: .3s 0s, background-position .3s .3s;
transition: .3s 0s, background-position .3s .3s;
Разве у нас не должно быть background-size в переходе?

Это действительно еще одна оптимизация, которую мы можем сделать. Если мы не указываем какое-либо свойство, это означает «все» свойства, поэтому переход определяется для «всех» свойств (включая background-size и background-position). Затем он снова определяется для background-position, что аналогично определению для background-size, а затем для background-position.

«Подобное» — это не то же самое, что сказать что-то «такое же». Вы увидите разницу, если измените больше свойств при наведении курсора, поэтому в некоторых случаях последняя оптимизация может оказаться неподходящей.

Можем ли мы по-прежнему оптимизировать код и использовать только одно пользовательское свойство?

Да мы можем! Ана Тюдор поделилась отличной статьей, объясняющей, как создать переключение, когда одно пользовательское свойство может обновлять несколько свойств. Я не буду здесь вдаваться в подробности, но наш код можно изменить следующим образом:

-8

Пользовательское свойство --i изначально не определено, поэтому используется резервное значение 0. Однако при наведении мы заменяем 0 на 1. Вы можете выполнить математику для обоих случаев и получить значения для каждого из них. Вы можете видеть эту переменную как «переключатель», который сразу обновляет все наши значения при наведении.

Опять же, мы вернулись только к трем объявлениям для довольно крутого эффекта наведения!

Продолжение статьи вскоре выйдет. Читайте перевод на канале WebTutorials в
дзене.

Прочесть оригинальную статью можно по ссылке.