Как сделать, чтобы скроллбар не занимал место?

Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.

Прекрасный пример это соц сеть x.com, где, как я понял, все элементы центрируются по всей ширине сайта, включая ширину скролла. При изменении заставки профиля https://x.com/settings/profile скролл пропадает и при этом все элементы не сдвигаются вправо на ширину скролла, а остаются на месте. Мне вот именно этот эффект бы реализовать. Предполагаю, что они динамически добавляют padding, но может есть какое-то более простое решение?


Ответы (2 шт):

Автор решения: Vladislav G.

Можно для body задать width: 100vw;, тогда страница будет "под" скроллбаром. При этом, когда появится вертикальный скроллбар, появится также и горизонтальный на величину перекрытия скроллбаром тела страницы (15-20px) - типа чтобы можно было прокрутить и увидеть что там под вертикальным скроллбаром. Чтобы этого избежать, можно для body задать overflow-x: hidden;. Если нужно, чтобы страница не прыгала при появлении скролла, то этого вполне хватает.

*,
*::before,
*::after {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

body {
    width: 100vw;
    height: 2000px;
    background-color: #333;
    border: 1px solid #f00;
    overflow-x: hidden;
}
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" href="style.css">
</head>

<body>
</body>

</html>

→ Ссылка
Автор решения: Qwertiy

Если нужно зарезервировать место на скроллбар, то можно так:

html {
  box-sizing: border-box;
  height: 100%;
  scrollbar-gutter: stable;
  padding: 1em calc(3em - (100vw - 100%)) 1em 3em;
  text-align: justify;
  outline: 1px dotted red;
  outline-offset: -1px;
}

body {
  margin: 0;
  outline: 1px dotted red;
}
<details>
<summary>Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
</summary>
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
</details>

или так:

html {
  box-sizing: border-box;
  height: 100%;
  scrollbar-gutter: stable both-edges;
  padding: 1em calc(3em - (100vw - 100%));
  text-align: justify;
  outline: 1px dotted red;
  outline-offset: -1px;
}

body {
  margin: 0;
  outline: 1px dotted red;
}
<details>
<summary>Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
</summary>
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
Можно ли сделать так, чтобы элементы страницы позиционировались не до скроллбара, а по всей ширине сайта, включая скроллбар? То есть, сделать скроллбар "невидимым" для других элементов.
</details>

→ Ссылка