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

16 апреля 2010, 0:28 Дмитрий Копров HTML и CSS рейтинг +15-

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

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

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

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

Рекламное место, которое может стать вашим

Понравилась статья?

Тогда подпишись на обновления через RSS или воспользуйся
другими способами подписки.

Читать в Яндекс.Ленте Добавить в Google Добавить в Netvibes
  •  

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

RSS
  • Аватарка
    16 апреля в 15:55 ]]>Тормоз]]>
    В блогролле у себя прочёл "вместО" и прибежал яростно опровергать :) Прочёл и вспомнил более простую штуку: LoVe HAte. Я её запомнил благодаря Керри Бикнер.
  • Аватарка
    17 апреля в 14:30 petrik
    да, быстро успеваете переводить забугорные статьи =)
  • Аватарка
    19 апреля в 23:00 ]]>Влад]]>
    Извиняюсь за оффтоп, у вас на картинке в начале статьи цветовая схема подсветки синтаксиса приятная, что за тема и для какого редактора не подскажете?
  • Аватарка
    19 апреля в 23:05 spike
    Влад,

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

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

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

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

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

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

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

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

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

    :active — это именно момент нажатия. То есть когда кнопка именно нажата и еще не отпущена. А фокус — либо побочный эффект нажатия на ссылку (когда она якорь), либо эффект перемещения фокуса ввода клавиатурой.
    А в статье этот псевдокласс упоминается, потому что IE версий ниже 7, воспринимали :active, так же, как и :focus. При этом ничего не подозревая о самом :focus. =)
  • Аватарка
    27 апреля в 9:20 ]]>darya]]>
    Статья хорошая, главное, что информации море и написана она кратко и ясно! Спасибо за статью!
  • Аватарка
    3 июня в 2:44 ]]>webluck]]>
    :fucus - это для элементов форм!
    помоиму вы что-то путаете.
  • Эл. почта (используется для Граватарки)
  • Домашняя страница
  • Имя в Твиттере
  • Разрешенные теги Текст сообщения (надо бы заполнить это поле)
  • как выглядит какой тег
    жирный текст <b>жирный текст</b>
    курсивный тект <i>курсивный тект</i>
    зачеркнутый текст <s>зачеркнутый текст</s>
    подчеркнутый текст <u>подчеркнутый текст</u>
    ссылка <a href="адрес">ссылка</a>
    function foo() { ... }
    <pre><code>function foo() { ... } </code></pre>