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.

Tsundoku
fuente
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.

pasine
fuente
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.

Serge Stroobandt
fuente
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;
}
Colin M
fuente
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
17

Use el atributo CSS " desbordamiento " para esto.

Breve resumen:

overflow: visible|hidden|scroll|auto|initial|inherit;

p.ej

table {
    display: block;
    overflow: scroll;
}
Roger Willcocks
fuente
enlace proporcionado está roto
justingordon 01 de
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.

Mary7678
fuente
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>

mpen
fuente
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>
ochomoswill
fuente
2
El white-space: nowrap;parece ser opcional.
Mike Shiyan
8

Me encontraba con el mismo problema. Descubrí la siguiente solución, que solo se ha probado en Chrome v31:

table {
    table-layout: fixed;
}

tbody {
    display: block;
    overflow: scroll;
}
Josh
fuente
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;
}
Jorge
fuente
@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%;
}

Peps
fuente
-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>
Kinzzy Goel
fuente
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