Próbuję zaprojektować tabelę HTML, w której nagłówek pozostanie na górze strony, gdy I TYLKO wtedy, gdy użytkownik przewinie ją poza zasięg wzroku. Na przykład tabela może znajdować się 500 pikseli w dół od strony, jak to zrobić, aby jeśli użytkownik przewinął nagłówek poza zasięgiem widoku (przeglądarka jakoś wykryje, że nie ma go już w widoku Windows), pozostanie on na górze ? Czy ktoś może mi dać rozwiązanie tego problemu w Javascript?
<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>
W powyższym przykładzie chcę, <thead>
aby przewijał się wraz ze stroną, jeśli zniknie z widoku.
WAŻNE: NIE szukam rozwiązania, w którym <tbody>
będzie miał pasek przewijania (przepełnienie: auto).
jquery
html
html-table
Sam Dufel
źródło
źródło
Odpowiedzi:
Możesz zrobić coś takiego, dotykając modułu
scroll
obsługi zdarzeńwindow
i używając innegotable
o ustalonej pozycji, aby wyświetlić nagłówek u góry strony.HTML:
CSS:
JavaScript:
Spowoduje to wyświetlenie nagłówka tabeli, gdy użytkownik przewinie w dół na tyle daleko, aby ukryć oryginalną nagłówek tabeli. Ukryje się ponownie, gdy użytkownik ponownie przewinie stronę w górę.
Przykład roboczy: http://jsfiddle.net/andrewwhitaker/fj8wM/
źródło
window
. mkoryak.github.io/floatThead ma bardziej ogólne rozwiązanie.Cóż, próbowałem uzyskać ten sam efekt bez uciekania się do kolumn o stałym rozmiarze lub posiadania stałej wysokości dla całego stołu.
Rozwiązanie, które wymyśliłem, to hack. Polega na powieleniu całej tabeli, a następnie ukryciu wszystkiego oprócz nagłówka i nadaniu mu stałej pozycji.
HTML
CSS
javascript
Zobacz tutaj: http://jsfiddle.net/QHQGF/7/
Edycja: zaktualizowano kod tak, aby thead mógł odbierać zdarzenia wskaźnika (aby przyciski i linki w nagłówku nadal działały). To rozwiązuje problem zgłoszony przez luhfluha i Joe M.
Nowy jsfiddle tutaj: http://jsfiddle.net/cjKEx/
źródło
visibility: hidden
. Możesz tylko ukryć,#clone tbody
a potem ustawić ramkę ... SkrzypceCzysty CSS (bez obsługi IE11):
źródło
-webkit-sticky
nieprawidłową wartość dlaposition
.-webkit-sticky
jest przeznaczone dla Safari (komputery stacjonarne i iOS), a nie dla Chrome.position: sticky
działa w Chrome od wersji 56. Powinieneś ustawić OBIE reguły:-webkit-sticky
isticky
dokładnie w tej samej kolejności, jak w moim przykładzie kodu. Safari pobierawebkit-sticky
i wszystkie inne przeglądarki nadpisują tosticky
.position: sticky
nie będzie działać z elementami tabeli.Napisałem wtyczkę, która to robi. Pracuję nad tym od około roku i myślę, że całkiem dobrze radzi sobie ze wszystkimi narożnymi sprawami:
Oto kilka demonstracji / dokumentów:
http://mkoryak.github.io/floatThead/
źródło
Udało mi się rozwiązać problem ze zmianą szerokości kolumn. Zacząłem od powyższego rozwiązania Andrew (wielkie dzięki!), A następnie dodałem jedną małą pętlę, aby ustawić szerokości sklonowanych td:
To rozwiązuje problem bez konieczności klonowania całego stołu i ukrywania ciała. Jestem zupełnie nowy w JavaScript i jQuery (i przepełnieniu stosu), więc wszelkie komentarze są mile widziane.
źródło
Jest to zdecydowanie najlepsze rozwiązanie, jakie znalazłem w przypadku stałego nagłówka tabeli.
AKTUALIZACJA 5/11: Naprawiono błąd przewijania w poziomie, wskazany przez Kerry Johnson
Codepen: https://codepen.io/josephting/pen/demELL
źródło
outerWidth
nawidth
w definicji funkcji resizeFixed ().z-index
do pewnej liczby dodatniej w.fixed
klasie, aby obiekty renderowane po załadowaniu strony w tabeli nie unosiły się nad stałym nagłówkiem podczas przewijania.Najlepszym rozwiązaniem jest użycie tej wtyczki jquery:
https://github.com/jmosbech/StickyTableHeaders
Ta wtyczka działała świetnie i wypróbowaliśmy wiele innych rozwiązań. Przetestowaliśmy to w IE, Chrome i Firefox
źródło
Jest tu już wiele naprawdę dobrych rozwiązań. Ale jedno z najprostszych rozwiązań CSS, których używam w takich sytuacjach, jest następujące:
Ponieważ nie jest wymagany JavaScript, znacznie upraszcza to sytuację. Zasadniczo musisz skupić się na drugiej regule CSS, która zawiera warunki zapewniające, że nagłówek tabeli pozostaje na górze bez względu na przestrzeń przewijania.
Aby szczegółowo omówić każdą z zasad.
position
ma na celu wskazanie przeglądarce, że obiekt głowy, jego wiersz i komórki muszą przyklejać się do góry. Koniecznie musi temu towarzyszyćtop
, który wskazuje przeglądarce, że głowa będzie przyklejona do góry strony lub widocznego obszaru. Dodatkowo możesz dodać,z-index
aby zawartość głowy zawsze pozostała na górze.Kolor tła służy jedynie do zilustrowania sprawy. Aby uzyskać ten efekt, nie musisz używać żadnego dodatkowego JavaScript. Jest to obsługiwane w większości głównych przeglądarek po 2016 roku.
źródło
Znalazłem prostą bibliotekę jQuery o nazwie Sticky Table Headers. Dwie linie kodu i zrobiło dokładnie to, co chciałem. Powyższe rozwiązania nie zarządzają szerokościami kolumn, więc jeśli masz komórki tabeli, które zajmują dużo miejsca, wynikowy rozmiar trwałego nagłówka nie będzie pasował do szerokości tabeli.
http://plugins.jquery.com/StickyTableHeaders/
Informacje o użytkowaniu tutaj: https://github.com/jmosbech/StickyTableHeaders
źródło
Cóż, po przejrzeniu wszystkich dostępnych rozwiązań napisałem wtyczkę, która może zamrozić dowolny wiersz (nie tylko ten) na górze strony lub kontenera. To bardzo proste i bardzo szybkie. Zapraszam do korzystania z niego. http://maslianok.github.io/stickyRows/
źródło
możesz użyć tego podejścia, czysty HTML i CSS nie potrzeba JS :)
źródło
Znalazłem proste rozwiązanie bez użycia JQuery i używania tylko CSS .
Musisz umieścić stałą zawartość wewnątrz znaczników „th” i dodać CSS
Wystarczy pozycja, indeks z i właściwości górne. Ale możesz zastosować resztę, aby uzyskać lepszy widok.
źródło
Ja również doświadczyłem tych samych problemów z formatowaniem obramowania, które nie było wyświetlane za pomocą kodu entrofii, ale kilka drobnych poprawek, a teraz tabela jest rozwijana i wyświetla wszystkie reguły stylizacji CSS, które możesz dodać.
do css dodać:
to tutaj jest nowy javascript:
źródło
Oto rozwiązanie, które opiera się na zaakceptowanej odpowiedzi. Koryguje o: szerokości kolumn, dopasowany styl tabeli i kiedy tabela jest przewijana w kontenerze div.
Stosowanie
Upewnij się, że Twoja tabela ma
<thead>
tag, ponieważ poprawiona zostanie tylko zawartość reklamy.JavaSript
źródło
$sp.scrollLeft()
co powoduje przewijanie kwoty od lewej, więc podczas przewijania w dół ustalona tabela jest ustawiona prawidłowo. Dodano również sprawdzanie podczas przewijania w poziomie, czy widoczna jest stała tabela, aby dostosować lewą pozycję. Innym problemem, którego nie mogłem rozwiązać, jest to, że gdy tabela znajduje się nad widocznym obszarem, stała tabela powinna się ukrywać, dopóki użytkownik nie przewinie w górę.Uncaught TypeError: $table.scrollParent is not a function
Pomoże ci to mieć stały nagłówek, który można również przewijać w poziomie z danymi.
źródło
To jest moje rozwiązanie
źródło
Trochę za późno na imprezę, ale oto implementacja, która działa z wieloma tabelami na tej samej stronie i jest darmowa (przy użyciu requestAnimationFrame). Nie ma też potrzeby podawania szerokości kolumn. Przewijanie w poziomie również działa.
Nagłówki są zdefiniowane w a,
div
więc w razie potrzeby możesz dodać tam dowolne znaczniki (takie jak przyciski). To jest cały kod HTML, który jest potrzebny:https://jsfiddle.net/lloydleo/bk5pt5gs/
źródło
W tym rozwiązaniu ustalony nagłówek tworzony jest dynamicznie, zawartość i styl klonuje się z THEAD
wystarczy na przykład dwie linie:
var $myfixedHeader = $("#Ttodo").FixedHeader(); //create fixed header $(window).scroll($myfixedHeader.moveScroll); //bind function to scroll event
Mój plugin jquery FixedHeader i getStyleObject podane poniżej możesz umieścić w pliku .js
źródło
Utwórz dodatkową tabelę z takim samym nagłówkiem jak główna tabela. Po prostu umieść thead w nowej tabeli z jednym wierszem i wszystkimi nagłówkami. Ustaw położenie bezwzględne i białe tło. Dla głównej tabeli umieść go w div i użyj przewijania wysokości i przepełnienia. W ten sposób nasz nowy stół pokona nagłówek głównego stołu i tam pozostanie. Otocz wszystko w div. Poniżej znajduje się przybliżony kod, aby to zrobić.
źródło
Demo: demo css z poprawionym nagłówkiem tabeli
źródło
Rozwiąż swój problem z tym
źródło
Można to osiągnąć za pomocą transformacji właściwości stylu. Wszystko, co musisz zrobić, to zawinąć tabelę w jakiś div o stałej wysokości i przepełnieniu ustawionym na auto, na przykład:
Następnie możesz dołączyć do niego moduł obsługi przewijania onscroll, tutaj masz metodę, która znajduje każdą tabelę opakowaną
<div class="tableWrapper"></div>
:A oto działający przykład tego w akcji (użyłem bootstrapa, aby był ładniejszy): skrzypce
Dla tych, którzy chcą również obsługiwać IE i Edge, oto fragment kodu:
W IE i Edge przewijanie jest trochę opóźnione ... ale działa
Oto odpowiedź, która pomaga mi się tego dowiedzieć: odpowiedź
źródło
Wypróbowałem większość tych rozwiązań i ostatecznie znalazłem (IMO) najlepsze, nowoczesne rozwiązanie:
Siatki CSS
Dzięki siatkom CSS możesz zdefiniować `` siatkę '', a na koniec możesz stworzyć ładne, wolne od JavaScript rozwiązanie dla różnych przeglądarek dla tabeli ze stałym nagłówkiem i przewijaną treścią. Wysokość nagłówka może być nawet dynamiczna.
CSS : Wyświetl jako siatkę i ustaw liczbę
template-rows
:HTML : Utwórz kontener siatki i liczbę zdefiniowanych
rows
:Oto działający przykład:
CSS
HTML
źródło
Wypróbowałem to używając transformacji: translate . Chociaż działa dobrze w Firefoksie i Chrome, po prostu nie ma funkcji w IE11. Brak podwójnych pasków przewijania. Obsługuje tfoot tabeli i podpis. Czysty Javascript, bez jQuery.
http://jsfiddle.net/wbLqzrfb/42/
źródło
Znalazłem rozwiązanie bez jQuery
HTML
CSS
Możesz zobaczyć, jak działa tutaj: https://jsfiddle.net/lexsoul/fqbsty3h
Źródło: https://medium.com/@vembarrajan/html-css-tricks-scroll-able-table-body-tbody-d23182ae0fbc
źródło