Все ссылки по умолчанию могут получить фокус при навигации с клавиатуры. Однако в некоторых ситуациях это может быть излишне. Например, рассмотрим список авторов статей в блоге.
Каждый элемент в списке содержит имя, фотографию и краткую биографию автора. Имя и фотография обрамлены ссылками на архив статей этого автора.
<ul class="authors">
<li class="author">
<div class="author-userpic">
<a class="author-archive-link" title="Vicki Moyes" href="/author/vicki/">
<img class="author-pic photo" alt="Vicki Moyes" src="/img/users/vicki-moyes.jpg">
</a>
</div>
<p class="author-title">
<a href="/author/vicki/" class="author-title-archive-link">Vicki Moyes</a>
</p>
<p class="author-bio">Director of Moyes Gliders.
Organizer of annual Forbes competition.</p>
</li>
</ul>
Используем tabindex=-1
При переключении фокуса с помощью клавиши «Tab» пользователь каждый раз сначала попадает на ссылку с фотографии, затем на ссылку с имени.
Проектируя интерфейс, первостепенно внимание уделяется пользователям, работающим с мышью или touch-интерфейсом. Кому-то из них привычнее и удобнее кликать по картинкам, а кто-то кликает только по явно обозначенным ссылкам. Поэтому удалить ссылку, обрамляющую фотографию, нельзя. Но зато можно сделать так, чтобы она не участвовала в последовательности переключения фокуса с клавиатуры. Для этого добавим ей атрибут
tabindex="-1"
.
Такой нехитрый прием позволяет значительно улучшить впечатления пользователя от интерфейса и сделать его поведение более предсказуемым.
Одна ссылка
В этом примере два находящиеся рядом объекта (фотография и имя автора) должны вести на одну и ту же страницу. Технически их можно обернуть одной ссылкой. В HTML5 внутри строчного элемента a
могут находиться как строчные, так и блочные элементы.
<a href="page.html">
<div><img src="img1.jpg" alt="Page image"></div>
<p>Page title</p>
</a>
Фрагмент кода валиден на 100%, только если используется в HTML5 документе.
Коментарии к заметке
В данном случае совсем не сложно сделать фотографию и текст одной ссылкой. И я не вижу причины почему бы именно так не сделать.
Последний пример, может быть и валиден, зато запросто может взорвать мозг третьему фаерфоксу.
GreLI , ну это же всего-лишь пример. Вообще это типичный, я считаю, случай, когда есть заголовок, картинка, несколько предложений из статьи и ссылка «Далее». И оформление этих элементов может быть достаточно изощренным.
Александр , правда что-ли? Я всегда стараюсь такого избегать. Раз элемент строчный (или «строковый», как правильно?), то не место внутри него всяким блочным элементам.
Третьему файрфоксу взрывал мозг (и совершенно справедливо) не «блочный» HTML-элемент внутри «строчного», а блочный CSS-бокс внутри строчного. Таких конструкций я тоже стараюсь избегать. А «блочные элементы» в ссылках замечательно работают во всех браузерах, включая вымерший IE6. Поэтому HTML5, с его стремлением «мостить проторенные тропы», и узаконил эту возможность.