Jak wyświetlić tabele na telefonie komórkowym za pomocą Bootstrap?

90

Moje stoły wyświetlają się dobrze na komputerze, ale kiedy próbuję wyświetlić wersję mobilną, mój stół jest zbyt szeroki, aby zmieścić się na ekranie urządzenia mobilnego. Używam responsywnego układu.

Jak ustawić szerokości tabel w widoku mobilnym? Jakie są inne możliwości prezentowania danych tabelarycznych w widokach mobilnych za pomocą Bootstrap?

ganders
źródło
2
Zauważyłem, że Bootstrap 3.0 będzie przede wszystkim mobilny. Czy ktoś myśli, że rozwiąże ten „problem” mobilnych stołów?
Tabele nadal wydają się być takie same w Bootstrap 3. :(
Giles Roberts,
@ ta.speot.is Są teraz lepsze niż w kandydatach do wydania. Wszystkie przykłady mają jednak tylko 4 kolumny. Nadal nie działa zbyt dobrze przy szerokich stołach. Skończyło się na rozwiązaniu ze stałą pierwszą kolumną i przewijaniem całej reszty.
Giles Roberts
@ ta.speot.is Właśnie zobaczyłem poniżej Twoją odpowiedź. Nie zauważono, że Bootstrap 3 ma klasę odpowiadającą tabeli. Działa dobrze, jeśli nie potrzebujesz, aby niektóre kolumny były zawsze widoczne.
Giles Roberts

Odpowiedzi:

123

Bootstrap 3 wprowadza responsywne tabele :

<div class="table-responsive">
  <table class="table">
    ...
  </table>
</div>

Bootstrap 4 jest podobny, ale z większą kontrolą dzięki kilku nowym klasom :

... responsywny we wszystkich rzutniach ... z .table-responsive. Lub wybierz maksymalny punkt przerwania, z którym ma być responsywna tabela do przy użyciu .table-responsive{-sm|-md|-lg|-xl}.

Podziękowania dla Jasona Bradleya za dostarczenie przykładu:

Tabele responsywne

ta.speot.is
źródło
6
Dziękuję Ci. Podobnie jak 99,9% ludzi nie zawracałem sobie głowy czytaniem dokumentacji aktualizacji. Chyba powinienem.
David Bélanger
1
Rzeczywiście jest ! Poza tym robi to, co chciałem, więc dla mnie to 2 w 1!
David Bélanger
Co dokładnie robi table-responsiveklasa? Dokumentacja Bootstrap mówi „aby przewijać w poziomie”, ale nie zauważam różnicy związanej z przewijaniem. Jedyną różnicą, którą zauważam, jest to, że stół ma obramowanie na zewnątrz, gdy ma określony rozmiar ekranu ( jak widać w przykładzie ).
Dennis
5
@ ta.speot.is Zrozumiałem, że źle przeczytałem dokumentację i nieprawidłowo użyłem klasy. Dodawałem .table-responsivedo samego stołu (np. <table class="table table-responsive">), Zamiast owijać stół .table-responsive, co nawet wskazałeś w swoim przykładzie.
Dennis
1
@PirateApp Użyj hidden-*w tdkolumnach, które chcesz ukryć getbootstrap.com/docs/3.3/css/#responsive-utilities
ta.speot.is
68

Możesz również rozważyć wypróbowanie jednego z tych podejść, ponieważ większe stoły nie są zbyt przyjazne na urządzeniach mobilnych, nawet jeśli to działa:

http://elvery.net/demo/responsive-tables/

Mam słabość do „No More Tables”, ale to oczywiście zależy od twojej aplikacji.

Akordy
źródło
3
Fantastyczny link i trzy naprawdę świetne rozwiązania! Musiałem wygooglować swoją drogę powrotną do tego pytania, aby zagłosować za twoją odpowiedzią. Dzięki!
Simon
2
Odpowiedź, która składa się wyłącznie z linku, to zła etykieta przepełnienia stosu. Strona mogłaby zniknąć, zawartość strony może się zmienić, odpowiedź nie jest od razu widoczna, nie można jej poprawić i tak dalej. A tak przy okazji, odsyłacz nie wskazuje już poprawnej treści.
Dennis
1
@Dennis ma rację. Opisz swoją odpowiedź, aby podsumować zawartość odsyłacza, i zachowaj link również do prezentacji i dalszych szczegółów. Mimo to otrzymujesz moje poparcie, ponieważ link jest bardzo interesujący. Twoje zdrowie.
Mario Awad
0

Po prawie 1 miesiącu poszukiwań znalazłem poniższy kod, który działa bardzo pięknie iw 100% idealnie na mojej stronie. Aby sprawdzić podgląd, jak to działa, możesz sprawdzić z linku. https://www.jobsedit.in/state-government-jobs/

KOD CSS -----

@media only screen and (max-width: 500px)  {
    .resp table  { 
        display: block ; 
    }   
    .resp th  { 
        position: absolute;
        top: -9999px;
        left: -9999px;
        display:block ;
    }   
     .resp tr { 
    border: 1px solid #ccc;
    display:block;
    }   
    .resp td  { 
        /* Behave  like a "row" */
        border: none;
        border-bottom: 1px solid #eee; 
        position: relative;
        width:100%;
        background-color:White;
        text-indent: 50%; 
        text-align:left;
        padding-left: 0px;
        display:block;      
    }
    .resp  td:nth-child(1)  {
        border: none;
        border-bottom: 1px solid #eee; 
        position: relative;
        font-size:20px;
        text-indent: 0%;
        text-align:center;
}   
    .resp td:before  { 
        /* Now like a table header */
        position: absolute;
        /* Top/left values mimic padding */
        top: 6px;
        left: 6px;
        width: 45%; 
        text-indent: 0%;
        text-align:left;
        white-space: nowrap;
        background-color:White;
        font-weight:bold;
    }
    /*
    Label the data
    */
    .resp td:nth-of-type(2):before  { content: attr(data-th) }
    .resp td:nth-of-type(3):before  { content: attr(data-th) }
    .resp td:nth-of-type(4):before  { content: attr(data-th) }
    .resp td:nth-of-type(5):before  { content: attr(data-th) }
    .resp td:nth-of-type(6):before  { content: attr(data-th) }
    .resp td:nth-of-type(7):before  { content: attr(data-th) }
    .resp td:nth-of-type(8):before  { content: attr(data-th) }
    .resp td:nth-of-type(9):before  { content: attr(data-th) }
    .resp td:nth-of-type(10):before  { content: attr(data-th) }
}

KOD HTML --

<table>
<tr>
<td data-th="Heading 1"></td>
<td data-th="Heading 2"></td>
<td data-th="Heading 3"></td>
<td data-th="Heading 4"></td>
<td data-th="Heading 5"></td>
</tr>
</table>
santosh kumar
źródło