Я не знаю, насколько актуален этот вопрос, но, поскольку я просто искал его, я нашел этот вопрос, и могут быть люди, которые интересуются этим другим, а не я.
Немного повозившись, я действительно заставил его работать, и я хочу просто представить свое решение.
<main>
[your content here]
</main>
main {
background: red;
position: relative;
width: 1000px;
margin: 0 auto;
}
main::before {
background: blue;
content: ' ';
display: block;
position: absolute;
top: 0;
bottom: 0;
left: -50vw;
right: -50vw;
z-index: -1;
}
То же самое должно работать и с элементом :: after, если это необходимо.
По сути, я создаю псевдоэлемент той же высоты, что и родительский элемент (но вы можете увеличить его при отрицательных значениях) и использовать слишком большую ширину, основанную на ширине области просмотра. Он не основан на процентах, поскольку процент будет относиться к элементу <main>
. Вы можете использовать процент, если вам нужно поддерживать старые браузеры, но вам нужно будет определить число для себя. Затем он помещает один слой позади родительского элемента, чтобы он оставался видимым.
Есть один небольшой недостаток, который, на мой взгляд, на самом деле не имеет значения. При таком подходе тело (или любой элемент, являющийся родителем <main>
/ ваш элемент) получает горизонтальную полосу прокрутки, поскольку псевдоэлемент на самом деле больше, чем область просмотра. Вы можете легко подавить это с помощью overflow-x: hidden
на теле, и это не должно создавать никаких проблем для центрированного макета в любом случае. Я бы предположил, что в центрированном макете никогда не должно быть точки, где вам действительно нужно горизонтальное переполнение.
Я бы предположил, что это также работает с плавающими социальными кнопками, если вы будете их использовать (хотя я этого не пробовал, так как я не фанат этого), потому что они должны относиться к области просмотра, а не к фактический размер.
Однако я не знаю, как это решение работает с точки зрения производительности, поскольку я не знаю, как работают движки рендеринга в наши дни. Было время, когда все, что было за кадром, также отображалось (отсюда и причина того, что печально известная техника сокрытия элементов нашла свой путь в мусорную корзину очень быстро), но в наши дни это не должно быть проблемой.