图片的可点击区域-即使屏幕尺寸更改为html

时间:2018-11-07 16:54:24

标签: html css image coordinates imagemap

我正在尝试学习如何用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 :(得分:1)

为什么<map>方法不是最好的方法:

在HTML页面中使用HTML图像<map> / <area>系统存在许多弊端。最值得注意的是,当图像本身(应该)基于客户端屏幕尺寸可扩展和动态时,将与图像相关的可点击元素调整为所需的任何尺寸的显示过程,在这里根本就不存在。

由于HTML <map>元素的大小和大小都是绝对,因此它们不适用于动态大小的内容(width:80%等)。

您能做什么呢?

有一些选择。您可以找到一些Javascript systems,当<map>检测到窗口大小时,它们会动态调整<map>区域边界的大小。这些当然会增加一些开销,并给页面加载增加JS膨胀。

OR 等待,有鼓声即将来临...您能听到吗?

使用SVG

是- S 可缩放的 V 扇区 G raphics是与图片映射点击有关的 future 无需使用Javascript,您可以在their wikion MDN上阅读有关它们的信息。

因此,使用SVG,您可以导入标准图像格式(例如JPG等),然后将其与锚点和可单击元素叠加,然后可以使用类似CSS的样式进行样式设置,这比提供了更多支持和可能性静态图像上的旧#backing { vertical-align: middle; margin: 0; overflow: hidden; } #backing svg { display: inline-block; position: absolute; top: 0; left: 0; }语法(例如淡入淡出,悬停,混合和模糊)都是由于在任何设置点,任何大小的屏幕上用户交互而导致的。

告诉我如何!

强烈建议this tutorial在HTML图像元素上制作SVG可点击区域地图。


(为了便于说明,突出显示了链接)

    <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>
<div><img id="logo" style="width:30%" src="https://www.gstatic.com/webp/gallery3/3.png"/>dddddddd</div>
 <input type="button" id="download"  value="download" /> click to console
  <div><button id="button1" class="button1">submit1</button></div>
  <p id="bottom-content">footer</p>

答案 1 :(得分:1)

我同意@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>