мой блог:[Перевод] Переменные CSS для достижения классного эффекта наведения мыши
я недавноСайт ГровераИнтересно наведите анимацию на вдохновение. Переместите кнопку мыши, чтобы отобразить подписку после градации цвета курсора. Идея простая, а результат - выделиться из кнопки сброса и ждать щелчков.
Так как же добиться подобного эффекта, чтобы наш сайт был одинаково хорош? Отлично, это не так сложно, как вы думаете!
отслеживать местоположение
Первое, что нам нужно сделать, это отследить положение курсора мыши.
document.querySelector('.button').onmousemove = (e) => {
const x = e.pageX - e.target.offsetLeft
const y = e.pageY - e.target.offsetTop
e.target.style.setProperty('--x', `${ x }px`)
e.target.style.setProperty('--y', `${ y }px`)
}
- Выберите целевой элемент и прослушайте пользовательские события наведения мыши.
- Вычислить координаты мыши относительно элемента
- Сохранение координат в переменные CSS
Да, требуется всего 6 строк кода, чтобы ваш CSS знал, где находится мышь пользователя. С помощью этой информации вы можете добиться большего и большего эффекта. Но давайте сначала реализуем часть CSS...
Анимация градиента
Мы сохранили координаты мыши в переменных CSS, поэтому их можно использовать в любом месте CSS. (нижеSCSSкод)
.button {
position: relative;
appearance: none;
background: #f72359;
padding: 1em 2em;
border: none;
color: white;
font-size: 1.2em;
cursor: pointer;
outline: none;
overflow: hidden;
border-radius: 100px;
span {
position: relative;
}
&::before {
--size: 0;
content: '';
position: absolute;
left: var(--x);
top: var(--y);
width: var(--size);
height: var(--size);
background: radial-gradient(circle closest-side, #4405f7, transparent);
transform: translate(-50%, -50%);
transition: width .2s ease, height .2s ease;
}
&:hover::before {
--size: 400px;
}
}
- обернуть текст в
span
, чтобы градиентный слой не накладывался на текст - исходный
width
а такжеheight
для0px
и увеличьте их, когда мышь находится над кнопкой400px
. не забудьте установитьtransition
придать ему эффект затухания - Используйте JS, чтобы установить координаты, чтобы следовать за мышью
- применить один
radial-gradient
прибытьbackground
на и использоватьclosest-side circle
.closest-side
сделатьbackground
заполнить весьbefore
Но не дальше.
Эффект
Вот и все, добавление отсутствующего HTML делает свое дело:
<button class="button">
<span>Hover me I'm awesome</span>
</button>
онлайн предварительный просмотр
See the Pen Mouse movement button with border-radius by Tobias Reich (@electerious) on CodePen.
расширять
Так много эффектов можно создать, просто реагируя на положение мыши. Это великолепно и делает 👌взаимодействие таким веселым.
Вот кто яbasicScrollАналогичная анимация используется на веб-сайте:
May the hover be with you https://t.co/2jrmVorLRW
Или придумайте и создайте 3D-кнопку параллакса:
3D-кнопка параллакса с переменными CSS, управляемыми JS @CodePen 🎉 https://t.co/qE0woiNip8 https://t.co/Wyi0xjRzPq
Возможности безграничны. Вы можете поделиться эффектами, которые вы создали с его помощью, в разделе комментариев ниже👇.
Q&A
В: Зачем использоватьwidth
а такжеheight
Вместо того, чтобы использоватьtransform: scale()
Анимировать это?
A: Для производительности анимации,width
а такжеheight
плохо, вы можете попробовать использоватьtransform
. Почему бы мне не сделать это? Проблема в том, что браузер рендерит элемент (трансформирует) в ускоренном слое. Этот слой может вызывать проблемы, когда кнопки имеют непрямоугольные края.
В: Зачем менятьtop
а такжеleft
вместоtransform: translate()
Шерстяная ткань?
О: Обратитесь к предыдущей статье.
В: Могу ли я следить за вами в Твиттере?
О: Конечно. (Оригинальный автор Twitter @electerious)