Тег area в HTML: что это и какие у него атрибуты

Тег area (от английского area, «область») описывает одну активную область картинки-карты: прямоугольник, круг или многоугольник, который работает как ссылка. Клик по такой области открывает адрес, а остальная часть картинки остаётся обычной. Тег записывают только внутри тега map, а саму картинку подключают атрибутом usemap.

Дальше разобраны атрибуты, формы shape и координаты coords, адрес и описание, перекрытие областей, target и download, оформление, работа из JavaScript и причины, по которым область не срабатывает. Другие теги группы собраны в шпаргалке по тегам.

HTML
<img src="rooms.png" usemap="#rooms" alt="План квартиры">

<map name="rooms">
  <area shape="rect" coords="0,0,100,100" href="kitchen.html"
        alt="Кухня">
  <area shape="circle" coords="150,50,40" href="hall.html"
        alt="Прихожая">
</map>

Тег area в HTML: что это и для чего нужен

Сначала о том, чем area отличается от остальных тегов карты и что у него есть, а чего нет.

Тег area пустой (одиночный): содержимого и закрывающего тега у него нет. Запись </area> браузер пропускает: две области с закрывающими тегами остаются двумя областями, лишних элементов не появляется. Поэтому в разметке пишут только открывающий тег.

У area нет собственной видимой части. Свойство display у него inline, но размер на странице 0 на 0 пикселей: форма области берётся только из shape и coords. Зато ведёт он себя как ссылка: область получает фокус клавишей Tab, открывает адрес по Enter и откликается на мышь.

Работает area только внутри map. Область, перенесённая из карты в тело страницы, на клики не отвечает: клик получает картинка.

ТегЧто делает
imgПоказывает картинку и по атрибуту usemap находит карту
mapХранит карту под названием name и области внутри неё
areaОписывает одну область: форму, координаты, адрес и описание

Атрибуты тега area: shape, coords, href, alt и другие

У area девять собственных атрибутов: форму задают shape и coords, адрес и описание добавляют href и alt, а остальные настраивают переход.

АтрибутЧто делаетПример
shapeФорма области: rect, circle, poly или defaultshape="circle"
coordsКоординаты области в пикселях картинкиcoords="0,0,100,100"
hrefАдрес, который открывается по клику. Без него область не ссылкаhref="kitchen.html"
altТекстовое описание области. Нужно, если есть hrefalt="Кухня"
targetГде открыть адресtarget="_blank"
downloadСкачать файл вместо переходаdownload="plan.pdf"
relСвязь с адресом, например nofollowrel="nofollow"
pingАдреса для уведомления о кликеping="/count"
referrerpolicyЧто передать в заголовке Refererreferrerpolicy="no-referrer"

Общие атрибуты (id, class, title, tabindex) тоже допустимы. Атрибута usemap у area нет: его записывают у картинки. Устаревший nohref не нужен: область без href и так не считается ссылкой.

Атрибут shape тега area: rect, circle, poly и default

Атрибут shape выбирает форму области, а числа для неё записывают в coords.

Значение shapeФормаЧисла в coordsПример
rectПрямоугольникЧетыре: левый верхний и правый нижний углыcoords="20,15,100,85"
circleКругТри: центр и радиусcoords="90,50,40"
polyМногоугольникНе меньше шести: пары чисел для вершинcoords="90,10,150,90,30,90"
defaultВся картинкаНе нужны<area shape="default" href="all.html">

Если shape не записан, область считается прямоугольником. Так же читается неизвестное значение, например shape="square". Регистр не важен: RECT и Default работают. Старые записи rectangle, circ и polygon браузер тоже понимает, но в разметке пишут rect, circle и poly.

Пример: атрибут shape тега area: rect, circle, poly и default

Результат

Кнопки меняют область. Закрашено то место, где браузер принимает клик за клик по area. Кликните по картинке: строки показывают точку клика и результат. В последнем варианте default записан первым, но коралловым закрашен только вне синего rect.

В браузере значение default работает как запасная область: оно срабатывает только там, где нет других областей, даже если записано первым. Так весь остаток картинки можно отправить на общую страницу. Надёжнее всё же записывать default последним, чтобы результат не зависел от браузера.

Атрибут coords тега area: координаты для каждой формы

Координаты в coords записывают в пикселях картинки: начало слева вверху, x растёт вправо, y вниз.

