Ngx-material-timepicker: iPhone CSS игнорирует «позиция: исправлена»

Я создал StackBlitz для воспроизведения: https://stackblitz.com/edit/angular-rdzdxx

Он имеет ngx-material-timepicker со следующим css:

.timepicker-backdrop-overlay[_ngcontent-c23] {
    position: fixed;
    top: 0;
    bottom: 0;
    right: 0;
    left: 0;
    background-color: rgba(0,0,0,.3);
    z-index: 999;
    pointer-events: auto;
}

Только в iPhone CSS заблокирован внутри дочернего компонента. В Android и на рабочем столе он работает как положено. Есть ли известное решение этого? Ngx-material-timepicker: iPhone CSS игнорирует «позиция: исправлена»

ошибка появляется и на рабочем столе Safari

Patricio Vargas 13.06.2019 06:55

Safari кажется непоследовательным в применении z-index. Есть ли содержащий div для вашего оверлея? Попробуйте также установить для него z-индекс, как в первом ответе на этот вопрос. Еще одно интересное обсуждение здесь.

dmcgrandle 19.06.2019 19:13
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
4
2
1 403
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

да @dmcgrandle, похоже, проблемы с z-индексом. Но я нашел один патч с кодом ниже. добавьте 'custom-tabbar' поверх панели вкладок и переопределите CSS, как показано ниже.

.custom-tabbar .mat-tab-body-active {
  overflow: visible !important;
  position: static;
}

Я не проверял в iPhone, но у меня есть проверка в эмуляторе. Надеюсь, это работа для вас.

Спасибо, это на самом деле то, что исправило это для меня. Я использовал его с ::ng-deep .mat-tab-body-active.

MDave 28.09.2019 00:10

После тестирования это какое-то время оказалось недостаточно надежным для использования, по какой-то причине иногда это исправлялось, а иногда нет. Спасибо, в любом случае

MDave 03.10.2019 19:54
Ответ принят как подходящий

Сообщается об ошибке для этой проблемы здесь https://bugs.webkit.org/show_bug.cgi?id=160953

Он говорит,

WebKit incorrectly clips position:fixed element, inside of its "position:relative; overflow: hidden" parent, IF that parent has "z-index" set

Это именно то, что происходит здесь. Элемент с фиксированным позиционированием класса .timepicker-overlay помещается внутри относительно позиционированного элемента .mat-tab-body-active, который имеет z-индекс 1.

Итак, что вы можете сделать сейчас, это переопределить этот стиль и установить z-index для активной вкладки на initial.

.mat-tab-body.mat-tab-body-active {
    position: relative;
    overflow-x: hidden;
    overflow-y: auto;
    z-index: initial; // set z-index to inital
    flex-grow: 1;
}

Но если вы измените z-индекс .mat-tab-body.mat-tab-body-active, то mat-tab-group не будет работать должным образом. Потому что, когда мы изменим z-индекс активной вкладки на начальный, он будет двигаться назад в стеке mat-tab. Это поведение z-index по умолчанию. И вы можете взаимодействовать только с последней вкладкой.

Чтобы предотвратить это, мы можем установить свойство CSS pointer-events на .mat-tab-body следующим образом.

.mat-tab-body{
        pointer-events: none;
}
.mat-tab-body.mat-tab-body-active {
        position: relative;
        overflow-x: hidden;
        overflow-y: auto;
        z-index: initial; 
        flex-grow: 1;
        pointer-events: all;
}

вот рабочий демо.

Я протестировал его на стек браузера, вот скриншот того же. (этот снимок экрана для более старого ответа)

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

MDave 03.10.2019 19:56

Привет @MDave, я обновил ответ. На самом деле есть несколько возможных решений для преодоления этой проблемы с z-индексом, но использование событий указателя является самым простым и понятным. Я уверен, что это сработает для вас, если это не так, я поделюсь другими решениями.

HirenParekh 04.10.2019 13:51

Другие вопросы по теме