Adicionar barra de rolagem horizontal à tabela html

142

Existe uma maneira de adicionar uma barra de rolagem horizontal a uma tabela HTML? Na verdade, eu preciso que ele seja rolável vertical e horizontalmente, dependendo de como a tabela cresce, mas não consigo fazer com que a barra de rolagem apareça.

Tsundoku
fonte
3
... pensou em colocar a mesa inteira em uma div? ... depois adicione rolagem à div?
vector
3
Talvez seja hora de mudar qual resposta será a resposta aceita?
Serge Stroobandt

Respostas:

82

Você tentou a overflowpropriedade CSS ?

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

ATUALIZAÇÃO
Como outros usuários estão apontando, isso não é suficiente para adicionar as barras de rolagem.
Então, por favor, veja e vote nos comentários e respostas abaixo.

pasine
fonte
15
De acordo com minhas próprias tentativas e tudo o mais que li na internet, isso simplesmente não funciona. Você pode estourar um elemento do wrapper, com certeza, mas não a própria tabela.
bloudermilk
21
@bloudermilk Você pode, se você adicionar display: block.
precisa
244

Primeiro, faça display: blockda sua mesa

depois, defina overflow-x:para auto.

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

Legal e Limpo. Nenhuma formatação supérflua.

Aqui estão mais exemplos envolvidos com rolagem de legendas de tabela em uma página do meu site.

Serge Stroobandt
fonte
3
Isso funciona para mim no Chrome, mas somente depois de esmagar tudo juntos. white-space: nowrap;ajuda a ver imediatamente a barra de rolagem.
precisa
28
Na verdade, eu tentei isso antes. O único problema era que as células da tabela não preenchiam mais toda a largura da tabela.
Shevy
4
Como dito por outros, isso não funciona corretamente: as linhas da tabela não preenchem a largura da tabela.
collimarco
1
@SergeStroobandt não, no meu caso white-space: nowrap;não resolve o problema (testado no Firefox). A largura das linhas é menor que a largura da tabela quando não há conteúdo (texto) suficiente para expandir as linhas.
precisa saber é o seguinte
3
@collimarco Nota: eu tive que usar a largura máxima: 100% para a opção de bloco embutido.
dogoncouch
40

Embrulhe a tabela em um DIV, definido com o seguinte estilo:

div.wrapper {
  width: 500px;
  height: 500px;
  overflow: auto;
}
Colin M
fonte
8
Parece que o overflow:autoaqui é desnecessário. Você sabe como conseguir isso sem definir a largura ... que sempre parece ser a solução em html - codifique alguma largura ou altura, mas isso parece derrotar o ponto de ter um mecanismo de layout!
JonnyRaa
17

Use o atributo CSS " overflow " para isso.

Pequeno resumo:

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

por exemplo

table {
    display: block;
    overflow: scroll;
}
Roger Willcocks
fonte
o link fornecido está quebrado
justingordon
12

Tive um bom sucesso com a solução proposta por @Serge Stroobandt, mas encontrei o problema que a @Shevy tinha com as células e não preenchia toda a largura da tabela. Consegui consertar isso adicionando alguns estilos ao arquivo tbody.

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

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

Isso funcionou para mim no Firefox, Chrome e Safari no Mac.

Mary7678
fonte
10

Não consegui que nenhuma das soluções acima funcionasse. No entanto, eu encontrei um hack:

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
fonte
Nenhuma das opções acima funcionou para mim também, mas isso funcionou. Agradável, obrigado.
Gábriel 14/12/19
@ Gábriel Fico feliz que funcionou para você. Eu tentei-lo novamente agora no Firefox e não parecem estar prestando corretamente :-( i.imgur.com/BcjSaCV.png Chrome ainda parece ser bom.
MPEN
1
Estranho; Eu estava usando exatamente no Firefox e funcionou lá - embora não nesta configuração exata. Eu queria renderizar uma grande grade composta de divs de 10 x 10 px com bordas reduzidas e a largura máxima de saída + o overflow-x: auto parecia ser a chave. Com aqueles no lugar, tudo parecia perfeito. Além disso, não estou usando <table>, apenas divs, com display: table, table-row e table-cell.
Gábriel 16/12/19
10

Esta é uma melhoria da resposta de Serge Stroobandt e funciona perfeitamente. Ele resolve o problema da tabela que não preenche toda a largura da página se ela tiver menos colunas.

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

<div class="table_wrapper">
<table>
...
</table>
</div>
ochomoswill
fonte
2
O white-space: nowrap;parece ser opcional.
Mike Shiyan
8

Eu estava correndo para o mesmo problema. Descobri a seguinte solução, que só foi testada no Chrome v31:

table {
    table-layout: fixed;
}

tbody {
    display: block;
    overflow: scroll;
}
Josh
fonte
2

Eu descobri essa resposta com base na solução anterior e é comentário e adicionei alguns ajustes por conta própria. Isso funciona para mim na mesa responsiva.

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;
}
George
fonte
@Saeed Você quis dizer algo como estrutura html?
George
My bad, I significa adicionar mais explicações, para ajudar a compreender melhor
Mastisa
Espero que esta versão seja mais esclarecida.
George
1

A "largura superior a 100%" em cima da mesa realmente funcionou para mim.

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

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

Peps
fonte
-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
fonte
Recuo e dados de amostra ajudariam se você pretender demonstrar alguma coisa. Além disso, você quis dizer "barra de rolagem" em vez de "Dropdown"?
precisa