Подтвердить что ты не робот

Позиция мобильного сафари: фиксированный сбой z-index при прокрутке

Я знаю, что iPhone не поддерживает позицию: исправлено, но теперь это происходит, и я вижу странный сбой при прокрутке элемента фиксированной позиции за другими элементами с более высоким индексом z. Элемент фиксированных позиций с нижним z-индексом на мгновение появляется спереди, что выглядит очень плохо. Есть ли способ предотвратить это?

Я попытался добавить -webkit-transform: translate3d(0, 0, 0); к фиксированному элементу и, похоже, не поможет этой проблеме.

Вот и jsfiddle.

Обновление Я добавил transform:translateZ(x) в дополнение к z-индексу и не устранил проблему.

Update2 Я добавил префикс -webkit, и это исправляет проблему z-index на мобильном Safari, но также приводит к тому, что позиция: исправлена ​​некорректная работа на настольном Chrome.

4b9b3361

Ответ 1

z-index не является надежным с позицией: исправлено, как показано в этой скрипте: http://jsfiddle.net/mZMkE/2/ вместо этого использовать translateZ.

transform:translateZ(1px);

на элементах вашей страницы.

EDIT: В вашем коде, Добавьте этот css:

.bla, .projects, .contact  {
      -webkit-transform:translateZ(1px);
      -moz-transform:translateZ(1px);
      -o-transform:translateZ(1px);
      transform:translateZ(1px);
}

а затем удалите z-index ref из этих элементов и .intro.

Ответ 2

Обновление 1: я добавил transform:translateZ(x) в дополнение к z-index и это не решило проблему.

Обновление 2: я добавил префикс -webkit- и это исправляет проблему z-index в мобильном Safari, но также приводит к некорректной работе position:fixed в настольном Chrome. "

Затем попробуйте обернуть -webkit-transform:translateZ(x) в конкретный мобильный медиа-запрос.
Например:

@media only screen and (min-device-width : ... ) and (max-device-width : ... ) {
    .whatever {
        -webkit-transform: translateZ(x)
    }
}

Так что в этом случае он не будет ничего делать на настольном Chrome

Ответ 3

Я не сторонник этого решения, но это лучшее, что у меня есть на данный момент...

Чтобы воспроизвести эффект z-индекса с фиксированной позицией на iPhone, кажется, что требуется два метода вместе:

  • Как было предложено @tnt выше, используйте transform:translateZ(n), где z-index используется для того, чтобы мобильное сафари правильно обрабатывало порядок стека. У этого, похоже, есть неудачный побочный эффект, вызывающий положение: фиксированный, чтобы прекратить работать...

  • Вместо позиции: исправлено, используйте технику javascript как это, чтобы подделать ее.

Я не тестировал это полностью (потому что я не собираюсь это делать), но, похоже, он работает довольно хорошо. Хотя "фиксированный" элемент немного заикается.

Ответ 4

Я попробовал решение, принятое в качестве ответа в конкретном случае, когда мне нужно было установить другую позицию в стеке разных уровней, но это само по себе не работало как в настольных браузерах (firefox и chrome), так и в Safari iOS

Я вышел с этим взломом, который использует оба translateZ и z-index для каждого div, который работает на этих платформах. Важен порядок перевода Z и z-индекса. Для установки положения каждого слоя

-webkit-transform:translateZ(1px);
-moz-transform:translateZ(1px);
-o-transform:translateZ(1px);
transform:translateZ(1px);
position: relative; 
z-index: 1; 

Я использовал то же значение для z-индекса и транслировал Z только для согласованности, это не обязательно. См. Рабочий пример http://jsbin.com/peyehufo/5