Chcę użyć CSS text-overflow
w komórce tabeli, tak aby jeśli tekst był zbyt długi, aby zmieścił się w jednym wierszu, będzie przycinany wielokropkiem zamiast zawijania do wielu wierszy. czy to możliwe?
Próbowałem tego:
td {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
white-space: nowrap
Wygląda jednak na to, że tekst (i jego komórka) stale się rozszerzają w prawo, przesuwając całkowitą szerokość tabeli poza szerokość kontenera. Bez tego jednak tekst nadal zawija się do wielu linii, gdy uderza o krawędź komórki.
overflow
dobrze. Spróbuj wstawić div do komórki i stylizować div.Odpowiedzi:
Aby wyciąć tekst z elipsą, gdy przepełnia komórkę tabeli, musisz ustawić
max-width
właściwość CSS dla każdejtd
klasy, aby przepełnienie działało. Nie są wymagane żadne dodatkowe elementy div układuDla responsywnych układów; użyj
max-width
właściwości CSS, aby określić efektywną minimalną szerokość kolumny, lub po prostu użyjmax-width: 0;
dla nieograniczonej elastyczności. Ponadto tabela zawierająca będzie zwykle wymagać określonej szerokości,width: 100%;
a kolumny zwykle będą miały szerokość ustawioną jako procent całkowitej szerokościHistoryczny: W przypadku IE 9 (lub mniejszej) musisz mieć to w swoim HTML, aby rozwiązać problem z renderowaniem specyficzny dla IE
źródło
width: 100%;
amin-width: 1px;
komórka będzie zawsze możliwie najszersza i użyje wielokropka, aby obciąć tekst tylko wtedy, gdy jest to konieczne (nie wtedy, gdy szerokość elementu osiągnie określony rozmiar) - jest to bardzo przydatne w przypadku responsywnych układów.display: table-cell
naprawdę, ale nie wtedy, gdymax-width
jest zdefiniowany w procentach (%). Testowane na FF 32table-layout: fixed
elementu z,display: table
aby załatwić sprawęOkreślenie
max-width
lub stała szerokość nie działa we wszystkich sytuacjach, a tabela powinna być płynna i automatycznie rozmieszczać komórki. Do tego służą tabele.Użyj tego: http://jsfiddle.net/maruxa1j/
HTML:
CSS:
Działa na IE9 i innych przeglądarkach.
źródło
<span>
elementami.display: block
nieDlaczego tak się dzieje?
Wygląda na to, że ta sekcja na w3.org sugeruje, że przepełnienie tekstu dotyczy tylko elementów blokowych :
MDN mówi to samo .
Ten jsfiddle ma twój kod (z kilkoma modyfikacjami debugowania), który działa dobrze, jeśli jest zastosowany do
div
zamiasttd
. Ma również jedyne obejście, o jakim mogłem szybko pomyśleć, owijając zawartość blokutd
zawierającegodiv
. Jednak dla mnie wygląda to na „brzydkie” znaczniki, więc mam nadzieję, że ktoś inny ma lepsze rozwiązanie. Kod do przetestowania wygląda następująco:źródło
W przypadku, gdy nie chcesz ustawiać stałej szerokości na cokolwiek
Poniższe rozwiązanie pozwala mieć zawartość komórki tabeli, która jest długa, ale nie może wpływać na szerokość tabeli nadrzędnej ani na wysokość wiersza nadrzędnego. Na przykład, jeśli chcesz mieć tabelę,
width:100%
która nadal stosuje funkcję automatycznego rozmiaru do wszystkich innych komórek. Przydatne w siatkach danych z kolumną „Notatki” lub „Komentarz” czy coś takiego.Dodaj te 3 reguły do swojego CSS:
Sformatuj HTML w następujący sposób w dowolnej komórce tabeli, w której chcesz dynamiczne przepełnienie tekstu:
Dodatkowo zastosuj pożądaną
min-width
(lub wcale) do komórki tabeli.Oczywiście skrzypce: https://jsfiddle.net/9wycg99v/23/
źródło
max-width: X
, mogą one być szersze - myślałem, że to zdisplay: flex
powodu użycia, ale usunąłem to i nie widzę żadnej różnicy ...Wydaje się, że jeśli podasz
table-layout: fixed;
natable
elemencie, a następnie swoje styletd
powinny obowiązywać. Wpłynie to również na wielkość komórek.Sitepoint omawia trochę metody układania tabeli tutaj: http://reference.sitepoint.com/css/tableformatting
źródło
Jeśli chcesz, aby tabela automatycznie się układała
Bez użycia
max-width
lub procentowych szerokości kolumntable-layout: fixed
itp.https://jsfiddle.net/tturadqq/
Jak to działa:
Krok 1: Po prostu pozwól, aby automatyczny układ tabeli spełnił swoje zadanie.
Gdy jest co najmniej jedna kolumna z dużą ilością tekstu, pozostałe kolumny zostaną maksymalnie zmniejszone, a następnie zawinięte w tekst długich kolumn:
Krok 2: Zawiń zawartość komórki w div, a następnie ustaw div na
max-height: 1.1em
(dodatkowe 0,1em dotyczy znaków, które renderują się nieco poniżej podstawy tekstu, takich jak ogon „g” i „y”)
Krok 3: Ustaw
title
na divsJest to dobre ze względu na dostępność i jest konieczne w przypadku małej sztuczki, której użyjemy za chwilę.
Krok 4: Dodaj CSS
::after
do divTo trudna sprawa. Ustawiamy CSS
::after
, za pomocącontent: attr(title)
, a następnie umieszczamy go na div i ustawiamytext-overflow: ellipsis
. Pokolorowałem go tutaj na czerwono, aby było jasne.(Zwróć uwagę, jak długa kolumna ma teraz elipsę ogonową)
Krok 5: Ustaw kolor tekstu div na
transparent
I gotowe!
źródło
<a>
zamiast<div>
w komórce tabeli. Dodanieword-break: break-all;
rozwiązuje problem. Przykład: jsfiddle.net/de0bjmqvGdy jest w procentowej szerokości tabeli lub nie można ustawić stałej szerokości w komórce tabeli. Możesz złożyć wniosek,
table-layout: fixed;
aby działał.źródło
Zawiń zawartość komórki w bloku elastycznym. Jako bonus, komórka auto dopasowuje widoczną szerokość.
źródło
white-space: nowrap;
dochild
klasy.Rozwiązałem to za pomocą absolutnie umieszczonego div wewnątrz komórki (względny).
Otóż to. Następnie możesz dodać wartość div: do div lub wyśrodkować ją pionowo:
Aby uzyskać trochę miejsca po prawej stronie, możesz nieco zmniejszyć maksymalną szerokość.
źródło
W moim przypadku działało to zarówno w przeglądarce Firefox, jak i Chrome:
źródło
To jest wersja, która działa w IE 9.
http://jsfiddle.net/s27gf2n8/
źródło