Атрибут shape в HTML: что это и какие значения принимает

Атрибут shape (от английского shape, «форма») задаёт форму кликабельной области на картинке с клиентской картой: прямоугольник, круг, многоугольник или вся картинка. Закрывающий тег для него не нужен: атрибут пишется внутри открывающего тега <area>, а сам area закрывающего тега не имеет.

Значений четыре: rect, circle, poly и default. Главное, что нужно знать сразу: ошибка в этом атрибуте не вызывает никаких сообщений, браузер тихо читает значение как rect. Все результаты ниже я проверил кликами по настоящим областям в браузере, на котором я проверял.

HTML
<map name="m">
  <area shape="circle" coords="100,50,30"
    href="/room-1" alt="Комната 1">
</map>

Что такое атрибут shape в HTML и зачем он нужен

Карта изображения делит картинку на кликабельные части. Каждая часть это <area> внутри <map>. Числа, которые описывают место области, записывает coords, а shape говорит, как эти числа читать: как углы прямоугольника, как центр с радиусом или как вершины. Карту к картинке подключает usemap.

Без shape одни и те же числа означают разное, поэтому эти два атрибута всегда пишут вместе.

Для каких тегов работает shape: area и устаревший a

Всерьёз shape нужен только тегу <area>. Свойство с таким названием есть ещё у ссылки <a>, но это наследие старых версий HTML, и на страницу оно не влияет. У <img>, <map>, <iframe>, <input>, <object>, <link> и SVG-элемента image свойства нет.

Теги, у которых есть shape
ТегЧто можно сказатьПример записи
<area>Основной случай: форма области на картинке<area shape="rect" coords="0,0,50,25" href="/a" alt="A">
<a>Свойство есть, это устаревший вариант<a href="/a" shape="rect" coords="0,0,50,25">

Какие значения принимает shape: rect, circle, poly и default

Каждое значение ждёт своих чисел в coords. Подробно о числах рассказывает статья про coords, а здесь краткая сводка.

Значения shape и числа в coords
ЗначениеЧто в coordsПример записи
rectЧетыре числа: левый верхний и правый нижний углы<area shape="rect" coords="50,20,150,80">
circleТри числа: центр и радиус<area shape="circle" coords="100,50,30">
polyПары чисел: вершины по порядку, не меньше трёх<area shape="poly" coords="100,10,180,90,20,90">
defaultНичего: область занимает всю картинку<area shape="default" href="/a" alt="A">
rectangle, circ, polygonСтарые записи: читаются как rect, circle и poly<area shape="polygon" coords="100,10,180,90,20,90">

Регистр не важен: Circle, CIRCLE и POLYGON работают так же, как записи из таблицы.

Пример: одни и те же числа, разные формы

Числа везде одинаковые: 50, 20, 150, 80. Меняется только форма. Кликните по картинке в центре и в углу.

Результат

Результат показывает ваш браузер через Navigation API. Если он не поддерживается, демонстрация об этом сообщит.

Что будет при пропуске, опечатке и лишних пробелах

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

Как читается shape при разных записях круга с числами 100, 50, 30
ЗаписьЧто получилосьПример записи
circleКруг работаетshape="circle"
Circle, CIRCLEКруг работает: регистр не важенshape="CIRCLE"
circКруг работает: старый псевдонимshape="circ"
circle с пробелом в началеЗначение неверное, прочитано как rect, области нетshape=" circle"
circle с пробелом в концеТо же самоеshape="circle "
cirle (опечатка)Прочитано как rect, трёх чисел мало, области нетshape="cirle"
Пустое значениеПрочитано как rect, области нетshape=""
Атрибута нетПрочитано как rect, области нет<area coords="100,50,30" href="/a">

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

Пример: какие записи shape распознаёт браузер

Выберите запись. Кликните в центр круга, потом в угол картинки. Значение area.shape показано как записано.

Результат

Результат показывает ваш браузер через Navigation API. Если он не поддерживается, демонстрация об этом сообщит.

Значение default: запасная область на всю картинку

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

Как ведёт себя default
СитуацияЧто получилосьПример записи
Одна область defaultКлик в любом месте открывает ссылку<area shape="default" href="/a" alt="A">
default и rect, клик внутри прямоугольникаОткрылась ссылка rect<area shape="rect" coords="50,20,150,80" href="/rect">
default и rect, клик снаружиОткрылась ссылка default<area shape="default" href="/def">
default записан выше rectРезультат тот же: конкретная область побеждает<area shape="default" href="/def">
default с числами в coordsЧисла игнорируются, область на всю картинку<area shape="default" coords="50,20,150,80" href="/a">

