Hacer que la barra de desplazamiento no ocupe espacio / evitar el cambio de diseño

8 minutos de lectura

Avatar de usuario de Porter Morgan
portero morgan

Estoy haciendo una aplicación con html y necesito tener una barra de desplazamiento. Pero cada vez que agrego uno, cambia todo para hacer el espacio necesario para la barra de desplazamiento. Esto arruina el diseño de la aplicación.

Así que necesito una forma de hacer que la barra de desplazamiento simplemente se superponga en la parte superior de la página, lo que significa que la página todavía está detrás de ella. Ya sé cómo diseñar la barra de desplazamiento para que la parte posterior sea transparente, solo necesito que la barra de desplazamiento no ocupe espacio.

¡Gracias de antemano!

  • ¿Puede proporcionar su código actual, tal vez con esto?. Mi psíquico Los poderes no están funcionando bien hoy. Además, si el scrollbar no ocupa espacio… ¿cómo se desplazaría…? Su mejor apuesta aquí es forzar la barra de desplazamiento para mostrar SIEMPRE. Alternativamente, use relleno en sus elementos para que eso no suceda.

    – Nicolás Hazel

    26 de enero de 2014 a las 18:28


  • Si publica código en JSFiddle, también debe publicarse aquí para que la pregunta sea independiente. Por supuesto, el código debe publicarse aquí de todos modos, pero publicar solo en JSFiddle o similar no es satisfactorio.

    – ajp15243

    26 de enero de 2014 a las 18:31


  • quiero decir que la barra de desplazamiento está ahí, es solo que el contenido del sitio podría estar detrás, como si la barra de desplazamiento no estuviera allí, pero aún puede verlo

    – Portero Morgan

    26 de enero de 2014 a las 19:12

  • @NicholasHazel, si el contenido no llega al final de la página, la barra de desplazamiento no aparecerá.

    – yaakov

    17/07/2016 a las 20:24

Avatar de usuario de Sos Sargsyan
Sos Sargsián

Actualizar – overlay era solo webkit y ahora está obsoleto.


Puedes usar el overflow overlay propiedad en lugar de scroll:

html {
    overflow-y: overlay;
}

  • overflow: overlay ha quedado en desuso y no debe utilizarse. Y solo es compatible con navegadores basados ​​en WebKit. Ver developer.mozilla.org/en-US/docs/Web/CSS/overflow

    – Tomillo

    8 de marzo de 2019 a las 16:26


  • Desafortunadamente, mientras funciona, no representará el contenido visiblemente detrás del ancho de la barra de desplazamiento. Es un poco raro.

    – contador de invierno

    1 de septiembre de 2020 a las 9:26

Avatar de usuario de KyleMit
KyleMit

Actualización 2021 – Uso scrollbar-gutter

los scrollbar-gutter La propiedad CSS permite a los autores reservar espacio para la barra de desplazamiento, evitando cambios de diseño no deseados a medida que crece el contenido y evitando imágenes innecesarias cuando no es necesario desplazarse.

body {
  overflow-y: auto;
  scrollbar-gutter: stable;
}

Ejemplo

ejemplos de scrollbar-gutter

Demostración en Stack Snippets y jsviolín

body {
  padding: 16px;
}
.grid {
    display: grid;
    grid-template-columns: repeat(2, 273px);
    grid-gap: 16px;
}
.card-header {
  margin-bottom: 4px;
  white-space: pre-line;
  font-weight: bold;
}
.card-body {
  overflow: auto;
  border: 1px solid black;
  height: 120px;
  
}
.scrollbar-stable {
  scrollbar-gutter: stable;
}
<h1><code>scrollbar-gutter</code> sample</h1>

<div class="grid">

  <div class="card">
    <pre class="card-header">
overflow: auto;
scrollbar-gutter: auto;
    </pre>
    <div class="card-body">Doggo ipsum length boy noodle horse doing me a frighten doggorino, woofer he made many woofs. Thicc puggorino smol</div>
  </div>
  
  <div class="card">
    <pre class="card-header">
overflow: auto;
scrollbar-gutter: stable;
    </pre>
    <div class="card-body scrollbar-stable">Doggo ipsum length boy noodle horse doing me a frighten doggorino, woofer he made many woofs. Thicc puggorino smol</div>
  </div>
  
  <div class="card">
    <pre class="card-header">
overflow: auto;
scrollbar-gutter: auto;
    </pre>
    <div class="card-body">Doggo ipsum length boy noodle horse doing me a frighten doggorino, woofer he made many woofs. Thicc puggorino smol borking doggo with a long snoot for pats shibe long woofer very hand that feed shibe pats, vvv wow such tempt long woofer heckin fluffer. Long water shoob smol corgo sub woofer</div>
  </div>
  
  <div class="card">
    <pre class="card-header">
