0

0

map和area标签怎么用

畫卷琴夢

畫卷琴夢

发布时间:2025-08-30 16:21:01

|

514人浏览过

|

来源于php中文网

原创

答案是使用map和area标签可创建图像热点,但响应式设计中因坐标固定易错位,需用JavaScript动态调整或改用SVG、CSS覆盖层等现代方案更优。

map和area标签怎么用

map
area
标签是HTML中用来创建“图像热点”的机制。简单来说,它们允许你在一张图片的不同区域上定义可点击的链接,让图片的特定部分能够像按钮一样,点击后跳转到不同的页面或执行特定操作。
map
标签定义了图像映射的整体容器,而
area
标签则在
map
中具体划定了这些可点击的形状和它们对应的链接。它们是让静态图片变得更具交互性的基础工具

解决方案

要使用

map
area
标签,核心思想是将一个
@@##@@
标签与一个
标签关联起来。
@@##@@
标签通过
usemap
属性引用
标签的
name
属性。然后,在
标签内部,我们用一个或多个
标签来定义图片上的具体可点击区域。

我们来看一个基本结构:

@@##@@


  
  区域1

  
  区域2

  
  区域3

这里有几个关键点:

  1. @@##@@
    标签的
    usemap
    属性
    :它的值必须以
    #
    开头,后面跟着你
    标签的
    name
    属性值。这是建立图片与映射关系的关键。
  2. 标签的
    name
    属性
    :这个名字是唯一的标识符,供
    usemap
    引用。
  3. 标签
    • shape
      属性
      :定义热点的形状。
      • rect
        :矩形。
      • circle
        :圆形。
      • poly
        :多边形。
      • default
        :如果图片的其他区域没有被
        area
        覆盖,这个
        default
        区域将捕获所有未被定义的点击(不常用)。
    • coords
      属性
      :定义热点区域的坐标。这是最需要精确操作的部分。
      • rect
        x1,y1,x2,y2
        。分别代表矩形左上角的X、Y坐标和右下角的X、Y坐标。
      • circle
        x,y,radius
        。分别代表圆心的X、Y坐标和半径。
      • poly
        x1,y1,x2,y2,...,xn,yn
        。一系列X、Y坐标对,构成多边形的各个顶点。多边形会自动闭合,即最后一个点会与第一个点连接。
    • href
      属性
      :点击该区域后跳转的URL。
    • alt
      属性
      :为可点击区域提供替代文本,这对于可访问性非常重要,当图片无法显示或用户使用屏幕阅读器时会用到。
    • target
      属性
      :与
      标签的
      target
      属性类似,定义链接打开的方式(如
      _blank
      在新窗口打开)。

实际操作中,确定

coords
值往往是比较费时的环节。通常我会用一些图片编辑软件(比如Photoshop、GIMP)来获取像素坐标,或者更简单粗暴点,直接在
浏览器开发者工具里用鼠标悬停或测量来大致估算。对于复杂的形状,这确实是个考验耐心的事情。

为什么在现代网页设计中,
map
area
标签似乎不那么常见了?

说实话,

map
area
标签在如今的网页开发中确实不那么“热门”了。这背后有几个挺实际的原因。

首先,响应式设计的兴起是最大的冲击。

area
标签的
coords
属性是基于像素的绝对坐标。这意味着如果你的图片尺寸在不同设备上缩放了,这些热点区域并不会跟着图片按比例缩放,从而导致点击区域错位,用户体验一塌糊涂。想想看,一张在PC上完美的热点图,到了手机上可能就完全失效了。要解决这个问题,你得动用JavaScript来动态计算和更新这些坐标,这无疑增加了开发的复杂性,甚至不如直接用CSS和JavaScript重新实现来得方便。

其次,交互的灵活性。现代网页对交互性的要求越来越高,我们不只是需要一个简单的点击链接,可能还需要悬停效果、更复杂的动画、甚至是基于用户行为的动态热点。

map
area
本身能提供的交互能力非常有限,它们本质上就是图片上的链接。而使用CSS、SVG(可缩放矢量图形)或者纯粹的JavaScript,我们可以实现远超
map
/
area
的视觉效果和交互逻辑,而且它们在响应式方面表现得更好。比如,用SVG可以直接绘制可点击的矢量图形,它们天生就是响应式的。

再者,开发效率和维护成本。对于复杂的图像,手动计算

