Фиксированный элемент исчезает в Chrome
при прокрутке на веб-сайте, который я построил, используя свойство CSS position: fixed работает так, как ожидается, чтобы сохранить панель навигации в самой верхней части страницы.
В Chrome, однако, если вы используете ссылки в панели навигации это иногда исчезает. Обычно элемент, на который вы нажали, все еще виден, но не всегда. Иногда все это исчезает. Перемещение мыши вокруг возвращает часть элемента, а прокрутка с помощью колеса прокрутки или клавиш со стрелками просто один клик возвращает элемент обратно. Вы можете видеть, как это происходит (с перерывами) на http://nikeplusphp.org - Возможно, вам придется нажать на несколько навигационных ссылок несколько раз, чтобы увидеть, как это происходит.
Я также пробовал играть с Z-индексом и типом видимости/отображения, но не повезло.
я столкнулся с этим вопросом, но исправление не сработало для меня вообще. Кажется, это проблема webkit, так как IE и Firefox работают просто отлично.
это известно проблема или есть исправление, чтобы фиксированные элементы были видны?
обновление:
только эффекты элементы top: 0;, Я пробовал bottom: 0; и это работает, как ожидалось.
11 ответов:
добавить
-webkit-transform: translateZ(0)доposition: fixedэлемент. Это заставляет Chrome использовать аппаратное ускорение, чтобы непрерывно рисовать фиксированный элемент и избегать этого странного поведения.Я создал Chrome ошибка для этого https://bugs.chromium.org/p/chromium/issues/detail?id=288747. пожалуйста, звезда его, так что это может получить некоторое внимание.
у меня была та же проблема с Chrome, похоже, это ошибка, которая возникает, когда слишком много происходит внутри страницы, я смог ее исправить, добавив следующий код преобразования в элемент фиксированной позиции, (
transform: translateZ(0);-webkit-transform: translateZ(0);), что заставляет браузер использовать аппаратное ускорение для доступа к графическому процессору устройства (GPU), чтобы заставить пиксели летать. Веб-приложения, с другой стороны, работают в контексте браузера, что позволяет программному обеспечению выполнять большую часть (если не все) рендеринга, в результате меньше лошадиных сил для переходов. Но интернет догоняет, и большинство поставщиков браузеров теперь обеспечивают графическое аппаратное ускорение с помощью определенных правил CSS.Using-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); }
приведенные выше варианты не работали для меня, пока я не смешал два из представленных решений.
добавив следующее к фиксированному элементу, это сработало. В основном z-индекс также был необходим для меня:
-webkit-transform: translateZ(0); z-index: 1000;
это проблема 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пометить его находки.
Я столкнулся с такой же проблемой в другом случае. Это было из-за использования одного и того же идентификатора в нескольких местах. Например, я использовал #full 2 divs.
кажется, что mozilla и т. е. поддерживает использование одного и того же идентификатора в нескольких случаях. Но хром этого не делает. Он реагировал с фиксированным элементом неодобрения в моем случае.
просто удаление идентификатора решило проблему.
Если он не работает после добавления
- webkit-transform: translateZ (0)
чем еще добавить
пользователь-масштабируемое=нет
на видовом экране мета
источник здесь
Это сработало для меня
ни один из них не работал для меня, кроме вызова модального через javascript
<a href="#\" onclick="show_modal();">Click me to open MyModal</a> <script> function show_modal() { MyModal.style.display = 'block'; } </script>кроме этого, ни одно из решений выше не решило мою проблему.
Если ни один из ответов выше не работал для вас, убедитесь, что вы не манекен, как я и есть переполнение: скрытый; установить на фиксированный элемент :(
Что делать, если ни один из выше работал вообще? простой случай липкого заголовка + мобильного бокового меню, нажимающего контент.
Я пытаюсь найти способ избежать перевода фиксированного элемента (липкого заголовка), но в этом случае ничто не является хорошей альтернативой.
Так как нет обходного пути по области до сих пор существует альтернатива JS, которую я выбрал для пересчета абсолютного положения фиксированного элемента. Смотрите здесь: https://stackoverflow.com/a/21487975/2012407
это сработало для меня . Добавить
Overflowсвойство для вашего самого верхнего контейнера, который может быть Div или формой и т. д.div, form { overflow:visible; }
Comments