Safari: SVG в элементах <label> не работает с событиями «click»

1

У меня есть дизайн сайта с элементами SVG для "причудливых" переключателей и флажков. Основная идея состоит в том, что фактический элемент HTML эффективно скрыт (перемещен с видимой страницы, потому что IE не любит, чтобы элементы ввода были фактически скрыты), а затем красивые видимые значки SVG используются для видимых интерактивных элементов.

Проблема в том, что Safari на iOS, похоже, не распространяет события "щелчка" на элементах SVG до оберток <label>. Итак, у меня есть:

<input type=checkbox class=not-visible id=foo>

затем

<label for=foo><svg>...</svg></label>

На всех настольных браузерах и Android это прекрасно работает. Нажатие значка SVG передает событие "клик" на <label>, что приводит к "щелчку" на фактическом элементе флажка. В Safari это не работает. Я пробовал устанавливать через CSS свойство pointer-events none, а иногда помогает, но не всегда. Я не смог понять, что такое шаблон.

Идеи?

редактирование - мне приходит в голову, что я оставил без внимания два факта:

  • Когда текст в <label> вместе с SVG, события "щелчка" правильно синтезируются на мобильном Safari для кратковременного нажатия на текст, но кратки на самом SVG этого не делают;
  • Я использую библиотеку Fastclick, которая, как правило, не вызывала у меня проблем, но нет причин не подозревать, что она может иметь какое-то отношение к поведению.
  • 0
    Это может показаться глупой идеей, но не мешает попробовать: что произойдет, если вы установите CSS {cursor: pointer;} для этого SVG? (без {pointer-events: none;} , конечно)
  • 0
    @GerardoFurtado неплохая идея, но я уже делаю это (для <label> в целом), и курсор правильно отображает как указатель. Обратите внимание, что когда <label> также включает текст, Safari правильно создает события «щелчка».
Показать ещё 1 комментарий
Теги:
svg
mobile-safari

1 ответ

0

Отключение Fastclick и обеспечение того, чтобы мои элементы <svg> были

pointer-events: none;

кажется, что все работает. Я не уверен на 100%, что он всегда работает, но в моих тестовых случаях я не могу найти ни одного из моих модных флажков или переключателей, которые не работают.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню