Подтвердить что ты не робот

Изображение не может быть включено внутри якоря только в IE7

Структура HTML

<a>
   <span>   <!-- Span has width & height -->
   <img>
   </span>
   <span> Some text <span>
</a>

Якорь не доступен для кликов только в IE7, я знаю, что проблема возникает из-за hasLayout, если мы удалим высоту и ширину диапазона, он будет работать нормально.

Но мне нужно, чтобы он работал без удаления высоты и ширины.

РЕДАКТИРОВАТЬ: Здесь вы можете сыграть здесь пример: http://jsfiddle.net/rxcAb

4b9b3361

Ответ 1

Решение только для CSS

Tomas- Я изменил вашу скрипту в рабочий пример. Я изменил свой код на использование span внутри тега a, потому что недопустимо иметь стандартный элемент уровня блока (a div) в встроенном элементе (тег a). Предоставление макета тега a (я использовал inline-block), а затем установил position:relative на этом span с помощью z-index: -1, толкает span "ниже" тега a и заставляет IE7 распознавать a снова активен. Ниже приведен модифицированный код, используемый в моей скрипке. Возможно, вы захотите установить более общее имя класса, чем my ie7AFix (вы, вероятно, также захотите просто нацелить IE7 на те свойства CSS, которые необходимы для него). Я предполагаю, что вы меняете изображения width и height изображениями, и, следовательно, почему у вас есть их как встроенный стиль.

HTML

<a href="http://www.google.com/" class="ie7AFix">
  <span style="width:222px; height: 150px;">
    <img src="http://artax.karlin.mff.cuni.cz/~ttel5535/aviff/photos/scaled/P000137_220x148.jpg" style="width:220px; height: 148px;">
  </span>
</a>

CSS

a.ie7AFix {
    display: inline-block; /*needs to set hasLayout; zoom: 1, etc.*/
}

.ie7AFix span {
    border: solid #666 4px;
    display: block;
    position: relative;
    z-index: -1;
    line-height: 0; /*this made it "cross browser" eliminating extra bottom space*/
}

.ie7AFix img { border: 1px solid red; }

Обновлено Fiddle с line-height добавлено для создания "кросс-браузера", если вы не хотите настраивать IE7 только. Я сохранил width и height в span html выше, только потому, что его попросил исходный вопрос (как gviswanathan, так и Tomas). Если вам почему-то не нужно устанавливать размеры на span, а просто пытаться сделать двойную рамку на изображении, тогда тридцать ответ приведенный в комментарии ниже, намного проще.

Ответ 2

С помощью jQuery следующие действия заставят все ссылки работать, а курсор "указатель":

$(document).ready(function () {

    $('a')
        .click(function () {        
            window.location = $(this).attr('href');
        })
        .hover(function () {
            $(this).css('cursor', 'pointer');
        });

});

Я тестировал этот симулятор IE7 с IE8 в режиме просмотра совместимости, но не могу гарантировать, что он будет для IE7 сам по себе.

Возможно, вы захотите применить это более выборочно - я подозреваю, что это может замедлить работу более старого браузера - в этом случае примените класс (например, <a href='myClass'>) ко всем ссылкам, которые разбиты таким образом, и просто измените $('a') на $('.myClass')

Ответ 3

Вы пытались использовать прокладку HTML5? Это очень помогает с проблемами, вызванными hasLayout.

<!--[if lt IE 9]>
<script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

Ответ 4

Просто выньте SPAN из IMG. Элемент IMG можно стилизовать с классом, как и любой другой элемент, поэтому вам не нужен диапазон.

Ответ 5

Ah другое свойство hasLayout

в IE7 невозможно достичь и сохранить ширину пролета, если бы вы могли показать, чего вы пытаетесь достичь в скрипте JS, возможно, мы могли бы помочь, найти способ вокруг него, например. и это всего лишь догадка, поместив ширину на anchor с некоторым дополнением, поможет создать полностью доступную для клика область и по-прежнему разрешить сдерживать "заголовок", если это то, что вам нужно.

Пример обходного пути, а не исправление

CSS

a {
  display: inline-block;
  background: #ff0; 
  max-width: 50px; 
  padding: 10px; 
  text-align: center;
}

img {border: 0; display: block; margin-bottom: 10px;}
span {line-height: 1.5;}

HTML:

<a href="#">
   <img width="50" height="50" src="http://dummyimage.com/50x50/000/fff" alt="">
   <span>Some text and even longer</span>
</a>

Выше была только мысль, и если это не то, что вам нужно, тогда представьте образец jsfiddle.net

Ответ 6

предоставляют следующие CSS правила для элемента a:

{
    display:block;
    overflow:hidden;
}

Ответ 7

Может быть, проблема в том, что, поскольку вы не определили href="#" внутри тэга <a> Итак, поместите href="#" внутри тэга <a>. Напишите вот так:

<a href="#">
   <span>   <!-- Span has width & height -->
   <img>
   </span>
   <span> Some text <span>
</a>

Ответ 8


Просто оберните тег привязки внутри Div или Span. Он работает в IE7.

Этот путь неправильный..?

Ответ 9

Из вашего сообщения я думаю, что вам нужно кликабельное изображение с текстом с информацией об интерференции! Надеюсь, это поможет вам;)

http://jsfiddle.net/ajinkyax/v5KH5/3/

<a href="http://www.google.com/" class="imgLink">
<img src="http://artax.karlin.mff.cuni.cz/~ttel5535/aviff/photos/scaled/P000137_220x148.jpg" />
<span>Info text about image</span> </a>

CSS

.imgLink {display: block; width: 200px; text-align: center;}​

Ответ 10

Смотрите скрипт для кода и демонстрации

Fiddle: http://jsfiddle.net/rxcAb/29/

Демо: http://jsfiddle.net/rxcAb/29/embedded/result/

Прекрасно работает в IE7, IE8, FF, Chrome, Safari.

Никаких изменений в коде: См. ниже

<a href=http://www.google.com/>
<div class="gal_image" style="width:222px; height: 150px;">
        <img src="http://artax.karlin.mff.cuni.cz/~ttel5535/aviff/photos/scaled/P000137_220x148.jpg" style="width:220px; height: 148px;">
</div>
</a>

Ответ 11

Легкий способ сделать это:

<p>
 <span><img></span>
 <span> Some text <span>
 <a></a>
<p>

p { display: block; width: 100px; height: 100px; position: relative; }
a { display: block; width: 100px; height: 100px; position: absolute; top: 0; left: 0; background: #fff; opacity: .0; filter: alpha(opacity=0); -ms-filter:"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)"; }`

Ответ 12

Если у вас есть что-то вроде:

<a name="link1" href="somelink.php">
<div class="somediv"><img src="image.jpg" class="somestyle"></div>
</a>

Просто добавьте свойство стиля в якорь следующим образом:

<a name="link1" href="somelink.php" style="display: block; overflow: hidden;">

Это приведет к тому, что div и все внутри него будут доступны в IE7 + и firefox и chrome.