Эта статья взята из"Блог сердечного загара"из«Анимационный дизайн · Эффекты кнопок», больше статей оGithub
Добро пожаловать в Exchange и Star
Список спецэффектов
слип-бокс:
желе:
пульс:
вспышка:
пузырь:
эффект раздвижной коробки
визуализация
принцип
Поскольку элемент кнопки может использовать псевдоэлементы «до/после», можно реализовать наложения в динамических графиках с помощью псевдоэлементов.
Чтобы избежать перерисовки перерисовки, направление движения скользящего блока вертикальное, поэтому используйтеscaleY
Атрибуты. Для направления анимации вам нужно использоватьtransform-origin
Измените источник анимации.
Код
HTML:
<button>xin-tan.com</button>
CSS:
button {
outline: none;
border: none;
z-index: 1;
position: relative;
color: white;
background: #40a9ff;
padding: 0.5em 1em;
}
button::before {
content: "";
z-index: -1;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
background-color: #fa541c;
transform-origin: center bottom;
transform: scaleY(0);
transition: transform 0.4s ease-in-out;
}
button:hover {
cursor: pointer;
}
button:hover::before {
transform-origin: center top;
transform: scaleY(1);
}
эффект желе
визуализация
Принцип и Кодекс
Эффект желе можно разделить на 5 частей, поэтому его не легко пройтиtransition
добиться, с помощьюanimation
. И момент времени, когда анимация запускается, - это когда мышь приближается, поэтомуanimation
быть в:hover
заявление в.
button {
z-index: 1;
color: white;
background: #40a9ff;
outline: none;
border: none;
padding: 0.5em 1em;
}
button:hover {
cursor: pointer;
animation: jelly 0.5s;
}
Приступим к написанию спецэффектов желейной анимации. Эту анимацию можно разбить на 4 части: «Начало => Сжатие => Сжатие => Возврат в исходное состояние». Сожмите и хлюпайте здесь черезscale
Для достижения код выглядит следующим образом:
@keyframes jelly {
0%,
100% {
transform: scale(1, 1);
}
33% {
transform: scale(0.9, 1.1);
}
66% {
transform: scale(1.1, 0.9);
}
}
Сделайте еще один шаг вперед
Вышеупомянутая динамика была смоделирована хорошо.Если 4 части изменить на 5 частей: «Исходное => Сжатие => Сглаживание => Сжатие => Возврат в исходное состояние».Визуально будет эффект пружины, как эффект прессования желе вручную:
@keyframes jelly {
0%,
100% {
transform: scale(1, 1);
}
25%,
75% {
transform: scale(0.9, 1.1);
}
50% {
transform: scale(1.1, 0.9);
}
}
импульсный эффект
визуализация
Принцип и Кодекс
Во-первых, давайте избавимся от стиля кнопки по умолчанию. Обратите внимание на настройку кнопкиz-index
атрибут и заставить его действовать, убедитесь, что он больше, чем::before
изz-index
Атрибуты,Предотвратить покрытие элементов dom псевдоэлементами.
button {
position: relative;
z-index: 1;
border: none;
outline: none;
padding: 0.5em 1em;
color: white;
background-color: #1890ff;
}
button:hover {
cursor: pointer;
}
Осталось установить псевдоэлемент. Потому что импульсный эффект создает впечатление, что он «выдолблен» для увеличения. Таким образом, объект измененияborder
Атрибуты. Эффект пустотелости достигается за счет прозрачного фона.
button::before {
content: "";
position: absolute;
z-index: -1;
top: 0;
left: 0;
bottom: 0;
right: 0;
border: 4px solid #1890ff;
transform: scale(1);
transform-origin: center;
}
Время начала анимации — когда мышь приближается, цвет на границе становится светлее, размер становится меньше, а прозрачность постепенно становится равной 0.
button:hover::before {
transition: all 0.75s ease-out;
border: 1px solid#e6f7ff;
transform: scale(1.25);
opacity: 0;
}
⚠️ переход и трансформация размещены вhover
Псевдоэлемент в состоянии, предназначенный для мгновенного возврата анимации в исходное состояние.
эффект вспышки
визуализация
Принцип и Кодекс
Реализация по-прежнему основана на псевдоэлементах. Эффект вспышки больше фокусируется на сопоставлении цветов. Суть анимации заключается в использованииrotate
Для достижения эффекта «наклона» используйтеtranslate3d
Для достижения эффекта «вспышки».
button {
outline: none;
border: none;
z-index: 1;
position: relative;
color: white;
background: #262626;
padding: 0.5em 1em;
overflow: hidden;
--shine-width: 1.25em;
}
button::after {
content: "";
z-index: -1;
position: absolute;
background: #595959;
/* 核心代码:位置一步步调整 */
top: -50%;
left: 0%;
bottom: -50%;
width: 1.25em;
transform: translate3d(-200%, 0, 0) rotate(35deg);
/* */
}
button:hover {
cursor: pointer;
}
button:hover::after {
transition: transform 0.5s ease-in-out;
transform: translate3d(500%, 0, 0) rotate(35deg);
}
⚠️translate3d
Помимо предотвращения перерисовки перерисовки, он также может включить ускорение графического процессора для повышения производительности. Однако для того, чтобы облегчить описание ранее, общее использованиеtranslate
Атрибуты.
Пузырьковые эффекты
визуализация
Принцип и Кодекс
Во-первых, отключите стиль элемента кнопки по умолчанию и настройте цветовую схему:
button {
outline: none;
border: none;
cursor: pointer;
color: white;
position: relative;
padding: 0.5em 1em;
background-color: #40a9ff;
}
Поскольку уровень псевдоэлемента кнопки должен покрывать кнопку, необходимо установитьz-index
Атрибут для предотвращения затенения отображения псевдоэлементами. Ведь я хочу только обложку фонового цвета, а шрифт не надо обмазывать. В приведенном выше стиле добавьте:
button {
z-index: 1;
overflow: hidden;
}
Последнее, с чем нужно иметь дело, — это эффект изменения псевдоэлементов.Спецэффект распространяется от центра к окружающему, поэтому он должен быть центрирован.
Для изменения размера или использованияscale
Атрибуты.
Поскольку он круглый,border-radius
Установите его на 50%.
button::before {
z-index: -1;
content: "";
position: absolute;
top: 50%;
left: 50%;
width: 1em;
height: 1em;
border-radius: 50%;
background-color: #9254de;
transform-origin: center;
transform: translate3d(-50%, -50%, 0) scale(0, 0);
transition: transform 0.45s ease-in-out;
}
button:hover::before {
transform: translate3d(-50%, -50%, 0) scale(15, 15);
}
Изменить направление?
Эффект пузыря в примере кода должен распространяться от середины к четырем сторонам Что, если вы хотите распространиться из верхнего левого угла в нижний правый угол? Например, как показано на следующем рисунке:
Процесс очень прост,Просто измените исходное положение пузыря.
button::before {
z-index: -1;
content: "";
position: absolute;
width: 1em;
height: 1em;
border-radius: 50%;
background-color: #9254de;
/* 变化位置的代码 */
top: 0;
left: 0;
transform-origin: center;
transform: scale3d(0, 0, 0);
transition: transform 0.45s ease-in-out;
/* *********** */
}
button:hover::before {
transform: scale3d(15, 15, 15);
}
Ссылка на ссылку
- "transform-origin: изменить источник анимации"
- «Повысьте производительность вашего сайта с помощью CSS с аппаратным ускорением»
- "переменные css3"