Piszę stronę, na której potrzebuję tabeli HTML, aby zachować ustalony rozmiar. Potrzebuję, aby nagłówki na górze tabeli pozostały tam przez cały czas, ale potrzebuję również, aby treść tabeli była przewijana niezależnie od liczby wierszy dodanych do tabeli. Pomyśl o mini wersji programu Excel. Wydaje się, że jest to proste zadanie, ale prawie każde rozwiązanie, które znalazłem w sieci, ma pewne wady. Jak mogę to rozwiązać?
javascript
html
css
html-table
miętowy
źródło
źródło
Odpowiedzi:
Musiałem znaleźć tę samą odpowiedź. Najlepszy przykład, jaki znalazłem, to http://www.cssplay.co.uk/menu/tablescroll.html - zauważyłem, że przykład nr 2 dobrze mi pasuje. Będziesz musiał ustawić wysokość wewnętrznej tabeli za pomocą Java Script, reszta to CSS.
źródło
Zauważyłem, że DataTables jest dość elastyczny. Chociaż jego domyślna wersja jest oparta na jquery, istnieje również wtyczka AngularJs .
źródło
Widziałem doskonałe rozwiązanie podobnego pytania Seana Haddy'ego i pozwoliłem sobie na wprowadzenie kilku poprawek :
aria-hidden="false"
Sean wykonał jednak ciężkie podnoszenie. Dziękuję również Mattowi Burlandowi za wskazanie konieczności wsparcia stopy.
Przekonaj się sam na http://jsfiddle.net/jhfrench/eNP2N/
źródło
Czy próbowałeś użyć thead i tbody i ustawić stałą wysokość na tbody z overflow: scroll?
Jakie są Twoje docelowe przeglądarki?
EDYCJA: Działało dobrze (prawie) w Firefoksie - dodanie pionowego paska przewijania spowodowało również potrzebę poziomego paska przewijania - fuj. IE po prostu ustawił wysokość każdego td na taką, jaką określiłem jako wysokość ciała. Oto najlepsze, co mogłem wymyślić:
źródło
overflow-x: hidden;
aoverflow-y: auto
także pomóc.Potrzebujesz:
1) mają treść tabeli o ograniczonej wysokości, ponieważ przewijanie ma miejsce tylko wtedy, gdy zawartość jest większa niż przewijane okno. Nie
tbody
można jednak dopasować rozmiaru i musisz to wyświetlić jakoblock
:2) Ponownie zsynchronizuj nagłówki tabeli i szerokości kolumn z treścią tabeli, tak aby ta ostatnia
block
uczyniła z niej element niepowiązany. Jedynym sposobem, aby to zrobić, jest zasymulowanie synchronizacji przez wymuszenie tej samej szerokości kolumn w obu .Jednak ponieważ
tbody
sam jestblock
teraz, nie może już zachowywać się jaktable
. Ponieważ nadal potrzebujesztable
zachowania, aby poprawnie wyświetlać kolumny, rozwiązaniem jest poproszenie, aby każdy z wierszy był wyświetlany jako osobnetable
pozycje:(Zauważ, że używając tej techniki, nie będziesz już w stanie rozciągać się między wierszami).
Gdy to zrobisz, możesz wymusić szerokość kolumn, aby mieć tę samą szerokość w obu
thead
itbody
. Nie możesz tego:th, td { width: 20%; }
na przykład jeśli masz 5 kolumn), co jest bardziej praktyczne (nie ma potrzeby ustawiania szerokości dla każdej instancji tabeli), ale nie może działać dla żadnej liczby kolumnWolę ostatnią opcję, która wymaga dodania:
Zobacz demo tutaj , rozwidlone z odpowiedzi na to pytanie .
źródło
Edycja: To bardzo stara odpowiedź i jest tu dla dobrobytu, aby pokazać, że była obsługiwana w 2000 roku, ale została usunięta, ponieważ strategia przeglądarek w 2010 roku była zgodna ze specyfikacjami W3C, nawet jeśli niektóre funkcje zostały usunięte: Przewijalna tabela ze stałym nagłówkiem / footer został niezdarnie określony przed HTML5.
Złe wieści
Niestety nie ma eleganckiego sposobu obsługi przewijalnej tabeli ze stałym
thead
/,tfoot
ponieważ specyfikacje HTML / CSS nie są zbyt jasne na temat tej funkcji .Wyjaśnienia
Chociaż specyfikacja HTML 4.01 mówi, że
thead
/tfoot
/tbody
są używane (wprowadzane?) Do przewijania treści tabeli:Ale działająca funkcja przewijalnej tabeli w FF 3.6 została usunięta w FF 3.7, ponieważ jest uważana za błąd, ponieważ nie jest zgodna ze specyfikacjami HTML / CSS. Zobacz to i tamto komentarze dotyczące błędów FF.
Wskazówka Mozilla Developer Network
Poniżej znajduje się uproszczona wersja przydatnych wskazówek MDN dotyczących przewijanej tabeli.
Zobacz tę zarchiwizowaną stronę lub aktualną wersję francuską
Jednak MDN mówi również, że to już nie działa na FF :-(
Testowałem również na IE8 => tabela również nie jest przewijalna: - ((
źródło
Nie jestem pewien, czy ktokolwiek nadal się temu przygląda, ale sposób, w jaki zrobiłem to wcześniej, polega na użyciu dwóch tabel do wyświetlenia jednej oryginalnej tabeli - pierwsza to tylko oryginalna linia tytułu tabeli i bez wierszy treści tabeli (lub pusty wiersz treści do utworzenia sprawdza).
Drugi znajduje się w osobnym div i nie ma tytułu, a tylko oryginalne wiersze treści tabeli. Oddzielny element div jest następnie przewijalny.
Druga tabela w swoim div jest umieszczona tuż pod pierwszą tabelą w kodzie HTML i wygląda jak pojedyncza tabela ze stałym nagłówkiem i przewijalną dolną sekcją. Testowałem to tylko w Safari, Firefoxie i IE (najnowsze wersje każdego z nich wiosną 2010), ale zadziałało we wszystkich.
Jedynym problemem, jaki miał, było to, że pierwsza tabela nie mogła zostać zweryfikowana bez treści (walidator W3.org - XHTML 1.0 ścisły), a kiedy dodałem jedną bez treści, powoduje to pusty wiersz. Możesz użyć CSS, aby nie było to widoczne, ale nadal zajmuje to miejsce na stronie.
źródło
display: none;
, nie musi zajmować miejsca na ekranie , chyba że masz na myśli miejsce w źródle ..?To rozwiązanie działa w Chrome 35, Firefox 30 i IE 11 (nie testowano innych wersji)
Czysty CSS: http://jsfiddle.net/ffabreti/d4sope1u/
Wszystko jest ustawione do wyświetlenia: blok, stół wymaga wysokości:
źródło
Przyprawiało mnie to o ogromne bóle głowy, gdy próbowałem wdrożyć taką siatkę w naszej aplikacji. Wypróbowałem wszystkie dostępne techniki, ale każda z nich miała problemy. Najbliżej mnie było użycie wtyczki jQuery, takiej jak Flexigrid (spójrz na http://www.ajaxrain.com alternatyw ), ale wydaje się, że nie obsługuje stuprocentowo szerokich tabel, czego potrzebowałem.
Skończyło się na tym, że skręciłem własne; Firefox obsługuje
tbody
elementy przewijane , więc przeglądałem i użyłem odpowiedniego CSS (ustawienie wysokości, przepełnienia itp ... zapytaj, czy chcesz więcej szczegółów), aby przewijać, a następnie dla innych przeglądarek użyłem dwóch oddzielnych tabel do użycia,table-layout: fixed
które używają rozmiaru algorytm, który gwarantuje, że nie przekroczy podanego rozmiaru (normalne tabele rozszerzają się, gdy zawartość jest zbyt szeroka, aby pasowała). Dając obu tabelom identyczne szerokości, udało mi się wyrównać ich kolumny. Zawijałem drugi w zestawie div do przewijania i dzięki odrobinie jiggery z marginesami itp. Udało mi się uzyskać wygląd i styl, który chciałem.Przepraszamy, jeśli ta odpowiedź brzmi trochę niejasno w niektórych miejscach; Piszę szybko, bo nie mam dużo czasu. Zostaw komentarz, jeśli chcesz, żebym dalej się rozwijał!
źródło
Oto kod, który naprawdę działa dla IE i FF (przynajmniej):
Zmieniłem oryginalny kod, aby był bardziej przejrzysty, a także, aby działał dobrze w IE i FF ..
Oryginalny kod TUTAJ
źródło
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
Oto moja alternatywa. Używa również różnych DIV dla nagłówka, treści i stopki, ale jest zsynchronizowany do zmiany rozmiaru okna oraz z wyszukiwaniem, przewijaniem, sortowaniem, filtrowaniem i pozycjonowaniem:
Moje listy CD
Kliknij przycisk Jazz, Classical ..., aby zobaczyć tabele. Jest skonfigurowany tak, że jest odpowiedni, nawet jeśli JavaScript jest wyłączony.
Wydaje się OK w IE, FF i WebKit (Chrome, Safari).
źródło
Przepraszam, nie przeczytałem wszystkich odpowiedzi na twoje pytanie.
Tak, oto rzecz, której chcesz (już zrobiłem)
Możesz użyć dwóch tabel o tej samej nazwie klasy do podobnego stylu, jednej tylko z nagłówkiem tabeli, a drugiej z wierszami. Teraz umieść tę tabelę wewnątrz div o stałej wysokości z overflow-y: auto OR scroll.
źródło
Główny problem, jaki miałem z powyższymi sugestiami, polegał na tym, że mogłem podłączyć tableorter.js ORAZ móc przesuwać nagłówki tabeli ograniczonej do określonego maksymalnego rozmiaru. W końcu natknąłem się na wtyczkę jQuery.floatThead, która zapewniała pływające nagłówki i pozwalała sortować dalej.
Ma również ładną stronę porównawczą pokazującą siebie w porównaniu z podobnymi wtyczkami .
źródło
Live JsFiddle
Jest to możliwe tylko z HTML i CSS
źródło
Jeśli możesz użyć JavaScript tutaj, to moje rozwiązanie Utwórz tabelę o stałej szerokości we wszystkich kolumnach (pikselach!), Dodaj klasę Scrollify do tabeli i dodaj tę wysokość javascript + jquery 1.4.x w css lub style!
Testowano w: Opera, Chrome, Safari, FF, IE5.5 (błąd Epic script ), IE6, IE7, IE8, IE9
Edycja: stała wysokość.
źródło
Robię to za pomocą javascript (brak biblioteki) i CSS - treść tabeli przewija się wraz ze stroną, a tabela nie musi mieć stałej szerokości ani wysokości, chociaż każda kolumna musi mieć szerokość. Możesz także zachować funkcjonalność sortowania.
Gruntownie:
W HTML utwórz elementy div kontenera, aby ustawić wiersz nagłówka tabeli i treść tabeli, a także utwórz element div „maska”, aby ukryć treść tabeli, gdy przewija się ona poza nagłówek
W CSS przekonwertuj części tabeli na bloki
W Javascript pobierz szerokość tabeli i dopasuj szerokość maski ... pobierz wysokość zawartości strony ... zmierz pozycję przewijania ... zmień CSS, aby ustawić pozycję wiersza nagłówka tabeli i wysokość maski
Oto javascript i DEMO jsFiddle.
źródło
Dla mnie nic związanego z przewijaniem naprawdę nie działało, dopóki nie usunąłem szerokości z tabeli CSS. Pierwotnie tabela CSS wyglądała następująco:
Jak tylko usunąłem szerokość: 100%; wszystkie funkcje przewijania zaczęły działać.
źródło
Jeśli masz wystarczająco niskie standardy;), możesz umieścić tabelę, która zawiera tylko nagłówek bezpośrednio nad tabelą, która ma tylko treść. Nie będzie się przewijać w poziomie, ale jeśli tego nie potrzebujesz ...
źródło