Agregar barra de desplazamiento horizontal a la tabla html


142

¿Hay alguna manera de agregar una barra de desplazamiento horizontal a una tabla HTML? De hecho, necesito que se pueda desplazar tanto vertical como horizontalmente según cómo crezca la tabla, pero no puedo hacer que aparezca ninguna barra de desplazamiento.


3
... pensado en poner toda la mesa en un div? ... luego agrega desplazamiento al div?
— vector

3
¿Quizás es hora de cambiar qué respuesta es la respuesta aceptada?
— Serge Stroobandt

Respuestas:


82

¿Intentaste la overflowpropiedad CSS ?

overflow: scroll; /* Scrollbar are always visible */
overflow: auto;   /* Scrollbar is displayed as it's needed */

ACTUALIZACIÓN
Como señalan otros usuarios, esto no es suficiente para agregar las barras de desplazamiento.
Entonces, por favor, vea y vote los comentarios y respuestas a continuación.


15
Según mis propios intentos y todo lo demás que he leído en Internet, esto simplemente no funcionará. Puede desbordar un elemento contenedor, claro, pero no la tabla en sí.
— bloudermilk

21
@bloudermilk Puedes si agregas display: block.
— Cees Timmerman

244

Primero, haz una display: blockde tu mesa

luego, establecer overflow-x:en auto.

table {
    display: block;
    overflow-x: auto;
    white-space: nowrap;
}

Bonito y limpio. Sin formato superfluo.

Aquí hay ejemplos más involucrados con subtítulos de tabla de desplazamiento desde una página en mi sitio web.


3
Esto funciona para mí en Chrome, pero solo después de aplastar todo junto. white-space: nowrap;ayuda a ver de inmediato la barra de desplazamiento.
— Cees Timmerman

28
Realmente intenté esto antes. El único problema era que las celdas de la tabla ya no ocupaban todo el ancho de la tabla.
— Shevy

44
Como han dicho otros, esto no funciona correctamente: las filas de la tabla no llenan el ancho de la tabla.
— collimarco

1
@SergeStroobandt no, en mi caso white-space: nowrap;no resuelve el problema (probado en Firefox). El ancho de las filas es menor que el ancho de la tabla cuando no hay suficiente contenido (texto) para expandir las filas.
— collimarco

3
@collimarco Nota: tuve que usar max-width: 100% para la opción de bloqueo en línea.
— dogoncouch

40

Envuelva la mesa en un DIV, con el siguiente estilo:

div.wrapper {
  width: 500px;
  height: 500px;
  overflow: auto;
}

8
Parece que el overflow:autoaquí es innecesario. ¿Sabes de alguna manera lograr esto sin establecer el ancho ... esa siempre parece ser la solución en HTML?
— JonnyRaa


12

Tuve un buen éxito con la solución propuesta por @Serge Stroobandt, pero encontré el problema que @Shevy tenía con las celdas que no llenaban todo el ancho de la tabla. Pude solucionar esto agregando algunos estilos al tbody.

table {
  display: block;
  overflow-x: auto;
  white-space: nowrap;
}

table tbody {
  display: table;
  width: 100%;
}

Esto funcionó para mí en Firefox, Chrome y Safari en Mac.


10

No pude conseguir que ninguna de las soluciones anteriores funcionara. Sin embargo, encontré un truco:

body {
  background-color: #ccc;
}

.container {
  width: 300px;
  background-color: white;
}

table {
  width: 100%;
  border-collapse: collapse;
}

td {
  border: 1px solid black;
}

/* try removing the "hack" below to see how the table overflows the .body */
.hack1 {
  display: table;
  table-layout: fixed;
  width: 100%;
}

.hack2 {
  display: table-cell;
  overflow-x: auto;
  width: 100%;
}
<div class="container">

  <div class="hack1">
    <div class="hack2">

      <table>
        <tr>
          <td>table or other arbitrary content</td>
          <td>that will cause your page to stretch</td>
        </tr>
        <tr>
          <td>uncontrollably</td>
          <td>xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx</td>
        </tr>
      </table>

    </div>
  </div>

</div>


Ninguno de los anteriores funcionó para mí tampoco, pero esto sí. Buena, gracias.
— Gábriel

@ Gábriel Me alegro de que te haya funcionado. Yo probé de nuevo justo ahora en Firefox y no parece estar haciendo correctamente :-( i.imgur.com/BcjSaCV.png Chrome todavía se ve bien.
— MPes

1
Extraño; Lo estaba usando exactamente en Firefox y funcionó allí, aunque no en esta configuración exacta. Quería renderizar una gran cuadrícula compuesta por divisiones de 10 x 10 px con bordes contraídos y el ancho máximo + el overflow-x: auto parecía ser la clave. Con aquellos en su lugar, todo parecía perfecto. Además, no estoy usando <table> en absoluto, solo divs, con display: table, table-row y table-cell.
— Gábriel

10

Esta es una mejora de la respuesta de Serge Stroobandt y funciona perfectamente. Resuelve el problema de que la tabla no llene todo el ancho de la página si tiene menos columnas.

<style> 
 .table_wrapper{
    display: block;
    overflow-x: auto;
    white-space: nowrap;
}
</style>

<div class="table_wrapper">
<table>
...
</table>
</div>

2
El white-space: nowrap;parece ser opcional.
— Mike Shiyan


2

Descubrí esta respuesta basada en la solución anterior y es un comentario y agregué algunos ajustes propios. Esto funciona para mí en la tabla receptiva.

table {
  display: inline-block;
  overflow-x: auto;
  white-space: nowrap;
  // make fixed table width effected by overflow-x
  max-width: 100%;
  // hide all borders that make rows not filled with the table width
  border: 0;
}
// add missing borders
table td {
  border: 1px solid;
}

@Saeed ¿Querías decir algo como la estructura html?
— George

Mi mal, quiero decir, agregar más explicaciones, para ayudar a entenderlo mejor
— Mastisa

Espero que esta versión esté más aclarada.
— George

1

El 'más del 100% de ancho' en la mesa realmente lo hizo funcionar para mí.

.table-wrap {
    width: 100%;
    overflow: auto;
}

table {
    table-layout: fixed;
    width: 200%;
}


-2
//Representation of table
<div class="search-table-outter">
<table class="table table-responsive search-table inner">
</table>
</div>

//Css to make Horizontal Dropdown

<style>

    .search-table{table-layout: auto; margin:40px auto 0px auto; }
    .search-table, td, th {
        border-collapse: collapse;
    }
th{padding:20px 7px; font-size:15px; color:#444;}
td{padding:5px 10px; height:35px;}
    .search-table-outter { overflow-x: scroll; }
th, td { min-width: 200px; }


</style>

La sangría y los datos de muestra ayudarían si tiene la intención de demostrar algo. Además, ¿quiso decir "barra de desplazamiento" en lugar de "Desplegable"?
— Cees Timmerman
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.