Muszę utworzyć tabelę html (lub coś podobnego) ze stałym nagłówkiem i stałą pierwszą kolumną.
Każde rozwiązanie, które do tej pory widziałem, używa JavaScript lub jQuery
ustawia scrollTop / scrollLeft, ale nie działa płynnie w przeglądarkach mobilnych, więc szukam czystego rozwiązania CSS.
Znalazłem rozwiązanie dla stałej kolumny tutaj: jsfiddle.net/C8Dtf/20/ ale nie wiem, jak mogę to ulepszyć, aby naprawić również nagłówek.
Chcę, aby działał w przeglądarkach webkit lub korzystał z niektórych css3
funkcji, ale powtarzam, nie chcę używać Javascript
do przewijania.
EDYCJA: To jest przykład zachowania, które chcę osiągnąć: https://web.archive.org/web/20130829032141/http://datatables.net/release-datatables/extras/FixedColumns/css_size.html
html
css
html-table
markup
fixed-header-tables
panfil
źródło
źródło
position
zachowanie do wierszy i komórek, ale nie do końca rozumiem, gdzie jest to możliwe, czy nie.Odpowiedzi:
Rzeczywiste rozwiązanie CSS ze stałym wierszem nagłówka i pierwszą kolumną
Musiałem utworzyć tabelę ze stałym nagłówkiem i ustaloną pierwszą kolumną przy użyciu czystego CSS i żadna z odpowiedzi nie była tym, czego chciałem.
position: sticky
Nieruchomość obsługuje zarówno przyklejaniu do góry (jak widziałem kiedyś najbardziej) i na bok w nowoczesnych wersjach Chrome, Firefox i Edge. Można to połączyć zdiv
rozszerzeniem, które maoverflow: scroll
właściwość, aby utworzyć tabelę ze stałymi nagłówkami, które można umieścić w dowolnym miejscu na stronie:Umieść swój stół w pojemniku:
Użyj
overflow: scroll
na swoim kontenerze, aby włączyć przewijanie:Jak zauważyła Dagmar w komentarzach, kontener wymaga również a
max-width
i amax-height
.Użyj
position: sticky
mieć komórki tabeli trzymać się krawędzi itop
,right
lubleft
do wyboru która krawędź trzymać się:Jak wspomniała MarredCheese w komentarzach, jeśli pierwsza kolumna zawiera
<td>
elementy zamiast<th>
elementów, możesz użyćtbody td:first-child
w swoim CSS zamiasttbody th
Aby nagłówek w pierwszej kolumnie znajdował się po lewej stronie, użyj:
Pokaż fragment kodu
https://jsfiddle.net/qwubvg9m/1/
źródło
width
swoją pierwszą kolumnę, możesz użyćposition: sticky
w komórkach w drugiej kolumnieleft
wartości równej wartości z pierwszej kolumnywidth
: jsfiddle.net/wvypo83c/794<td>
elementy zamiast<th>
elementów, możesz użyćtbody td:first-child
w swoim CSS zamiasttbody th
.Obecnie jest to możliwe do osiągnięcia za pomocą CSS tylko z
position: sticky
właściwościami.Oto fragment:
(jsFiddle: https://jsfiddle.net/hbqzdzdt/5/ )
Odnośnie kompatybilności. Działa we wszystkich głównych przeglądarkach, ale nie w IE. Jest polyfill,
position: sticky
ale nigdy go nie próbowałem.źródło
To nie jest łatwe zadanie.
Poniższy link prowadzi do działającej wersji demonstracyjnej:
Link zaktualizowany zgodnie z komentarzem lanoxx
http://jsfiddle.net/C8Dtf/366/
Pamiętaj tylko, aby dodać te:
nie widzę innego sposobu osiągnięcia tego. Zwłaszcza nie używając tylko css.
To dużo do przejścia. Mam nadzieję że to pomoże :)
źródło
"bFilter": false
"bInfo" : false
do.dataTable()
zaproszeniathead
jest we własnej tabeli, która nie jest związana ze zmianamitd
elementów, więc jeśli komórka tekst jest długi,th
szerokość nie będzie odpowiednio dostosować.Wszystkie te sugestie są świetne i wszystkie, ale albo naprawiają tylko nagłówek lub kolumnę, a nie oba, albo używają javascript. Powód - nie wierzy, że można to zrobić w czystym CSS. Powód:
Gdyby to było możliwe, należałoby zagnieździć kilka przewijalnych elementów DIV, jeden w drugim, każdy ze zwojem w innym kierunku. Następnie musisz podzielić tabelę na trzy części - stały nagłówek, stałą kolumnę i resztę danych.
W porządku. Ale teraz problem - możesz sprawić, że jeden z nich pozostanie na miejscu podczas przewijania, ale drugi jest zagnieżdżony w obszarze przewijania pierwszego i dlatego może być przewijany poza zasięgiem wzroku, więc nie można go naprawić na miejscu ekran. „Aha” mówisz „ale mogę jakoś użyć do tego pozycji bezwzględnej lub stałej” - nie, nie możesz. Gdy tylko to zrobisz, stracisz możliwość przewijania tego kontenera. To sytuacja jajka i kury - nie możesz mieć obu, one się wykluczają.
Uważam, że jedynym rozwiązaniem jest użycie JavaScript. Musisz całkowicie oddzielić te trzy elementy i zsynchronizować ich pozycje za pomocą JavaScript. W innych postach na tej stronie znajdują się dobre przykłady. Ten też jest wart obejrzenia:
http://tympanus.net/codrops/2014/01/09/sticky-table-headers-columns/
źródło
Dokonałem pewnych zmian w jsfiddle. To może być to, co próbujesz zrobić.
Zakodowałem tytuły w następujący sposób:
Dodałem też kilka stylów.
Mam nadzieję, że tego chcesz :)
źródło
Przykład wykorzystujący tylko CSS:
źródło
div
. To właśniediv
pozwala na przewijanie wierszy, podczas gdy nagłówek pozostaje w tym samym miejscu. To podejście spełniło moje potrzeby.Znalazłem doskonałe rozwiązanie tego problemu autorstwa Paula O'Briena i chciałbym udostępnić link: https://codepen.io/paulobrien/pen/LBrMxa
Usunąłem styl stopki:
źródło
Aby naprawić zarówno nagłówki, jak i kolumny, możesz użyć następującej wtyczki:
Zaktualizowano w lipcu 2019 r
Niedawno pojawiło się również czyste rozwiązanie CSS, które jest oparte na właściwości CSS
position: sticky;
( tutaj, aby uzyskać więcej informacji), zastosowanej do każdegoTH
elementu (zamiast jego kontenera nadrzędnego)źródło
Niedawno musiałem stworzyć rozwiązanie ze stałą grupą nagłówków i stałą pierwszą kolumną. Podzieliłem tabelę na elementy div i użyłem jquery do przechwycenia przewijania okien.
http://jsfiddle.net/TinT/EzXub/2346/
źródło
Razem ze współpracownikiem właśnie wydaliśmy nowy projekt GitHub, który dostarcza dyrektywę Angular, której możesz użyć do udekorowania stołu za pomocą stałych nagłówków: https://github.com/objectcomputing/FixedHeader
Opiera się tylko na css i angular, z dyrektywą, która dodaje kilka elementów div. Nie jest wymagane jQuery.
Ta implementacja nie jest tak w pełni funkcjonalna, jak niektóre inne implementacje, ale jeśli potrzebujesz po prostu dodać ustalone tabele, uważamy, że może to być dobra opcja.
źródło
Po dwóch dniach walki z Internet Explorer 9 + Chrome + Firefox (Windows) i Safari (Mac) znalazłem system, który jest
Wynik:
HTML:
CSS:
źródło
div.cost_center table{border-collapse: collapse;}
a trzeci podpis musi być czymś, co mieści się w 60 pikselach (w tym przykładzie)Istniejące odpowiedzi będą odpowiadać większości ludzi, ale dla tych, którzy chcą coś dodać cienie pod stałym nagłówkiem i po prawej stronie pierwszej (ustalonej) kolumny, oto działający przykład (czysty CSS):
http://jsbin.com/nayifepaxo/1/edit?html,output
Główną sztuczką, aby to zadziałało, jest
::after
dodanie cieni po prawej stronie każdego z pierwszychtd
w każdym z nichtr
:Zajęło mi trochę czasu (zbyt długo ...), zanim to wszystko działało, więc pomyślałem, że podzielę się tym dla tych, którzy są w podobnej sytuacji.
źródło
Pokaż fragment kodu
trzeba naprawić stopkę nagłówka
źródło
Coś takiego może ci pomóc ... Prawdopodobnie będzie to wymagało ustawienia szerokości kolumn w wierszu nagłówka.
http://jsfiddle.net/vkhNC/
Aktualizacja:
Nie jestem przekonany, że przykład, który podałeś, jest możliwy tylko z CSS. Chciałbym, żeby ktoś udowodnił mi, że się mylę. Oto, co mam do tej pory . To nie jest gotowy produkt, ale może być dla Ciebie początkiem. Mam nadzieję, że to wskaże ci pomocny kierunek, gdziekolwiek by to nie było.
źródło
Innym rozwiązaniem jest użycie AngularJS. Moduł AngularUI ma dyrektywę o nazwie,
ng-grid
która obsługuje funkcję zwaną przypinaniem kolumn. Nie jest to w 100% czysty CSS, ale inne rozwiązania też nie są.http://angular-ui.github.io/ng-grid/#columnPinning
źródło
Przykład czystego CSS:
http://jsfiddle.net/cCarlson/L98m854d/
Wada: Stała struktura / logika nagłówka jest dość zależna od określonych wymiarów, więc abstrakcja prawdopodobnie nie jest realną opcją .
źródło
Pozycja: lepki nie działa w przypadku niektórych elementów, takich jak (thead) w Chrome i innych przeglądarkach webkit, takich jak safari.
Ale działa dobrze z (th)
Lub odwiedź mój przykład z kodem :
źródło
Myślę, że to ci pomoże: https://datatables.net/release-datatables/extensions/FixedHeader/examples/header_footer.html
Krótko mówiąc, jeśli wiesz, jak utworzyć tabelę danych, wystarczy dodać tę linię jQuery na dole:
bottom: true // służy również do naprawienia dolnego nagłówka.
źródło
Jeśli chcesz używać tylko czystego HTML i CSS, mam rozwiązanie dla twojego problemu:
W tym jsFiddle możesz zobaczyć rozwiązanie nieskryptowe , które zawiera tabelę ze stałym nagłówkiem. Nie powinno być problemu z dostosowaniem znaczników również do ustalonej pierwszej kolumny. Wystarczyłoby utworzyć tabelę pozycjonowaną bezwzględnie dla pierwszej kolumny wewnątrz
hWrapper
-div i zmienić położenievWrapper
-div.Zapewnienie dynamicznej zawartości nie powinno stanowić problemu przy użyciu kuszących silników po stronie serwera lub przeglądarki, moje rozwiązanie działa dobrze we wszystkich nowoczesnych przeglądarkach i starszych przeglądarkach począwszy od IE8.
źródło
Wystarczy zmienić styl jako
Demo: https://plnkr.co/edit/Qxy5RMJBXmkaJAOjBtQn?p=preview
źródło