poly
coords
是一件非常枯燥且容易出错的工作。一旦图片有所改动,或者需要调整热点区域,维护起来也相当麻烦。相比之下,使用CSS的
position
属性配合
div
或者
button
元素,再通过JavaScript来定位和控制,有时会显得更直观,更易于维护。

当然,这并不意味着

map
area
标签就彻底“过时”了。对于一些非常简单、尺寸固定且不需要响应式处理的图像(比如一些历史遗留系统中的固定图表,或者纯粹的PC端内网应用),它们依然是一种快速实现图像热点的有效方式。我的看法是,它们就像老式工具箱里的一把经典扳手,虽然现在有了电动螺丝刀,但特定场景下,它依然能派上用场。

如何有效地确定
area
标签的
coords
属性值?

确定

area
标签的
coords
属性值,是使用图像热点最核心也最考验耐心的一步。这就像给地图标点,得准确。

对于矩形(

shape="rect"
coords
值是
x1,y1,x2,y2
x1,y1
是矩形左上角的坐标,
x2,y2
是右下角的坐标。这相对简单,你只需要找到矩形对角线的两个点。

对于圆形(

shape="circle"
coords
值是
x,y,radius
x,y
是圆心的坐标,
radius
是半径。你需要找到圆的中心点,然后测量出半径。

对于多边形(

shape="poly"
coords
值是一系列
x,y
坐标对,比如
x1,y1,x2,y2,...,xn,yn
。这些点会按顺序连接起来,形成多边形的边,最后一点会自动连接到第一个点,形成一个闭合区域。这是最灵活但也最复杂的一种,因为你可能需要很多个点来精确勾勒出不规则的形状。

那么,具体怎么获取这些坐标呢?

比格设计
比格设计

比格设计是135编辑器旗下一款一站式、多场景、智能化的在线图片编辑器

下载
  1. 图片编辑软件:这是最常用也是最精确的方法。像Adobe Photoshop、GIMP这类专业的图片编辑软件,在打开图片后,通常会在状态栏或者信息面板显示鼠标当前位置的像素坐标。你可以放大图片,精确地找到每个关键点的X、Y值。对于多边形,你可能需要依次点击每个顶点并记录下它们的坐标。
  2. 浏览器开发者工具:对于已经加载到网页上的图片,你可以利用浏览器的开发者工具(F12)来辅助。
    • 测量工具:有些浏览器(比如Chrome)的开发者工具里有测量工具,可以帮你测量元素的大小和位置。
    • 叠加
      div
      :一个比较巧妙的办法是,在图片上方创建一个透明的
      div
      ,给它设置
      position: absolute;
      ,然后调整它的
      left
      ,
      top
      ,
      width
      ,
      height
      来覆盖你想要的热点区域。通过观察
      div
      的这些CSS属性值,就能大致推算出
      rect
      circle
      coords
      。当然,这需要一些CSS基础。
  3. 在线图像映射生成器:市面上有一些在线工具,你上传图片后,它们会提供一个界面让你直接在图片上绘制形状,然后自动生成对应的
    map
    area
    代码。这对于不熟悉图片编辑软件或者想快速实现的人来说,是个不错的选择。不过,我个人一般倾向于手动控制,因为这些工具生成的代码可能不总是最干净或最符合我的习惯。

我的经验是,对于简单的矩形和圆形,手动记录坐标很快。但遇到复杂的多边形,我通常会先用图片编辑软件把关键点都找出来,列成一个清单,然后再填入

coords
。这过程确实有点像在玩连点游戏,但为了准确性,值得花这个功夫。

map
area
标签在响应式设计中面临哪些挑战,又有哪些应对策略?

map
area
标签在响应式设计中遇到的挑战,核心问题在于它们的
coords
属性是基于像素的绝对值。这意味着,当你的图片尺寸因为屏幕大小、设备类型等因素发生变化时,这些预设的像素坐标就不会自动按比例调整,导致热点区域与图片内容错位,用户点击时可能点到空白处,或者点到错误的区域。这就像你在一张纸上画了几个圈,然后把纸放大或缩小,圈的位置就对不上了。

具体来说,挑战主要有:

  1. 坐标不匹配:这是最直接的问题。一张图片从1000px宽缩放到500px宽,你之前为1000px图片定义的
    coords="100,100,200,200"
    (一个矩形)现在可能只覆盖了缩放后图片上的一个很小的部分,或者完全偏离了目标区域。
  2. 用户体验下降:用户点击无效,会感到沮丧,甚至放弃使用你的页面。
  3. 开发维护复杂:为了让热点保持正确,你可能需要为不同尺寸的图片准备不同的
    map
    ,或者编写复杂的JavaScript来动态计算和更新
    coords

那么,有哪些应对策略呢?

  1. JavaScript动态调整(最常见但有代价)

    • 这是解决

      map
      /
      area
      响应式问题最直接的方法。思路是:当页面加载完成或浏览器窗口大小改变时,通过JavaScript获取当前图片的实际宽度和高度,然后根据图片原始尺寸与当前尺寸的比例,重新计算所有
      area
      标签的
      coords
      值。

    • 比如,如果图片原始宽度是

      originalWidth
      ,当前显示宽度是
      currentWidth
      ,那么缩放比例就是
      scale = currentWidth / originalWidth
      。所有
      coords
      中的X和Y值都乘以
      scale

    • 这个方法需要编写JavaScript代码来遍历

      area
      标签,解析
      coords
      字符串,进行数学计算,然后更新
      coords
      属性。这会增加页面的复杂性和脚本执行的开销。

    • 一个简化的JavaScript思路可能如下:

      function resizeImageMap() {
        const img = document.querySelector('img[usemap="#myimagemap"]');
        if (!img) return;
      
        const originalWidth = img.naturalWidth; // 图片的原始宽度
        const currentWidth = img.clientWidth;   // 图片当前在页面上的宽度
        const scale = currentWidth / originalWidth;
      
        const areas = document.querySelectorAll('map[name="myimagemap"] area');
        areas.forEach(area => {
          const originalCoords = area.dataset.originalCoords || area.coords; // 存储原始坐标
          area.dataset.originalCoords = originalCoords; // 第一次运行时保存原始坐标
      
          const newCoords = originalCoords.split(',').map(coord => Math.round(parseFloat(coord) * scale));
          area.coords = newCoords.join(',');
        });
      }
      
      window.addEventListener('resize', resizeImageMap);
      window.addEventListener('load', resizeImageMap);

      这段代码只是一个示意,实际应用中可能需要更健壮的错误处理和对不同

      shape
      coords
      解析逻辑。

  2. 使用专门的JavaScript库

    • 由于手动编写上述JS代码比较繁琐,社区中出现了一些专门用于解决
      image map
      响应式问题的JavaScript库(比如
      image-map-resizer
      等)。这些库通常封装了复杂的计算逻辑,你只需要引入它们,并做一些简单的配置,它们就能自动帮你处理热点的缩放问题。
    • 这是在必须使用
      map
      /
      area
      且需要响应式支持时,最省心且推荐的方案。
  3. 替代方案的考虑(更推荐的现代做法)

    • SVG:对于矢量图或需要复杂形状的交互,SVG是更好的选择。SVG图形天生就是响应式的,你可以直接在SVG元素上添加事件监听器(
      onclick
      等),实现更强大的交互。
    • CSS + JavaScript 覆盖层:在图片上方使用CSS定位(
      position: absolute
      )创建透明的
      div
      或其他HTML元素,将它们精确覆盖在图片的目标区域上。这些
      div
      可以根据图片父容器的尺寸变化而相对定位或缩放。通过JavaScript为这些
      div
      添加点击事件。这种方法更灵活,更容易实现复杂的交互和视觉效果,而且在响应式方面也更易于控制。

我的个人观点是,如果不是非常简单的场景,或者有历史包袱,我通常会倾向于避免在现代响应式设计中直接使用

map
area
。它们在诞生之初确实解决了大问题,但面对如今多变的屏幕尺寸和复杂的交互需求,其局限性就显得比较明显了。如果非用不可,一个成熟的JS库会是你的好伙伴。

map和area标签怎么用map和area标签怎么用描述图片内容map和area标签怎么用

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

538

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

373

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

727

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

471

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

390

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

989

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

653

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

540

2023.09.20

ip地址修改教程大全
ip地址修改教程大全

本专题整合了ip地址修改教程大全,阅读下面的文章自行寻找合适的解决教程。

81

2025.12.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
AngularJS教程
AngularJS教程

共24课时 | 2.1万人学习

前端小白零基础入门HTML5+CSS3
前端小白零基础入门HTML5+CSS3

共361课时 | 32.4万人学习

Web开发基础_HTML+CSS
Web开发基础_HTML+CSS

共17课时 | 3.8万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号