У меня есть дизайн сайта с элементами 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 и обеспечение того, чтобы мои элементы <svg>
были
pointer-events: none;
кажется, что все работает. Я не уверен на 100%, что он всегда работает, но в моих тестовых случаях я не могу найти ни одного из моих модных флажков или переключателей, которые не работают.
{cursor: pointer;}
для этого SVG? (без{pointer-events: none;}
, конечно)<label>
в целом), и курсор правильно отображает как указатель. Обратите внимание, что когда<label>
также включает текст, Safari правильно создает события «щелчка».