Привет, друзья,
мне нужна помощь с CSS. Всякий раз, когда я кликаю на любое изображение на моём сайте, заголовок .d-header смещается примерно на 2 пикселя. Я изо всех сил пытался это исправить, но не смог. Не знаю, как поправить CSS для серой области за изображением.
Интересно. Я никогда этого не замечал, но это также наблюдается в большинстве (если не во всех) официальных темах Discourse, пока заголовок зафиксирован и прокрутка исчезает.
Я думаю, это может быть связано с тем, что полоса прокрутки браузера исчезает, когда открыто окно lightbox.
У меня то же самое
Есть ли что-то простое, что мы могли бы сделать, чтобы это исправить, @awesomerobot? Похоже, это влияет только на заголовок, а не на основное содержимое
Я думаю, проблема возникает из-за того, что при исчезновении полосы прокрутки к тегу body применяется style="margin-right: 17px; overflow: hidden; для компенсации ширины полосы прокрутки. Однако .d-header имеет fixed позиционирование, поэтому он не «наследует» margin-right у html.
edit:
Похоже, что margin у html (равный ширине полосы прокрутки) вычисляется через JavaScript в файле jquery.magnific-popup.min.js.
Не уверен, что существует быстрое и чистое решение этой проблемы.
Такое случается и с композитором, если вы хотите найти ещё что-то, что можно покритиковать
Проблема в том, что элементы с fixed позиционированием относительно ширины области просмотра (viewport), а полосы прокрутки меняют эту ширину.
Как отмечает @Canapin, на элементе <HTML> это компенсируется дополнительным отступом (похоже на поведение Magnific Popup)… но поскольку фиксированные элементы не привязаны к <HTML>, для композитора и заголовка потребуется дополнительное исправление.
Нам нужно будет взять ширину полосы прокрутки, а затем при активации всплывающего окна добавить некоторые встроенные стили, например:
.d-header {
left: -15px; /* В этом примере ширина полосы прокрутки 15px */
width: calc(100% + 30px); /* добавляем ширину полосы прокрутки умноженную на 2, чтобы компенсировать сдвиг и ширину */
}
Реализовать это немного сложнее, чем я могу… Я думаю, что ширина полосы прокрутки, вероятно, вычисляется путём сравнения ширины страницы до и после открытия всплывающего окна? Не уверен на 100%.
Тем не менее… эта проблема станет менее актуальной, если мы перейдём на position: sticky после отказа от поддержки IE11 в этом году. Сдвиг больше не будет происходить, но справа от заголовка может остаться зазор там, где раньше была полоса прокрутки.
У меня для вас небольшое исправление, оно не идеальное: всё ещё есть некоторая подвижность у заголовка, категории и иконок в заголовке, но сама панель заголовка останется на месте.
Я не тестировал это thoroughly, и это вовсе не официальное решение, но пока вы можете попробовать. Я пока недостаточно опытен, чтобы сразу придумать лучшее решение.