Порядок записи имеет значение для пересекающихся областей других форм, как описано в статье про coords, но для default он не важен.

Что требует стандарт и что делает браузер

Требования к записи собраны, например, на вики W3C по тегу area. Браузер прощает многое из того, что стандарт запрещает. Это удобно при чтении чужого кода, но писать надёжнее по стандарту.

Стандарт и результат в браузере
ФормаЧто требует стандартЧто я увидел в браузере
defaultУ такой области не должно быть coordsЧисла игнорируются, область на всю картинку
rectЛевая граница меньше правой, верхняя меньше нижнейПерепутанные углы поменялись местами, область обычная
circleРовно три числа, радиус не отрицательныйЧетвёртое число отброшено; радиус 0 или отрицательный даёт пустую область
polyЧётное количество чисел, не меньше шестиНечётное последнее число отброшено; меньше трёх вершин даёт пустую область

Какую форму выбрать для области

Форма зависит от того, что именно должно нажиматься. Это рекомендации по смыслу, а не результаты замеров.

Какое значение выбирать
Что нужно описатьКакое значениеПример записи
Прямоугольник: кнопка, окно, вывескаrect<area shape="rect" coords="10,10,60,40" href="/a">
Круглый объект: колесо, точка на картеcircle<area shape="circle" coords="100,50,20" href="/a">
Сложный контур: страна, этаж с угламиpoly<area shape="poly" coords="10,10,90,10,50,80" href="/a">
Всё остальное на картинкеdefault<area shape="default" href="/home" alt="На главную">

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

Shape в JavaScript: свойство shape

В скрипте атрибут доступен как свойство shape. Оно возвращает значение так, как оно записано, без исправлений: ни регистр, ни пробелы, ни неверное значение браузер не меняет. Этим оно отличается, например, от свойства decoding, которое приводит регистр к нижнему.

Как работает свойство shape
ДействиеЧто получилосьПример записи
Чтение без атрибутаВернулась пустая строкаarea.shape
Запись допустимого значенияПрочитать можно ту же строкуarea.shape = 'rect'
Запись с другим регистромВернулось как записано: RECTarea.shape = 'RECT'
Запись неверного значенияВернулось как записано: junkarea.shape = 'junk'
Запись с пробеломПробел сохранён в свойствеarea.shape = ' circle'

Значит, по значению свойства нельзя понять, как браузер прочитал форму: junk и rect дадут одинаковую область, а свойство будет разным.

HTML
const area = document.querySelector('area');
area.shape = 'circle';
area.coords = '100,50,30';

console.log(area.shape);   // "circle"

Частые ошибки в атрибуте shape

Большинство ошибок связано с тем, что неверное значение не вызывает сообщений.

ОшибкаЧто происходитКак исправить
shape="cirle"Читается как rect, области нетПроверить написание
shape=" circle"Пробел делает значение невернымПисать без пробелов
Нет атрибута shapeОбласть читается как rectВсегда писать форму явно
shape="circle" с четырьмя числамиБерутся первые триЗаписать центр и радиус
shape="poly" с двумя вершинамиОбласти нетЗаписать не меньше трёх вершин
shape="rect" с тремя числамиОбласти нетЗаписать четыре числа
shape="default" с числамиЧисла игнорируютсяУбрать coords
Путают default со значением по умолчаниюЭто отдельная форма на всю картинку, а значением по умолчанию служит rectИспользовать default только как запасную область
Ждут от area.shape исправленного значенияСвойство возвращает записанное как естьНе опираться на него для проверки
Область без hrefКлика нетДобавить адрес
Значение вне спискаТихо читается как rectПисать только rect, circle, poly, default

Шпаргалка по атрибуту shape

Всё главное из статьи в одной таблице.

Атрибут shape: что и как писать
ЗадачаКак записатьПример записи
ПрямоугольникЗначение rect и четыре числа<area shape="rect" coords="50,20,150,80">
КругЗначение circle и три числа<area shape="circle" coords="100,50,30">
МногоугольникЗначение poly и пары чисел<area shape="poly" coords="100,10,180,90,20,90">
Вся картинкаЗначение default без чисел<area shape="default" href="/a" alt="A">
РегистрНе важенshape="Circle"
ПробелыНедопустимыshape="circle"
Если не распознаноЧитается как rectshape="cirle"
Прочитать из скриптаСвойство shapearea.shape
Категория
Поделиться в социальных сетях

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

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

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

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

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