Всегда используйте :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

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

Тормоз
В блогролле у себя прочёл "вместО" и прибежал яростно опровергать :) Прочёл и вспомнил более простую штуку: 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

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

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

как выглядит какой тег
жирный текст <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>
разрешенные теги или посмотреть как будет выглядеть
counter strike mt2 silkroad pvp metin2 metin2 pvp knight pvp gm olarak başlayan pvpler pvp silkroad pvp serverler counter strike serverler msn show cam show görüntülü sohbet oyunlar suskunlar gazete oku