Кликабельные области изображения - даже когда экран меняет размеры HTML - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь научиться делать простой сайт в HTML. В настоящее время я создал фоновое изображение, которое имеет несколько фигур. Я хочу, чтобы разные части изображения были кликабельными ссылками. Я понимаю, как найти координаты и использовать карту изображения, однако кликабельные ссылки не работают, когда я меняю размер экрана. Как сделать так, чтобы интерактивные области работали на экранах разных размеров?

body, html {
        height: 100%;
        margin: 0;
    }
    
    .bg {
        background-position: left;
        background-repeat: no-repeat;
        background-size: 100% 100%;
    }
    <div class="bg"></div>
    <body>
    <img src="https://cdn.pixabay.com/photo/2018/01/24/18/05/background-3104413_1280.jpg" width="100%" height="100%" usemap="workmap" class="bg">
    <map name="workmap">
        <area target="_blank" alt="Game1" title="Game1" href="game1.html" coords="243,133,79" shape="circle">
        <area target="_blank" alt="Game2" title="Game2" href="game2.html" coords="870,147,680,33" shape="rect">
        <area target="_blank" alt="Game3" title="Game3" href="game3.html" coords="889,379,80" shape="circle">
        <area target="_blank" alt="CS" title="CS" href="https://code.org/educate/csp " coords="770,671,73" shape="circle">
        <area target="_blank" alt="Game4" title="Game4" href="game4.html" coords="163,587,214,492,267,473,335,483,377,603,327,631,249,658,211,641" shape="poly">
    </map>

Спасибо!

Ответы [ 2 ]

0 голосов
/ 07 ноября 2018

Я согласен с @Martin. Лучший вариант здесь - SVG. Ваш SVG может выглядеть так: (Я использую ваши координаты.)

*{margin:0;padding:0;}
svg{width:100vh;border:1px solid;}
svg *{fill:rgba(0, 255, 255, .4)}
<svg viewBox="0 0 1800 1800">
   <image xlink:href="https://cdn.sstatic.net/Sites/stackoverflow/img/404.svg" width="100%"  />
  <a xlink:href="https://stackoverflow.com"><circle cx="243" cy="133" r="79" /></a>
  <a xlink:href="https://stackoverflow.com"><rect x="870" y="147" width="680" height="33" /></a>
  <a xlink:href="https://stackoverflow.com"><circle cx="889" cy="379" r="80" /></a>
  <a xlink:href="https://stackoverflow.com"><circle cx="770" cy="671" r="73" /></a>
  <a xlink:href="https://stackoverflow.com"><polygon id="test" points="163,587 214,492 267,473 335,483 377,603 327,631 249,658 211,641" /></a>
  
</svg>     
0 голосов
/ 07 ноября 2018

Почему подход <map> не самый лучший:

Существует множество недостатков использования системы HTML image <map> / <area> на ваших HTML-страницах. В частности, потому что, когда само изображение будет (должно) быть масштабируемым и динамичным в зависимости от размера экрана клиента, процесс настройки кликабельных элементов, относящихся к изображению, для отображения любого размера, просто не существует здесь.

Поскольку элементы HTML <map> имеют абсолютный по своим масштабам и размеру, они не будут работать с содержимым динамического размера (width:80% и т. Д.).

Что вы можете сделать вместо этого?

Есть несколько вариантов. Существует несколько систем Javascript , которые вы можете найти, которые будут динамически изменять размеры области <map>, когда обнаружат размер окна (пере). Это, конечно, добавит некоторые накладные расходы, а также раздувание JS к загрузкам страниц.

ИЛИ Подожди, грядет барабанная дробь ... Слышишь?

ИСПОЛЬЗОВАТЬ SVG

Yep - S calable V ector G рафики - это будущее настоящее в отношении кликов при отображении изображений без накладных расходов Javascript Вы можете прочитать о них в их вики или в MDN .

Таким образом, используя SVG, вы можете импортировать стандартный формат изображения (например, JPG и т. Д.), А затем наложить его на точки привязки и интерактивные элементы, которые можно стилизовать с помощью стиля в стиле CSS, который дает значительно большую поддержку и возможности, чем старый синтаксис <map>, такой как затухание, зависание, смешивание и размытие, все это происходит на статических изображениях из-за взаимодействия с пользователем в любой заданной точке на экране любого размера.

Покажи мне как!

Настоятельно рекомендуется это руководство по созданию интерактивной карты областей SVG для элемента изображения HTML.


(ссылки выделены для иллюстрации)

#backing {
	vertical-align: middle;
	margin: 0;
	overflow: hidden;
}
#backing svg { 
	display: inline-block;
	position: absolute;
	top: 0; left: 0;
}
    <figure id='backing'>
    <svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1280 504" preserveAspectRatio="xMinYMin meet" >
    	<image width="1280" height="504" xlink:href="https://cdn.pixabay.com/photo/2018/01/24/18/05/background-3104413_1280.jpg">
    	</image>
   <a xlink:href="game1.html"><circle cx="243" cy="133" r="79" fill="#fff" opacity="0.15" /></a>
  <a xlink:href="game2.html"><rect x="870" y="147" width="680" height="33" fill="#fff" opacity="0.25"/></a>
  <a xlink:href="game3.html"><circle cx="889" cy="379" r="80" fill="#fff" opacity="0.1"/></a>
  <a xlink:href="https://code.org/educate/csp"><circle cx="770" cy="671" r="73" fill="#fff" opacity="0.2"/></a>
  <a xlink:href="game4.html"><polygon id="test" points="163,587 214,492 267,473 335,483 377,603 327,631 249,658 211,641" fill="#fff" opacity="0.3"/></a>
    	</svg>
      </figure>
...