Динамическая настройка событий указателя в Safari iOS 15 ненадежна и непредсказуема

#css #safari #ios15 #pointer-events

Вопрос:

В Safari на iOS 15 ссылки, которые находятся в pointer-events: none; примененном контейнере, не становятся доступными, если pointer-events all на более позднем этапе установлено значение динамически. На самом деле, в некоторых случаях они это делают, но это очень непредсказуемо. Например, когда контейнер является ul элементом, а ссылки находятся внутри li элемента, они становятся доступными для использования. Или когда у ссылки есть button брат или сестра. Я знаю, это звучит странно, но это правда. Я сделал демо-версию, так что вы можете попробовать ее сами: https://stackblitz.com/edit/web-platform-mdhjqs?file=index.html

Я что-то упускаю? Является ли эта ошибка уникальной для Safari на iOS 15?

Ответ №1:

Я наткнулся на ту же проблему с Safari iOS 15, этого не происходит ни в мобильном Chrome, ни в настольном Safari.

Решение, которое я нашел для получения такого же поведения, состоит в том, чтобы установить встроенный стиль с помощью JS, как показано ниже:

 if (el.classList.contains("is-clickable")) {
    el.style.pointerEvents = "all";
} else {
    el.style.pointerEvents = "none";
}
 

Я также удалил все спецификации свойств в CSS. Как только свойство установлено в none любом месте CSS, использование встроенных стилей больше не работает, что странно, так как можно было бы ожидать, что встроенные стили всегда будут иметь приоритет над классами.

Для меня это также проблема со структурой ul > li > a , как в моем тестовом примере, так и на примере Сенна.

Я также пытался установить события указателя на auto или initial без успеха.