Фиксированный элемент исчезает в Chrome

При прокрутке на веб-сайте, который я создал, использование свойства CSS position: fixed работает так, как ожидается, чтобы панель навигации была на самой верхней части страницы.

В Chrome, однако, если вы используете ссылки в навигационной панели, это иногда исчезает. Обычно элемент, на который вы нажали, по-прежнему отображается, но не всегда. Иногда все исчезает. Перемещение мыши вокруг возвращает часть элемента, а прокрутка с помощью колесика прокрутки или клавиш со стрелками только одним щелчком возвращает элемент назад. Вы можете видеть, как это происходит (с интервалом) на http://nikeplusphp.org - вам может потребоваться несколько раз щелкнуть по ссылкам на ссылки см. это произойдет.

Я также пробовал играть с z-index и видом/отображением, но не повезло.

Я столкнулся с этим вопросом, но исправление не работало для меня вообще. Кажется, это проблема webkit, поскольку IE и Firefox работают нормально.

Является ли это известной проблемой или существует ли исправление, позволяющее фиксировать фиксированные элементы?

Update:

Только элементы эффектов, имеющие top: 0;, я пробовал bottom: 0; и работает как ожидалось.

Ответы

Ответ 1

Это проблема webkit, которая еще предстоит решить, странно делая переход с помощью JavaScript, а не используя значение URL-адреса #, не вызывает проблемы. Чтобы решить эту проблему, я предоставил версию JavaScript, которая принимает значение привязки и находит абсолютное положение элемента с этим идентификатором и переходит к такому:

var elements = document.getElementsByTagName('a');
for(var i = 1; i < elements.length; i++) {
    elements[i].onclick = function() {
        var hash = this.hash.substr(1),
            elementTop = document.getElementById(hash).offsetTop;
        window.scrollTo(0, elementTop + 125);
        window.location.hash = '';
        return false;
    }
}

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

Ответ 2

Добавьте -webkit-transform: translateZ(0) в элемент position: fixed. Это заставляет Chrome использовать аппаратное ускорение, чтобы непрерывно рисовать фиксированный элемент и избегать этого причудливого поведения.

Я создал ошибку Chrome для этого https://bugs.chromium.org/p/chromium/issues/detail?id=288747. Пожалуйста, запустите его, чтобы это привлекло некоторое внимание.

Ответ 3

Это исправляет это для меня:

html, body {height:100%;overflow:auto}

Ответ 4

У меня была такая же проблема с Chrome, она кажется ошибкой, которая возникает, когда внутри страницы слишком много происходит, я смог ее исправить, добавив следующий код преобразования в элемент фиксированной позиции ( transform: translateZ(0);-webkit-transform: translateZ(0);), что заставляет браузер использовать аппаратное ускорение для доступа к графическому процессору устройств (GPU), чтобы заставить пикселы летать. С другой стороны, веб-приложения запускаются в контексте браузера, что позволяет программному обеспечению выполнять большинство (если не все) рендеринга, что приводит к меньшей мощности для переходов. Но Интернет догоняет, и большинство поставщиков браузеров теперь обеспечивают графическое аппаратное ускорение с помощью определенных правил CSS.

Использование -webkit-transform: translate3d (0,0,0); будет вызывать GPU в действие для переходов CSS, делая их более плавными (более высокий FPS).

Примечание: translate3d (0,0,0) ничего не делает с точки зрения того, что вы видите. он перемещает объект на 0px по оси x, y и z. Это всего лишь способ принудительного аппаратного ускорения.

#element {
    position: fixed;
    background: white;
    border-bottom: 2px solid #eaeaea;
    width: 100%;
    left: 0;
    top: 0;
    z-index: 9994;
    height: 80px;
    /* MAGIC HAPPENS HERE */
    transform: translateZ(0);
    -webkit-transform: translateZ(0);
}

Ответ 5

Параметры выше не работали для меня, пока я не смешал два из предоставленных решений.

Добавив следующее к фиксированному элементу, он сработал. Мне также нужен z-индекс:

-webkit-transform: translateZ(0);
z-index: 1000;

Ответ 6

Полное решение/Все браузеры

HTML CODE

<body>
    <div class="wrapper">
        <div class="static">
            <div class="header">            
            </div>
        </div>
        <div class="content">
        </div>
    </div>
</body>

CSS STYLE

body
{

    background: #000000;        
    margin: 0px auto auto auto;
    padding: 0px;
    max-width: 830px;
    height:100%;
    overflow:auto;
}

.wrapper
{
    margin: 0px auto;
    height: 89%;
    width: 830px;
}

.static
{
    width: 815px;
    z-index: 2;
    height: 145px;
    position: fixed;
    padding-left: 0px;
    margin: auto;
}


.content
{
    width: 820px; 
    float: left;
    position: relative;
    top: 125px;
    margin: auto;  
    padding-top: 25px;
}



.header
{
    height: 150px; 
    width: 820px;
    margin-left: auto;
    margin-right: auto;
    margin-top: -2px;
    padding: 5px;
    overflow:auto;
}

Ответ 7

Если ни один из приведенных выше ответов не сработал для вас, убедитесь, что вы не являетесь манекеном, как я, и установите переполнение: hidden; на фиксированный элемент: (

Ответ 8

Что, если никто из вышеперечисленных не работал вообще? простой случай с липким заголовком + мобильное боковое меню, толкающее содержимое.

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

Так как нет обходного пути для области действия до сих пор существует альтернатива JS, которую я выбрал для пересчета абсолютной позиции фиксированного элемента. См. Здесь: fooobar.com/questions/12066/...

Ответ 9

Я столкнулся с той же проблемой в другом случае. Это было связано с использованием одного и того же идентификатора в нескольких местах. Например, я использовал #full 2 ​​divs.

Кажется, что мозилла и И.Е. поддерживает использование одного и того же идентификатора в нескольких случаях. Но хром не делает. В моем случае он реагировал с исчезновением фиксированного элемента.

Просто удаление id решило проблему.

Ответ 10

Если он не работает после добавления

-webkit-transform: translateZ (0)

чем добавить

нет

пользователя масштабируемым = нет

в окне просмотра мета

источник здесь

это сработало для меня