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.


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.


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.


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;
}

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;
}

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.


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>


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>

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


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;
}

@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%;
}


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

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
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.