Для rect числа идут в порядке x1,y1,x2,y2, для circle порядок x,y,r, для poly пары x1,y1,x2,y2,x3,y3 и дальше. Многоугольник замыкается сам: последнюю вершину с первой соединять не нужно. Разделитель по стандарту один: запятая. Пробелы и точки с запятой браузер тоже понимает, но писать надо запятые.

Числа не масштабируются вместе с картинкой: если картинку растянули, область остаётся прежней. Как пересчитать координаты, показано в разделе про адаптивную картинку.

Координаты точки удобно читать прямо по клику. У клика по области offsetX отсчитывается не от картинки, поэтому берут clientX и положение картинки на странице.

JavaScript
const img = document.querySelector('img[usemap]');

document.addEventListener('click', (e) => {
  const r = img.getBoundingClientRect();
  console.log(Math.round(e.clientX - r.left),
              Math.round(e.clientY - r.top));
});

Пример: атрибут coords тега area: неверные координаты

Результат

Кнопки задают разные записи. Закрашена кликабельная область, а строка «Кликабельная площадь картинки» показывает, какую долю картинки она занимает. Ноль процентов значит, что области нет.

Запись в coordsЧто делает браузер
Четыре числа для rect в обратном порядкеОбласть работает, углы поменялись местами сами
Три числа для rect или нет coords совсемОбласти нет
Нулевой или отрицательный радиус у circleОбласти нет
Две вершины у poly, то есть четыре числаОбласти нет, нужно не меньше шести чисел
Проценты, например 0%,0%,50%,100%Знак процента отбрасывается, числа читаются как пиксели
Область шире картинкиОбласть обрезается по краю картинки

Атрибуты href и alt тега area: адрес и описание области

Адрес записывают в href, а текстовое описание области в alt.

Без href область не ссылка: клик доходит до скриптов, но адрес не открывается, клавиша Tab область пропускает, а вызов focus() фокус не даёт.

ЗаписьМышьКлавиатура
href="kitchen.html"Клик открывает адресTab переводит фокус на область, Enter открывает адрес
Без hrefКлик доходит до скрипта, адрес не открываетсяTab область пропускает

Атрибут alt содержит короткое описание области: «Кухня», а не «Область 1». По стандарту он обязателен у каждой области с href и не нужен у области без href. На клик alt не влияет: область без него клик принимает, но валидатор такую запись отметит.

Перекрытие областей тега area: какая область сработает

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

Порядок записи важен для вложенных областей: маленькую область внутри большой записывают раньше. Если большую записать первой, она закроет маленькую целиком, и маленькая никогда не получит клик.

HTML
<map name="plan">
  <area shape="circle" coords="100,50,30" href="hall.html"
        alt="Холл">
  <area shape="rect" coords="0,0,200,100" href="flat.html"
        alt="Квартира">
</map>

Пример: перекрытие областей тега area

Результат

Кнопки меняют порядок областей. Цвет в легенде совпадает с цветом области на картинке. Кликните в общей части прямоугольника и круга: строка «Последний клик» показывает область, которой достался клик. В последнем варианте default записан первым, но клик в общей части получает rect.

Видно два правила. Для обычных форм побеждает область, записанная в разметке раньше. А default в браузере работает как запасной: он получает клик только там, где нет других областей, где бы он ни был записан. Поэтому его записывают последним.

Атрибуты target и download тега area: куда вести и что скачать

Атрибуты target и download у area работают так же, как у обычной ссылки.

ЗаписьЧто происходит
target="_self"Адрес открывается в этой же вкладке, как и без target
target="_blank"Адрес открывается в новой вкладке, а window.opener в ней пуст
target="_blank" rel="opener"Новая вкладка, window.opener указывает на исходную страницу
target="nm"Вкладка с названием nm, window.opener указывает на исходную страницу
downloadФайл скачивается под названием из адреса
download="my.txt"Файл скачивается под названием my.txt
download для адреса другого сайтаАтрибут не действует: браузер просто переходит по адресу

Поэтому для открытия в новой вкладке хватает target="_blank": новая вкладка не получает доступа к исходной. Доступ даёт только явный rel="opener" или своё название вместо _blank.

Остальные атрибуты ссылки тоже есть: rel записывает связь с адресом (для внешней ссылки подходит nofollow), ping перечисляет адреса для уведомления о клике, а referrerpolicy управляет заголовком Referer.

Тег area и CSS: оформление, фокус и клавиатура

Оформить область стилями нельзя, но её можно подсветить отдельным элементом, а рамку фокуса браузер рисует сам.

