Как сделать пустой тег привязки кликабельным в IE7?
Мне нужно сделать область внутри фонового изображения, доступную для создания события для использования JavaScript. Таким образом, я создал тег привязки и внутри, что я вставил некоторый релевантный текст между семантически бессмысленными тегами, которые я затем сделал скрытым:
<a href="#"><i>foo</i></a>
Затем я дал свойства привязки тега "display: block", значения ширины и высоты и абсолютно позиционировал его там, где мне было нужно, чтобы оно касалось фонового изображения. В Firefox это работает красиво - я наводил курсор, и мой курсор менялся, как ожидалось, - у меня есть что-то доступное для клика. Однако IE7 не нравится тот факт, что якорный тег "пуст" и поэтому не рассматривает его как интерактивный. Поэтому я добавил это в тег anchor в css:
background:url(/no-image.jpg);
... который, кажется, заставляет IE7 предполагать, что что-то есть. IE7 теперь обрабатывает область как интерактивную, даже если фоновое изображение не существует для тега привязки. Но для меня это кажется немного взломанным, и мне интересно, есть ли более элегантный способ справиться с этой проблемой. Любые идеи очень приветствуются. Спасибо.
Ответы
Ответ 1
Избавьтесь от семантически бессмысленных тегов и вместо этого используйте обычную замену изображений CSS.
<a href="#">foo</a>
И затем CSS:
a {
width:100px;
height:100px;
display:block;
text-indent:-9999px;
background:url(/img.png) no-repeat;
}
Добавьте любое позиционирование, которое вам нужно, и оно должно работать нормально.
Ответ 2
Вы обнаружили проблему с рендерингом в IE, и, согласно @Simon ниже, проблема все еще существует, по крайней мере, через IE9.
Ваша background:
хак будет работать, но браузер будет каждый раз отправлять HTTP-запрос для разрешения фиктивного URL. Это может ухудшить производительность вашей страницы. Чтобы достичь того же результата, но не делать ненужный HTTP-запрос, я бы предложил использовать этот URL:
background-image:url(about:blank);
about: blank - это специальный URL-адрес, который браузеры отображают как пустую страницу, поэтому он не влияет на отображение элемента, но также не выполняет никаких HTTP-запросов.
Кстати, проблема возникает только тогда, когда у вас есть абсолютно или относительно позиционированный элемент A (или элемент A внутри позиционированного блока). Обычные не позиционированные гиперссылки, похоже, не имеют этой проблемы в IE7.
Ответ 3
Сделайте вместо этого DIV. Если он вызывает JavaScript, вам вообще не нужен тег привязки.
Вы можете абсолютно поместить, если необходимо.
<div onclick="alert('moo')" style="height;100px;width:100px;cursor:pointer"></div>
Ответ 4
У меня была проблема в IE9 и ниже в последнее время, когда область с клики вокруг метки привязки не работала. Ни один из типичных резолюций не работал у меня. То, что я нашел, добавило этот стиль в элемент html:
html {
position:relative;
z-index:-1001;
}
Упорядочение z-индекса отличается в IE, чем в других браузерах.