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.
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.
Respostas:
Você tentou a overflow
propriedade 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.
display: block
.
display: block
da sua mesadepois, 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.
white-space: nowrap;
ajuda a ver imediatamente a barra de rolagem.
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.
Embrulhe a tabela em um DIV, definido com o seguinte estilo:
div.wrapper {
width: 500px;
height: 500px;
overflow: auto;
}
overflow:auto
aqui é 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!
Use o atributo CSS " overflow " para isso.
Pequeno resumo:
overflow: visible|hidden|scroll|auto|initial|inherit;
por exemplo
table {
display: block;
overflow: scroll;
}
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.
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>
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>
white-space: nowrap;
parece ser opcional.
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;
}
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;
}
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%;
}
//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>