Всегда используйте :hover вместе с :focus

Всегда используйте :hover вместе с :focus

Мне очень понравилась Пашина статья о псевдоклассах. =) Специально по такому случаю в закромах была недавняя заметка с 456bereastreet.

В ней рассказывается о том, что может повлечь за собой игнорирование псевдокласса :focus.

Мы рассмотрим типы проблем и в итоге узнаем что делать, чтобы избежать их.

  

Качественная разработка сайта любой сложности.
Компания ltd-studio.

Реализация правил для псевдокласса :hover без реализации :focus является наиболее частым недосмотром при проектировании стиля сайта. Серьезность проблем при таком недосмотре зависит от того, как вы определили поведение для состояния :hover.

Рассмотрим их в порядке возрастания серьезности.

1. Неряшливость

Если для :hover заданы простые правила, например, только изменение цвета текста, пренебрежение :focus не влечет за собой серьезных проблем. В этом случае при смене фокуса с помощью клавиатуры актуальный элемент просто никак не выделится.

2. Серьезные проблемы использования

Гораздо больше проблем вы получите, если зададите свойство outline равным 0 или значению none. Эта проблема сейчас набирает актуальность, т.к. сведение на нет эффекта outline довольно популярно.

В этом случае ссылки технически доступны, но это никак не подтверждено визуально. Разве что некоторые браузеры отображают в статусной строке текущее значение href сфокусированной ссылки.

3. Полная недосягаемость

Существуют методики, которые делают содержимое совершенно недоступным для пользователей устройств без поддержки мыши. В частности, когда :hover используется для раскрытия меню, и при этом не определена реакция на :focus. В этом случае меню будет недоступно, если у вас нет мышки. Epicfail.

Фокус на :focus (и :active)

Все перечисленные проблемы решаются довольно просто: там же, где вы определяете правила для :hover, укажите и :focus. Для того, чтобы Internet Explorer версий 7 и ранее распознал правила, надо дописать псевдокласс :active.

Пара слов о порядке перечисления псевдоклассов объявлении

Этот параграф — отдельная заметка. Все желающие могут ознакомиться с оригиналом статьи.

Для многих известно, что порядок объявления псевдоклассов правиле CSS имеет значение. На 456bereastreet предпочитают следующий порядок:

:link, :visited, :hover, :focus, :active

Этот порядок основан на нескольких статьях Эрика Мейера. Одна из них содержит довольно забавные мнемоники, я привожу их ниже на языке оригинала:

  • LoVe’s Hurts Fade Away;
  • Luther Vandross Hits Fabulous Arpeggios;
  • Lord Vader Hates Furry Animals;
  • Lusty Vampires Hunger For Absinthe;
  • Lord Voldemort Has Foul Ambitions.

Небольшое лирическое

Если кто-то думает: «Э... а как же модульные сетки, все дела, Марк Болтон и все такое». Сетки — будут позже. Болтон... при всем к нему уважении, такое огромное количество воды мне попросту надоело переводить. Будет время, переведу. Прошу прощения за то, что не довел до конца. Но там уже какая-то художественная литература, так что сюда ее выкладывать нет никакого смысла. В ближайшем рассмотрении весь этот цикл был всего лишь рекламой его книги с одноименным названием. К сожалению, это западный мир. Бесплатно дают только стакан воды.

Расскажите друзьям

Оцените статью:
  • 1
  • 2
  • 3
  • 4
  • 5

Комментарии — 25

Тормоз
В блогролле у себя прочёл "вместО" и прибежал яростно опровергать :) Прочёл и вспомнил более простую штуку: LoVe HAte. Я её запомнил благодаря Керри Бикнер.
petrik
да, быстро успеваете переводить забугорные статьи =)
#
petrik
Влад
Извиняюсь за оффтоп, у вас на картинке в начале статьи цветовая схема подсветки синтаксиса приятная, что за тема и для какого редактора не подскажете?
spike
Влад,

конечно, подскажу!
Это gedit, а тема называется Oblivion.
Все встроенное, за исключением шрифта (Liberation Mono) — очень его рекомендую.
#
spike  
Влад
Огромное спасибо) а то давно мучился как бы редактор получше раскрасить) шрифт тоже приятный) буду пользовать)
#
Влад
BEKTOP
Хоть вы меня об дорогу бейте — не понимаю разницы между :focus и :active. Всё время пользовался :active, а про :focus узнал намного позже...

Так вот, по сути — это одно и то же: что такое активное состояние элемента? Это то состояние, при котором он имет фокус!
#
BEKTOP
spike
BEKTOP,
это вопрос из разряда «почему Microsoft вечно идет своим особенным непонятным путем?» Этот псевдокласс — один из шагов этого пути.

