Ссылки с вложением
Дата публикации: 23.06.2010

Проблема
В ссылке, в которой есть вложенные друг в друга элементы, при определённых обстоятельствах (в виде css правил), кликабельным остаётся только первый.
Решение
Вариантов решения, на самом деле, несколько. Выбор конкретного зависит от поставленной задачи и дизайна. Итак, чтоб было понятно, «павлин-мавлин» выглядит так:
<a href="#">
<span>
<img src="img.png" alt="" width="100" height="100" />
</span>
</a>
span {
width: 100px;
height: 100px;
display: block;
}
В ИЕ6 такая конструкция будет не кликабельна. Пример.
Нужно отметить, что если исключить из правила display: block, или размеры блока, то ссылка будет нажиматься. Следовательно, наш подопытный span каким-то образом перекрывает родительский для себя элемент <a>. Не хотелось бы вникать в тайны и загадки ИЕ6, будет достаточно рассмотреть пути их обхода.
Вариант 1
Изначальную конструкцию оставляем такой же. Как написано выше, исключим из правила размеры для span, при этом оставим его блочным :
span {
display: block;
}
Вариант 2
«Вытаскиваем» картинку из спана и кладём её за ним:
<a href="#">
<span></span>
<img src="img.png" alt="" width="100" height="100" />
</a>
Спану добавляем «маленькое счастье», а картинка в данном случае будет спозиционирована абсолютом (само собой, ссылку нужно наделить relative/absolute):
span {
width: 100px;
height: 100px;
display: block;
cursor: pointer;
}
img {
position: absolute;
top: 0;
left: 0;
}
a {
position: relative;
}
Маленькое неудобство этого варианта — необходимость позиционировать картинку «вручную», хотя в некоторых случаях это можно отнести и к достоинствам.
Вариант 3
Такой вариант подойдет, если нет жесткого требования по кликабельности рамки (span). Просто меняем местами элементы:
<span>
<a href="#">
<img src="img.png" alt="" width="100" height="100" />
</a>
</span>
Вывод
Погуглив по этому вопросу, был найден вариант решения с помощью JavaScript, но он мне совсем не приглянулся. К тому же в данном случае, если хорошенько подумать над структурой запланированной конструкции, то вполне можно избежать разного рода «костылей», коих уже немеряно много у нашего старичка, или, может быть, придумать еще какие-нибудь хитрые конструкции, которые ему придутся по душе. «…Нафига козе баян?…»
