сделайте объект HTML svg также кликабельной ссылкой


У меня есть объект SVG на моей HTML-странице и я оборачиваю его в якорь, поэтому при нажатии на изображение svg он переносит пользователя на ссылку якоря.

<a href="http://www.google.com/">
    <object data="mysvg.svg" type="image/svg+xml">
        <span>Your browser doesn't support SVG images</span>
    </object>
</a>

когда я использую этот блок кода, щелчок по объекту svg не приведет меня к google. В IE8

Я не хочу изменять мое изображение svg, чтобы содержать теги.

мой вопрос в том, как я могу сделать изображение svg кликабельным?

10 113

10 ответов:

самый простой способ-не использовать . Вместо этого используйте тег , и якорь должен работать просто отлично.

на самом деле, лучший способ решить это... в теге используйте:

pointer-events: none;

Примечание: пользователи, у которых установлен плагин блокировки рекламы, получают вкладку [блок] в правом верхнем углу при наведении (так же, как и флеш-баннер). По настройкам этого css, это тоже уйдет.

http://jsfiddle.net/energee/UL9k9/

хотел бы взять на себя ответственность за это, но я нашел решение здесь:

https://teamtreehouse.com/forum/how-do-you-make-a-svg-clickable

добавьте в css для якоря следующее:

a.svg {
  position: relative;
  display: inline-block; 
}
a.svg:after {
  content: ""; 
  position: absolute;
  top: 0;
  right: 0;
  bottom: 0;
  left:0;
}


<a href="#" class="svg">
  <object data="random.svg" type="image/svg+xml">
    <img src="random.jpg" />
  </object>
</a>

ссылка работает на svg и на резервном варианте.

у меня была та же проблема, и мне удалось решить эту проблему:

обертывание объекта элементом, установленным в block или inline-block

<a>
    <span>
        <object></object>
    </span>
</a>

добавлять к <a> теги:

display: inline-block;
position: relative; 
z-index: 1;

и <span> теги:

display: inline-block;

и <object> теги:

position: relative; 
z-index: -1

смотрите пример здесь:http://dabblet.com/gist/d6ebc6c14bd68a4b06a6

найдено через комментарий 20 здесь https://bugzilla.mozilla.org/show_bug.cgi?id=294932

вы также можете вставить что-то вроде этого в нижней части вашего SVG (прямо перед закрытием </svg> tag):

<a xmlns="http://www.w3.org/2000/svg" id="anchor" xlink:href="/" xmlns:xlink="http://www.w3.org/1999/xlink" target="_top">
    <rect x="0" y="0" width="100%" height="100%" fill-opacity="0"/>
</a>

тогда просто измените ссылку, чтобы удовлетворить. Я использовал 100% ширину и высоту, чтобы покрыть SVG, в котором он сидит. Кредит для метода идет к умным людям на Clearleft.com -там я впервые увидел, как он используется.

упрощение решения Ричарда. Работает, по крайней мере в Firefox, Safari и Opera:

<a href="..." style="display: block;">
    <object data="..." style="pointer-events: none;" />
</a>

см.http://www.noupe.com/tutorial/svg-clickable-71346.html для дополнительных решений.

для этого во всех браузерах необходимо использовать комбинацию методов @energee, @Richard и @Feuermurmel.

<a href="" style="display: block; z-index: 1;">
    <object data="" style="z-index: -1; pointer-events: none;" />
</a>

добавляем:

  • pointer-events: none; заставляет его работать в Firefox.
  • display: block; он работает в Chrome и Safari.
  • z-index: 1; z-index: -1; делает его работать в IE, а также.

Я решил это путем редактирования файла svg тоже.

я завернул xml всей графики svg в тег группы, который имеет событие click следующим образом:

<svg .....>
<g id="thefix" onclick="window.top.location.href='http://www.google.com/';">
 <!-- ... your graphics ... -->
</g>
</svg>

решение работает во всех браузерах, поддерживающих объект svg script. (по умолчанию тег img внутри вашего элемента объекта для браузеров, которые не поддерживают svg, и вы будете охватывать гамму браузеров)

я попробовал этот чистый простой метод и, кажется, работает во всех браузерах. Внутри файла svg:

<svg>
<a id="anchor" xlink:href="http://www.google.com" target="_top">
  
<!--your graphic-->
  
</a>
</svg>
  

сделайте это с помощью javascript и добавьте onClick-атрибут objectэлемент:

<object data="mysvg.svg" type="image/svg+xml" onClick="window.location.href='http://google.at';">
    <span>Your browser doesn't support SVG images</span>
</object>