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.