ссылки на картинке

263
22 августа 2017, 12:54

Добрый день. Подскажите каким образом реализовать задуманное.

Пришла в голову идея сделать схему-каталог (по типу схемы метро). То есть картинка - карта с 20(например пунктами)точками. Выглядит как схема метро (в идеале вообще background). Каждая точка(станция) является ссылкой. проблема даже не в том как это сделать, а как прикрепить к конкретной точке на картинке и при этом что бы при масштабировании оно не сползло. Отдаленно как раз должно напоминать http://mosmetro.ru/metro-map/ это. Подскажите открытые примеры если есть или хоть направление. Спасибо.

Answer 1

Маркеры надо позиционировать на карте абсолютно в процентах. При этом очень важно держать соотношение сторон карты, см. как сделано в сниппете. Само соотношение сторон задается padding-bottom.

.map { 
  position: relative; 
  display: block; 
  width: 100%; 
  height: 0; 
  padding-bottom: 50%; 
  overflow: hidden; 
} 
 
.map img { 
  position: absolute; 
  display: block; 
  width: 100%; 
  height: auto; 
  top: -80%; // выставляем видимый участок карты 
  left: 0; 
} 
 
.marker { 
  position: absolute; 
  display: block; 
  color: red; 
  width: 10px; 
  height: 10px; 
} 
 
.paris { 
  left: 27%; 
  top: 63%; 
} 
 
.moscow { 
  left: 80%; 
  top: 18%; 
}
<div class="map"> 
  <img src="http://mapeurope.ru/wp-content/uploads/konturnaya-karta-evropy-10klass.jpg"> 
  <div class="marker paris">x</div> 
  <div class="marker moscow">x</div> 
</div>

Свойство top: -80% выставляет видимый участок для данной конкретной карты и не является обязательным.

Answer 2

Есть 2 варианта решения вашей проблемы:

1 Вариант - вы используете jpg\png, тогда вам необходимо воспользоваться возможностью задавать area для картинки пример можете посмотреть здесь и здесь и уже при нажатии на area вы можете делать все что душе угодно

2 Вариант - использовать SVG для схемы метро. Тогда вы можете задать каждому элементу на картинке id (или, предпочтительно, некий атрибут) и уже при нажатии\наведении\любом_другом_событии делать всё что вашей душе угодно с помощью js+css - для SVG (если она вставлена в сам html, а не картинкой) будут работать все селекторы как в css, так и в js.

Лично для меня, 2-й вариант наиболее предпочтителен, так как в первом варианте еще может всплыть проблема с адаптивностью, да и впринципе вырисовывать area на картинках - довольно трудозатратно, в SVG проще на этапе её рисования сразу необходимые аттрибуты прописать и всё. Да и к тому же, на сайте, приведенном вами в качестве примера, используется как раз-таки 2-й вариант

READ ALSO
Как вместить текст в одну строку

Как вместить текст в одну строку

Необходимо вместить название в одну строкуВ разметке есть блок див фиксированного размера

502
Резиновый шрифт

Резиновый шрифт

Как с помощью css сделать резиновый шрифт? тоесть чтоб он расстягивался не пропорционально

380
Count() из трех таблиц с разными условиями, одним запросом

Count() из трех таблиц с разными условиями, одним запросом

Имеем три таблицы pictures, movies, storiesКаждая таблица имеет одинаковые столбцы status, created_at

262
Тип веб сервиса

Тип веб сервиса

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

285