Тема урока — плавность. Сравним два способа поднять панель при наведении: через свойство
раскладки top и через transform. Результат на экране одинаковый, но цена для
браузера разная.
Старый подход: анимация дорогих свойств
Анимация top/left/width заставляет браузер на каждом кадре
пересчитывать раскладку (reflow). На сложных страницах это заметно дёргается. Плюс переход висел только
на :hover — нет реакции на клавиатурный фокус.
top: -8px (reflow на каждом кадре).panel {
position: relative;
top: 0;
transition: top 300ms ease; /* top → постоянный пересчёт раскладки */
}
.panel:hover { /* только мышь, без :focus */
top: -8px;
}
Современный подход: transform + opacity
transform и opacity браузер анимирует на отдельном слое, без reflow —
плавно даже на слабых устройствах. Добавляем :focus-within для доступности и контроль движения.
transform (дёшево, без reflow).panel {
transform: translateY(0);
transition: transform 180ms ease, opacity 180ms ease;
}
.panel:hover,
.panel:focus-within { /* реакция и на фокус */
transform: translateY(-0.25rem);
}
transform и
opacity. Свойства, меняющие геометрию (top, left,
width, height, margin), анимируйте только при необходимости.