overflow: auto;
scrollbar-gutter: stable;
    </pre>
    <div class="card-body scrollbar-stable">Doggo ipsum length boy noodle horse doing me a frighten doggorino, woofer he made many woofs. Thicc puggorino smol borking doggo with a long snoot for pats shibe long woofer very hand that feed shibe pats, vvv wow such tempt long woofer heckin fluffer. Long water shoob smol corgo sub woofer</div>
  </div>
  
</div>

Otras lecturas

  • La pregunta pregunta sobre cómo hacer que no ocupe espacio, esto hace que siempre ocupe espacio.

    – Cañón de vidrio

    22 de agosto a las 22:28

  • @GlassCannon, la pregunta también se refiere a cómo “prevenir el cambio de diseño” que esto resuelve, pero agregó un enlace a algunas soluciones alternativas para ocupar cero espacio (aunque esto puede presentar desafíos para los usuarios que dependen de la disponibilidad de la barra de desplazamiento)

    – KyleMit

    23 de agosto a las 11:43

No hay manera de hacer que aparezca una barra de desplazamiento en la parte superior de su contenido sin usar trucos sombríos, y de todos modos no es la mejor idea, ya que afectará la usabilidad de su aplicación. Si la barra de desplazamiento está sobre el contenido, es probable que oculte enlaces/texto/etc.

Idealmente, su página debe tener un estilo que se adapte a diferentes anchos de navegador/página sin romperse. Especialmente con solo una pequeña barra de desplazamiento.

De todos modos, aquí hay una solución que puede ayudar:

html {
    overflow-y: scroll;
}

Agregar este estilo asegurará que la pista de la barra de desplazamiento esté siempre presente y también ayudará a evitar páginas “con saltos” cuando aparezca/desaparezca una barra de desplazamiento. Una vez más, la solución real es utilizar un diseño flexible.

Como nota al margen, generalmente no se recomienda diseñar la barra de desplazamiento. No funciona entre navegadores y, por lo general, se ignorará por completo.

  • ^ Sí, lo que dijo. +1

    – Nicolás Hazel

    26 de enero de 2014 a las 18:36


  • No necesito preocuparme por los navegadores cruzados, ya que estoy usando tidesdk, que solo usa webkit. Supongo que tendré que encontrar una manera de lidiar con eso. ¡Gracias!

    – Portero Morgan

    26 de enero de 2014 a las 19:04

  • Ni siquiera lo recomendaría en webkit, de hecho, hubo una actualización reciente que cambió drásticamente la barra de desplazamiento.

    –Wesley Murch

    26 de enero de 2014 a las 19:16

  • ¡estupendo! Lo pruebo y funciona como se esperaba.

    – sherwin00103898-276165-15433

    9 abr a las 1:45

  • Consulte la respuesta de KyleMit, que funciona muy bien.

    – ManojTM

    24 de mayo a las 5:01

Puede resolver esto ocultando la barra de desplazamiento. La solución está en el sitio web de ws3Schools, https://www.w3schools.com/howto/howto_css_hide_scrollbars.asp

<!DOCTYPE html>
<html>
<head>
<style>
.example {
  background-color: #eee;
  width: 200px;
  height: 100px;
  border: 1px dotted black;
  overflow-y: scroll; /* Add the ability to scroll */
}

/* Hide scrollbar for Chrome, Safari and Opera */
.example::-webkit-scrollbar {
    display: none;
}

/* Hide scrollbar for IE, Edge and Firefox */
.example {
  -ms-overflow-style: none;  /* IE and Edge */
  scrollbar-width: none;  /* Firefox */
}
</style>
</head>
<body>

<h2>Hide scrollbar but keep functionality</h2>
<p>Try to scroll inside the div below:</p>

<div class="example">Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. Some text to enable scrolling.. </div>

</body>
</html>

Avatar de usuario de PaperStrike
huelga de papel

Si no tiene miedo de tener algo oculto, el código a continuación parece funcionar.

body {
  width: 100vw;
  overflow-x: hidden;
}

@supports (overflow-x: clip) {
  body {
    overflow-x: clip;
  }
}

La diferencia entre clip y hidden es que el clip palabra clave también prohíbe todos desplazamiento, incluido el desplazamiento programático. Para navegadores no compatibles clipReiniciar scrollLeft a 0 en la devolución de llamada del evento de desplazamiento de document.body si es necesario.

Ver también, compatibilidad del navegador de overflow.

Avatar de usuario de Sze Yu Sim
tamaño yu sim

Si desea ocultar la barra de desplazamiento todo el tiempo, puede usar este código. * decir todo

/* Hide scrollbar for Chrome, Safari and Opera */
*::-webkit-scrollbar {
    display: none;
}

/* Hide scrollbar for IE, Edge and Firefox */
*{
  -ms-overflow-style: none;  /* IE and Edge */
  scrollbar-width: none;  /* Firefox */
}

¿Ha sido útil esta solución?