Ховър (hover) — CSS псевдоклас и визуално състояние на елемент от интерфейс, което се активира при задържане на курсора на мишката. Този механизъм осигурява обратна връзка на потребителя, потвърждавайки, че елементът е готов за взаимодействие. Според MDN Web Docs (2026), псевдокласът :hover се поддържа от всички съвременни браузъри и е един от най-използваните CSS селектори за създаване на интерактивност.
Основни точки
Ховър (от англ. hover — нося се) — визуална реакция на елемент от интерфейс при задържане на курсора на мишката. Терминът се използва както за самия CSS псевдоклас :hover, така и за състоянието на елемента при задържане.
Концепцията за ховър се появява в ранните графични интерфейси на Xerox Alto (1973) и е стандартизирана в уеб с появата на CSS2 през 1998 г. Оттогава ховър става неразделна част от потребителското изживяване на десктоп.
Според CSS Usage Statistics (2025), 94% от сайтовете в топ 1000 използват псевдокласа :hover поне за един елемент. Най-често ховър се прилага за бутони (89%), връзки (85%) и карти (62%).
Ховър ≠ active. :hover се активира при задържане, :active — в момента на кликване. :focus се активира при фокус от клавиатура. Всяко състояние решава своя задача. Ховър е преглед, active е потвърждение на действие.
Псевдокласът :hover в CSS прилага стилове към елемент, когато потребителят задържи курсора на мишката върху него. Работи с всеки HTML елемент, но най-често се използва с интерактивни елементи.
/* Basic hover implementation */
.button {
background: #4A90D9;
color: white;
padding: 12px 24px;
border: none;
transition: all 0.3s ease;
}
.button:hover {
background: #357ABD;
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(74,144,217,0.4);
}
Специфичност на селектора :hover — същата като на клас (0,1,0). Ако трябва да презапишете ховър за конкретен елемент, използвайте селектор с по-висока специфичност. Редът на деклариране е важен: ако декларирате :hover след :focus, ховър може да не работи при фокус.
:hover може да се комбинира с други псевдокласове за създаване на сложна логика. Например .card:hover .card__title променя стила на заглавието вътре в картата при задържане върху цялата карта. Това позволява създаване на ефекти с вложена анимация.
Hover ефектите се делят на няколко категории според типа на променяното свойство. Всеки тип е подходящ за различни сценарии и създава определено усещане у потребителя.
| Тип ефект | CSS свойство | Пример за приложение |
|---|---|---|
| Цвят | background, color | Бутонът променя цвета на фона при задържане |
| Сянка | box-shadow | Картата се повдига благодарение на сянката |
| Мащаб | transform: scale | Иконата се увеличава при задържане |
| Преместване | transform: translate | Елементът се премества нагоре или настрани |
| Подчертаване | border-bottom, underline | Връзката получава подчертаване отдолу |
| Филтър | filter: brightness | Изображението става по-ярко или по-тъмно |
| Градиент | background-image | Фонът се променя при задържане |
Най-ефективният тип — комбинация от цветен и сенчест ефект. Material Design препоръчва използването на промяна на височината на сянката като основен тип ховър обратна връзка.
Според Google Material Design (2024), ховър ефектът трябва да бъде забележим, но не и разсейващ. Препоръчителната продължителност на анимацията — 200–300 милисекунди. Твърде бързите ефекти (по-малко от 100 ms) може да останат незабелязани, твърде бавните (повече от 500 ms) дразнят потребителя.
CSS свойството transition прави hover ефектите плавни, анимирайки промяната на свойствата във времето. Без transition ховър действа моментално, което изглежда рязко и неприятно за окото.
/* Different transitions per property */
.card {
transition:
box-shadow 0.3s ease-out,
transform 0.2s ease-out,
background 0.15s linear;
}
.card:hover {
box-shadow: 0 8px 30px rgba(0,0,0,0.15);
transform: translateY(-4px);
}
Продължителността на transition зависи от контекста. За малки елементи (икони, връзки) — 150–200 ms. За големи елементи (карти, модални прозорци) — 250–350 ms. Функцията easing ease-out плавно забавя анимацията в края, създавайки естествено усещане.
Препоръчителна практика — посочете transition за всяко анимирано свойство поотделно. Свойството all е удобно във фазата на разработка, но в продукция е по-добре да дефинирате конкретни свойства за анимация, за да избегнете неочаквани ефекти.
На сензорните устройства концепцията за ховър не съществува: няма курсор, който може да бъде задържан върху елемент. Докосването на елемент незабавно активира click, пропускайки ховър състоянието. Това създава проблеми, ако интерфейсът разчита изключително на ховър.
Според StatCounter (2026), 62% от световния уеб трафик идва от мобилни устройства. Да игнорирате липсата на ховър на сензорни екрани означава да загубите контрол над UX за повечето потребители.
/* Disable hover on touch devices */
@media (hover: none) and (pointer: coarse) {
.button:hover {
background: initial;
transform: none;
}
}
Медийната заявка hover: none позволява да се определи, че устройството не поддържа задържане. На такива устройства hover ефектите се изключват и взаимодействието се основава на :active и :focus състояния. Алтернативно решение — показване на ховър съдържание при докосване (първото докосване показва ховър, второто изпълнява действие), но този модел влошава UX.
Достъпността на ховър — критичен аспект, който често се пренебрегва. Потребителите, които управляват интерфейса с клавиатура, не могат да активират :hover. Функциите, достъпни само чрез ховър, стават недостъпни за тях.
Правило на WCAG 2.2 (Success Criterion 1.4.13 — Content on Hover or Focus): съдържанието, което се появява при ховър, трябва да бъде достъпно и при фокус. Ако ховър показва допълнителна информация (tooltip, падащо меню), същата информация трябва да бъде достъпна при :focus.
/* Hover + focus for accessibility */
.tooltip-trigger:hover .tooltip,
.tooltip-trigger:focus .tooltip {
opacity: 1;
visibility: visible;
}
/* Disable animation for vestibular disorder */
@media (prefers-reduced-motion: reduce) {
*:hover {
transition: none;
}
}
Медийната заявка prefers-reduced-motion — уважавайте системните настройки на потребителите. Ако потребителят е изключил анимация в системата, hover ефектите трябва да се прилагат моментално, без transition. Това помага на хора с вестибуларни нарушения.
Допълнителни препоръки: не използвайте ховър за критични функции, не използвайте само цвят за предаване на информация при ховър (добавете икона или текст) и осигурете достатъчен контраст за ховър състояния.
Често задавани въпроси
:hover се активира при задържане на мишката върху елемент. :focus се активира, когато елементът получи фокус — при табулация от клавиатура или след кликване. За достъпност е важно да дублирате hover ефектите чрез :focus.
На touch устройства ховър работи нестабилно: първото докосване активира :hover, второто — click. Това създава объркване. Препоръчва се използването на медийна заявка @media (hover: none) за изключване на hover ефектите на сензорни екрани.
Използвайте събитията mouseenter (задържане) и mouseleave (отместване на курсора). За разлика от CSS ховър, JavaScript дава пълен контрол над анимацията и позволява създаване на сложни последователни ефекти със закъснения.
iOS Safari има специална обработка на :hover. След докосване елементът влиза в състояние :hover и остава в него до следващото докосване. Това може да доведе до залепване на hover стилове. Решение — използвайте @media (hover: hover), за да прилагате ховър само на устройства с поддръжка на задържане.
ease-out (cubic-bezier(0, 0, 0.2, 1)) — оптимален избор за ховър: бърз старт и плавно забавяне в края. ease-in-out е подходящ за ефекти с две фази (появяване и изчезване). Избягвайте linear — изглежда неестествено.
Резюме
Ще разработим мобилно приложение под ключ
IT Sectr създава iOS и Android приложения за стартъпи и бизнеси от 2017 г. Ще ви консултираме и ще предложим най-доброто решение.
Прочетете също