>Так вот, по сути — это одно и то же: что такое активное состояние элемента? Это то состояние, при котором он имет фокус!

Да, так и есть. Поэтому и назвали его более логично «focus». Это название устоялось в обозначении состояний. И в той же java для такого состояния есть только focus.
#
spike  
BEKTOP
spike, но ведь все остальные браузеры тоже поддерживают :active!..

А насчет Микрософта — это конечно да, но в последнее время я стал задаваться другим вопросом: почему W3C всё время пытается сделать не как у Микрософта :о) Я не хочу тут разводить холиваров и вообще поклонником МС не являюсь, но есть примеры: 1) VML и SVG — насколько я помню, идея xml-языка для векторной графики появилась раньше обеих реализаций, но первой реализацией была именно VML; 2) пока писал первый пункт, забыл второй :о) Ну, неважно...
#
BEKTOP
spike
BEKTOP,
конечно, поддерживают. Потому что многие веб-мастера использовали и используют только :active. Разрабы «других» браузеров заботятся о пользователях, а не только о политике п..корпорации.

В остальном правда получается холивар. Будем придерживаться каждый своего мнения и... не будем забывать об :active и :focus =)
#
spike  
Grin
ВЕКТОР,

:hover это когда именно мышкой навели;
:focus — когда, скажем, табом перешли;
:active — когда мышкой зажали.
spike
Grin,
:focus устанавливается и при клике/зажатии.
Не знаю кто ввел :active, но он фактически дублирует фокус. Потому что элемент «активный в данный момент» === «тот, на котором фокус ввода». Фокус ввода — это далеко не только фокус ввода в текстовое поле. Это фокус ввода вообще: с помощью любого устройства ввода.

Причем, сейчас посмотрел на w3schools.com Ребята крайне хреново объяснили смысл этих классов. =/
#
spike  
spike

Хотя нет, я не прав.

:active — это именно момент нажатия. То есть когда кнопка именно нажата и еще не отпущена. А фокус — либо побочный эффект нажатия на ссылку (когда она якорь), либо эффект перемещения фокуса ввода клавиатурой.
А в статье этот псевдокласс упоминается, потому что IE версий ниже 7, воспринимали :active, так же, как и :focus. При этом ничего не подозревая о самом :focus. =)
#
spike  
darya
Статья хорошая, главное, что информации море и написана она кратко и ясно! Спасибо за статью!
#
darya
webluck
:fucus - это для элементов форм!
помоиму вы что-то путаете.
Q`Relly
Давайте представим:
Вы наслаждаетесь утренним кофе, вам лень брать мышку и тянутся к ссылке...
Воспользуемся табом?

В этом случае при каждом нажатии вас будет перебрасывать на следующую ссылку. При этом стиль ссылки будет отбираться из ":focus" элемента. Тоже самое при нажатии и удерживании элемента.

Не у всех есть возможность кликать ссылки мышкой. Не лишайте их возможности "прыгать" по сайту табом. Будьте милосердны.
#
Q`Relly  
spike
Q`Relly,

как раз об этом в статье и написано. =)
Или это своего рода выжимка из статьи?
#
spike  
Q`Relly
Статья охватывает больше информации. Я лишь привел пример. Из жизни.
#
Q`Relly  
Focus
Спасибо за статью, очень помогла думал почему фокус не срабатывал :)
#
Focus
Nikollo
Ахахаха а на этом сайте как раз вот и не выделяется ни одна ссылка по табу )
Nikollo
Да, и спасибо большое за статью. Всегда буду прописывать фокус, так как сам много пользую TAB. Хотя, надо признать, подавляющее большинство пользователей, как мне представляется, не догадываются о существовании этой клавиши...
!!!cssovec)
:hover - курсор мышки над объектом
:active - MouseDown на объект, MouseUp и объект теряет active
:focus - MouseDown на объект, MouseUp и объект остается с focus и теряет его, когда focus переведен на другой объект
#
!!!cssovec)
BEKTOP
!!!cssovec), это пять!! Спасибо. Теперь я понимаю, что догадывался об этом, но до сознания не доходило :о)
cosmos345
Спасибо за статью, решил испробовать на своем сайте, что то не понравилось )
Mr 13
Лол, плачу =D

На этом сайте как раз косяк, о котором рассказывает статья =Ъ
#
Mr 13

Новый комментарий

как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть
как выглядит какой тег
жирный текст <b>жирный текст</b>
курсивный тект <i>курсивный тект</i>
зачеркнутый текст <s>зачеркнутый текст</s>
подчеркнутый текст <u>подчеркнутый текст</u>
ссылка <a href="адрес">ссылка</a>
function foo() { ... }
<pre><code>function foo() { ... } </code></pre>
разрешенные теги или посмотреть как будет выглядеть

metin2 pvp metin2 pvp serverler pvp serverler