Стили для area форму не окрашивают: контур, фон и рамка относятся к самому тегу, а не к форме области. Форма на картинке после добавления outline, background и border остаётся прежней, а рамка и фон рисуют маленький пустой прямоугольник рядом с картой.

С фокусом иначе: область получает его с клавиатуры без всяких стилей, а вид рамки фокуса зависит от браузера. Порядок обхода совпадает с порядком записи, а область без href пропускается.

Для подсветки поверх картинки размещают обычный элемент или svg с теми же координатами и показывают его по событиям области, о которых говорится ниже. Элементу задают pointer-events: none, чтобы он не перехватывал клики.

CSS
.plan { position: relative; display: inline-block; }

.mark {
  position: absolute; left: 0; top: 0;
  width: 100px; height: 100px;
  background: rgb(255 107 107 / 0.4);
  pointer-events: none;
}

Тег area в JavaScript: свойства и события

Из JavaScript область читают как обычную ссылку: свойства повторяют атрибуты, а события приходят на сам area.

Свойства shape, coords, alt, target, download, rel, ping и referrerPolicy повторяют атрибуты. Свойство shape отдаёт записанную строку как есть: для RECT возвращается RECT, для weird возвращается weird. Свойство href возвращает полный адрес, а для его частей есть protocol, hostname, pathname, search и hash. Метод click() вызывает переход, как настоящий клик. Свойств text, type и hreflang у area нет.

На area приходят mouseenter, mouseleave, mouseover, mouseout, mousedown, mouseup, click, focus и blur. У события click свойство target указывает на area, а не на картинку, и обработчик на img такой клик не получает.

JavaScript
const area = document.querySelector('area[alt="Кухня"]');
const mark = document.querySelector('.mark');

console.log(area.shape, area.coords);
console.log(area.href, area.hostname);

area.addEventListener('mouseenter', () => mark.hidden = false);
area.addEventListener('mouseleave', () => mark.hidden = true);

Пример: свойства и события тега area в JavaScript

Результат

Кнопки переключают область, чьи свойства показаны в блоке. Наведите курсор на область, кликните по ней и пройдите по областям клавишей Tab: журнал показывает последние события. Размер самого тега на странице равен 0 на 0.

Почему тег area не работает

Если область не срабатывает, причину ищут в самой области, в её координатах и в связи с картинкой.

ПричинаЧто видноЧто делать
area записан вне mapКлик получает картинкаЗаписать область внутри map
Картинка не связана с картой по usemap и nameОбласти не срабатываютСверить записи по странице про тег map
У области нет hrefАдрес не открывается, Tab область пропускаетЗаписать href
Мало чисел в coordsОбласти нетrect: четыре числа, circle: три, poly: шесть и больше
Радиус у circle нулевой или отрицательныйОбласти нетЗаписать положительный радиус
Координаты рассчитаны на другой размер картинкиОбласть смещена относительно рисункаПересчитать координаты, см. адаптивную картинку
Большая область записана раньше малойМалая область не получает кликЗаписать малую область раньше
Область выходит за край картинкиРаботает только часть внутри картинкиСократить координаты
Поверх картинки находится другой элементКлик получает верхний элементЗадать наложенному элементу pointer-events: none

Частые ошибки с тегом area

Основные ошибки связаны с лишними записями, неверными числами и ожиданием, что область можно оформить стилями.

ОшибкаЧто происходитКак исправить
<area shape="rect" coords="0,0,100,100">Нет href: адрес не открываетсяЗаписать href и alt
<area ...></area>Закрывающий тег браузер пропускаетУбрать закрывающий тег
shape="rect" coords="0,0,100"Области нетЗаписать четыре числа
shape="circle" coords="50,50,-40"Области нетЗаписать положительный радиус
coords="0%,0%,50%,100%"Знак процента отбрасывается, числа читаются как пикселиЗаписать координаты в пикселях
shape="square"Значение читается как rectЗаписать rect, circle, poly или default
Большая область записана раньше малойМалая область никогда не срабатываетЗаписать малую область раньше
download для адреса другого сайтаАтрибут игнорируетсяПрименять только к своим файлам
Обработчик клика на img для областейКлик по области до картинки не доходитСлушать area, map или document
area { outline: 2px solid red }Форма области не окрашиваетсяРазместить поверх картинки отдельный элемент
Категория
Поделиться в социальных сетях

Отправить комментарий

0 Комментарии

Отправить комментарий (0)

#buttons=(Хорошо) #days=(20)

Мы используем файлы cookie для улучшения работы сайта. Подробнее
Хорошо
×