Estou tentando criar uma tabela HTML em que o cabeçalho permanecerá na parte superior da página quando E SOMENTE quando o usuário rolar para fora da vista. Por exemplo, a tabela pode estar a 500 pixels abaixo da página, como faço para que, se o usuário rolar o cabeçalho para fora da vista (o navegador detectar que não está mais na vista do Windows de alguma forma), ele permanecerá no topo ? Alguém pode me dar uma solução Javascript para isso?
<table>
<thead>
<tr>
<th>Col1</th>
<th>Col2</th>
<th>Col3</th>
</tr>
</thead>
<tbody>
<tr>
<td>info</td>
<td>info</td>
<td>info</td>
</tr>
<tr>
<td>info</td>
<td>info</td>
<td>info</td>
</tr>
<tr>
<td>info</td>
<td>info</td>
<td>info</td>
</tr>
</tbody>
</table>
Portanto, no exemplo acima, eu quero <thead>
rolar com a página se ela ficar fora de vista.
IMPORTANTE: NÃO estou procurando uma solução em <tbody>
que a barra de rolagem tenha uma barra de rolagem (estouro: automático).
jquery
html
html-table
Sam Dufel
fonte
fonte
Respostas:
Você faria algo assim tocando no
scroll
manipulador de eventoswindow
e usando outrotable
com uma posição fixa para mostrar o cabeçalho na parte superior da página.HTML:
CSS:
JavaScript:
Isso mostrará o cabeçalho da tabela quando o usuário rolar para baixo o suficiente para ocultar o cabeçalho da tabela original. Ele será oculto novamente quando o usuário rolar a página o suficiente novamente.
Exemplo de trabalho: http://jsfiddle.net/andrewwhitaker/fj8wM/
fonte
window
. O mkoryak.github.io/floatThead possui uma solução mais aplicável em geral.Bem, eu estava tentando obter o mesmo efeito sem recorrer a colunas de tamanho fixo ou ter uma altura fixa para toda a tabela.
A solução que eu criei é um hack. Consiste em duplicar a tabela inteira e ocultar tudo, exceto o cabeçalho, e fazer com que essa posição seja fixa.
HTML
CSS
javascript
Veja aqui: http://jsfiddle.net/QHQGF/7/
Editar: atualizou o código para que o cabeçalho possa receber eventos do ponteiro (para que os botões e links no cabeçalho ainda funcionem). Isso corrige o problema relatado por luhfluh e Joe M.
Novo jsfiddle aqui: http://jsfiddle.net/cjKEx/
fonte
visibility: hidden
. Você pode ocultar única#clone tbody
e depois disso você pode definir fronteira ... fiddle Trabalho: jsfiddle.net/QHQGF/1707CSS puro (sem suporte para IE11):
fonte
-webkit-sticky
como um valor inválido paraposition
.-webkit-sticky
é para o Safari (Desktop e iOS), não para o Chrome.position: sticky
funciona no Chrome a partir da versão 56. Você deve definir AMBAS regras:-webkit-sticky
esticky
exatamente na mesma ordem que no meu exemplo de código. O Safari recebewebkit-sticky
e todos os outros navegadores o substituemsticky
.position: sticky
não funcionará com elementos da tabela.Eu escrevi um plugin que faz isso. Trabalho nisso há um ano e acho que ele lida com todos os casos de canto muito bem:
Aqui estão algumas demos / docs:
http://mkoryak.github.io/floatThead/
fonte
Consegui corrigir o problema com a alteração da largura das colunas. Comecei com a solução de Andrew acima (muito obrigado!) E, em seguida, adicionei um pequeno loop para definir as larguras dos td's clonados:
Isso resolve o problema sem precisar clonar a tabela inteira e ocultar o corpo. Sou novato em JavaScript e jQuery (e em excesso de pilha), portanto qualquer comentário é apreciado.
fonte
Essa é de longe a melhor solução que encontrei para ter um cabeçalho de tabela fixo.
ATUALIZAÇÃO 5/11: Corrigido o erro de rolagem horizontal, como apontado por Kerry Johnson
Codepen: https://codepen.io/josephting/pen/demELL
fonte
outerWidth
parawidth
na definição da função resizeFixed ().z-index
algum número positivo na.fixed
classe, para que os objetos renderizados após o carregamento da página na tabela não flutuem sobre o cabeçalho fixo enquanto você rola.A melhor solução é usar este plugin jquery:
https://github.com/jmosbech/StickyTableHeaders
Este plugin funcionou muito bem para nós e tentamos muitas outras soluções. Nós o testamos no IE, Chrome e Firefox
fonte
Já existem muitas soluções realmente boas aqui. Mas uma das soluções mais simples de CSS que eu uso nessas situações é a seguinte:
Como não há requisito para JavaScript, ele simplifica significativamente a situação. Você precisa essencialmente se concentrar na segunda regra CSS, que contém as condições para garantir que a cabeça da tabela permaneça no topo, independentemente do espaço de rolagem.
Elaborar detalhadamente cada uma das regras.
position
deve indicar ao navegador que o objeto principal, sua linha e suas células precisam ficar no topo. Isso necessariamente precisa ser acompanhado portop
, o que especifica para o navegador que o cabeçalho ficará no topo da página ou na janela de exibição. Além disso, você pode adicionarz-index
para garantir que o conteúdo da cabeça permaneça sempre na parte superior.A cor de fundo é apenas para ilustrar o ponto. Você não precisa usar JavaScript adicional para obter esse efeito. Isso é suportado na maioria dos principais navegadores após 2016.
fonte
Eu encontrei uma biblioteca jQuery simples chamada Sticky Table Headers. Duas linhas de código e ele fez exatamente o que eu queria. As soluções acima não gerenciam as larguras da coluna; portanto, se você tiver células da tabela que ocupam muito espaço, o tamanho resultante do cabeçalho persistente não corresponderá à largura da sua tabela.
http://plugins.jquery.com/StickyTableHeaders/
Informações de uso aqui: https://github.com/jmosbech/StickyTableHeaders
fonte
Bem, depois de revisar todas as soluções disponíveis, escrevi um plugin que pode congelar qualquer linha (não apenas a) na parte superior da página ou no contêiner. É muito simples e muito rápido. Sinta-se livre para usá-lo. http://maslianok.github.io/stickyRows/
fonte
você pode usar essa abordagem, HTML e CSS puro, sem necessidade de JS :)
fonte
Eu encontrei uma solução simples sem usar JQuery e usando apenas CSS .
Você precisa colocar o conteúdo fixo dentro das tags 'th' e adicionar o CSS
A posição, o índice z e as principais propriedades são suficientes. Mas você pode aplicar o restante para oferecer uma visão melhor.
fonte
Eu também experimentei os mesmos problemas com a formatação de borda, não sendo mostrada usando o código da entrofia, mas algumas pequenas correções e agora a tabela é expansível e exibe todas as regras de estilo css que você pode adicionar.
para adicionar css:
então aqui está o novo javascript:
fonte
Aqui está uma solução que se baseia na resposta aceita. Ele corrige: larguras de coluna, estilo de tabela correspondente e quando a tabela é rolada em uma div de contêiner.
Uso
Verifique se sua tabela possui uma
<thead>
tag, pois apenas o conteúdo do tópico será corrigido.JavaSript
fonte
$sp.scrollLeft()
que recebe a quantidade rolada da esquerda por isso, quando a rolagem para baixo da mesa fixa está posicionado corretamente. Também foi adicionada a verificação ao rolar horizontalmente se a tabela fixa estiver visível para ajustar a posição esquerda. Outro problema que não consegui resolver é quando a tabela fica acima da janela de exibição que a tabela fixa deve ocultar até que o usuário role novamente.Uncaught TypeError: $table.scrollParent is not a function
Isso ajudará você a ter um cabeçalho fixo, que também pode ser rolado horizontalmente com os dados.
fonte
Esta é a minha solução
fonte
Um pouco atrasado para a festa, mas aqui está uma implementação que funciona com várias tabelas na mesma página e é "gratuita" (usando requestAnimationFrame). Também não há necessidade de fornecer largura nas colunas. A rolagem horizontal também funciona.
Os cabeçalhos são definidos de
div
forma que você fique livre para adicionar qualquer marcação (como botões), se necessário. Este é todo o HTML necessário:https://jsfiddle.net/lloydleo/bk5pt5gs/
fonte
Nesta solução, o cabeçalho fixo é criado dinamicamente, o conteúdo e o estilo são clonados no THEAD
tudo o que você precisa é de duas linhas, por exemplo:
var $myfixedHeader = $("#Ttodo").FixedHeader(); //create fixed header $(window).scroll($myfixedHeader.moveScroll); //bind function to scroll event
Meu plugin jquery FixedHeader e getStyleObject fornecidos abaixo, você pode colocar no arquivo .js
fonte
Crie uma tabela extra com o mesmo cabeçalho da tabela principal. Basta colocar o cabeçalho na nova tabela com uma linha e todos os cabeçalhos. Posicione o absoluto e o fundo em branco. Para a tabela principal, coloque-a em uma div e use alguma altura e rolagem overflow-y. Dessa forma, nossa nova tabela superará o cabeçalho da tabela principal e permanecerá lá. Coloque tudo em uma div. Abaixo está o código aproximado para fazê-lo.
fonte
Demonstração: demo de cabeçalho de tabela fixa css
fonte
Corrija seu problema com este
fonte
Isso pode ser alcançado usando a transformação de propriedade de estilo. Tudo o que você precisa fazer é agrupar sua tabela em alguma div com altura e estouro fixos definidos como automático, por exemplo:
E então você pode anexar o manipulador de onscroll a ele, aqui você tem um método que localiza cada tabela agrupada com
<div class="tableWrapper"></div>
:E aqui está um exemplo disso em ação (usei o bootstrap para torná-lo mais bonito): fiddle
Para quem também deseja oferecer suporte ao IE e Edge, aqui está o trecho:
No IE e no Edge, o scroll é um pouco lento ... mas funciona
Aqui está a resposta que me ajuda a descobrir isso: resposta
fonte
Tentei a maioria dessas soluções e, finalmente, encontrei (IMO) a melhor e moderna solução:
Grades CSS
Com grades CSS, você pode definir uma 'grade' e, finalmente, criar uma solução agradável, sem javascript, para vários navegadores, para uma tabela com cabeçalho fixo e conteúdo rolável. A altura do cabeçalho pode até ser dinâmica.
CSS : Exiba como grade e defina o número de
template-rows
:HTML : Crie um contêiner de grade e o número de definido
rows
:Aqui está um exemplo de trabalho:
CSS
HTML
fonte
Eu tentei usando transformação: translate . Embora funcione bem no Firefox e Chrome, simplesmente não há função no IE11. Nenhuma barra de rolagem dupla. Suporta tabela tfoot e legenda. Javascript puro, sem jQuery.
http://jsfiddle.net/wbLqzrfb/42/
fonte
Encontrei uma solução sem jquery
HTML
CSS
Você pode vê-lo funcionando aqui: https://jsfiddle.net/lexsoul/fqbsty3h
Fonte: https://medium.com/@vembarrajan/html-css-tricks-scroll-able-table-body-tbody-d23182ae0fbc
fonte