Mam następujący kod:
<div class="table">
<div class="row">
<div class="cell">Cell</div>
<div class="cell">Cell</div>
</div>
<div class="row">
<div class="cell colspan2">Cell</div>
</div>
</div>
<style>
.table {
display: table;
}
.row {
display: table-row;
}
.cell {
display: table-cell;
}
.colspan2 {
/* What to do here? */
}
</style>
Całkiem proste. Jak dodać colspan (lub odpowiednik colspan) dla elementów z display: table-cell
?
display: table-cell
.Odpowiedzi:
O ile mi wiadomo, brak colspan / rowspan to tylko jedno z ograniczeń
display:table
. Zobacz ten post:http://www.onenaught.com/posts/201/use-css-displaytable-for-layout
źródło
Ponieważ OP nie mówi wprost, że rozwiązanie musi być czystym CSS, będę uparty i dorzucę moje obejście, które wymyśliłem dzisiaj, zwłaszcza, że jest o wiele bardziej eleganckie niż posiadanie tabeli wewnątrz tabeli.
Przykład równa się <table> z dwiema komórkami na wiersz i dwoma wierszami, gdzie komórka w drugim wierszu to td with
colspan="2"
.Przetestowałem to z Iceweasel 20, Firefox 23 i IE 10.
Akcja na żywo (demo) tutaj .
EDYCJA: Doprecyzowałem kod, aby był bardziej przyjazny dla drukarki, ponieważ domyślnie pozostawiają kolory tła. Stworzyłem również rowspan-demo , zainspirowane późną odpowiedzią tutaj.
źródło
<div class="cell"></div>
prac (przynajmniej w przeglądarce Firefox). W przypadku tego projektu należy wypełnić puste komórki. Na przykład, jeśli masz tak, że komórka 7 miała wartość colspan = 3, a komórka 8 była normalna, potrzebowałbyś dwóch pustych komórek między komórkami 7 i 8. Chyba że zaprojektowałbyś coś innego (marginesy? Pojedynczy dostosowany element div?) . Ponadto szerokość 100 pikseli i 5 komórek utrudnia sprawę, ponieważ słowa rozciągają komórki css, a ustawienia przepełnienia nie wydają się robić różnicy. Musisz również przeliczyćwidth
dladiv.colspan>div>div
.div.colspan{border-left:1px solid red}
. Musi być umieszczona gdzieś pod regułą, która ustawia div.colspan bez obramowania, inaczej zostanie nadpisana.Prostsze rozwiązanie, które działa dla mnie w Chrome 30:
Colspan można emulować, używając
display: table
zamiastdisplay: table-row
dla wierszy:Jedyną pułapką jest to, że komórki rzędów ułożonych w stos nie są wyrównane w pionie, ponieważ pochodzą z różnych tabel.
źródło
Jeśli szukasz prostego sposobu CSS na symulację colspana, możesz użyć
display: table-caption
.źródło
Po prostu użyj pliku
table
.Tabela nie jest mile widziana, gdy jest używana do celów układu.
Wygląda to na dane tabelaryczne (wiersze / kolumny danych). Dlatego polecam używanie pliku
table
.Zobacz moją odpowiedź na to pytanie, aby uzyskać więcej informacji:
tworząc to samo z elementami div jako tabelami
źródło
tr
/td
spam nie jest najładniejszym htmlem, ale czy to jedyny powód? Wszyscy mówią, że tabele nie były „przeznaczone” do formatowania, ale sam html nie był „przeznaczony” do wykonywania połowy rzeczy, które uważamy za dopuszczalne według dzisiejszych standardów, w tym aplikacji internetowych.Oto jeden ze sposobów łączenia kolumn w CSS, których użyłem w mojej własnej sytuacji.
https://jsfiddle.net/mb8npttu/
źródło
.colspan
zwhite-space: nowrap;
aby uzyskać wynik chciałem, ale to działało świetnie.Istnieje rozwiązanie, dzięki któremu colspan ma szerokość całej tabeli. Nie możesz użyć tej techniki do kolspan części tabeli.
Kod:
Wyjaśnienie:
Używamy pozycji bezwzględnej na colspan, aby uzyskać pełną szerokość tabeli. Sam stół wymaga pozycji względem siebie. Używamy manekiny do utrzymania wysokości rzędów, pozycja bezwzględna nie jest zgodna z przepływem dokumentu.
Oczywiście możesz również użyć Flexbox i siatki, aby rozwiązać ten problem w dzisiejszych czasach.
źródło
CSS
HTML
Kod
źródło
Można to zrobić za pomocą czystego CSS i wyśrodkowania tekstu na „fałszywej” kolumnie colspan.
Sztuczka polega na ustawieniu wierszy na
position:relative
, następnie umieszczeniu „pustych elementów div” w miejscu, wrow
którym chcesz utworzyćcolspan
(muszą miećheight
, aby działały), ustawieniu miejsca, wcell
którym znajduje się zawartość jakodisplay:grid
, i na końcu zastosowaniuposition:absolute
do elementu wewnątrz komórki (i wyśrodkuj ją tak, jak możesz wyśrodkować każdy inny element absolutny).źródło
Używając odpowiednich klas DIV i atrybutów CSS, możesz naśladować pożądane efekty colspan i rowspan.
Oto CSS
Oto przykładowy kod HTML
Z tego, co widzę w obu pytaniach i większości odpowiedzi, wynika, że ludzie zdają się zapominać, że w każdym danym elemencie div działającym jako „komórka tabeli” można wstawić inny element div działający jak osadzona tabela i rozpocząć proces nad.
*** To nie jest efektowne, ale działa dla tych, którzy szukają tego typu formatowania i chcą uniknąć TABELI. Jeśli jest to LAYOUT DANYCH, TABELE nadal działają w HTML5.
Miejmy nadzieję, że to komuś pomoże.
źródło
<table>
- po prostu ludzie powinni unikać używania go do formatowania wizualnego . Używanie go do wyświetlania danych strukturalnych jest tam, gdzie powinno być używane , chyba że coś innego (na przykład<ul>
jako zwykły przykład) lepiej pasuje do zadania. Po drugie koleś, 4 stoliki. Wprowadzasz interesujące pytanie na stół (rowspan), ale twoja odpowiedź wymaga użycia<table>
zamiast tego. Muszę zobaczyć, jak działa tutaj moje rozwiązanie ...Możesz ustawić pozycję zawartości colspan jako „względną”, a wiersz jako „bezwzględny” w następujący sposób:
źródło
Obecnie nie możesz tego osiągnąć.
AFAIK byłoby to objęte tabelami CSS , specyfikacją, która wydaje się być obecnie w stanie „w toku”.
źródło
Możesz wypróbować to rozwiązanie, w którym dowiesz się, jak zastosować colspan za pomocą div https://codepen.io/pkachhia/pen/JyWMxY
HTML:
CSS:
źródło
Nawet jeśli jest to stare pytanie, chciałbym podzielić się moim rozwiązaniem tego problemu.
Oto skrzypce . Tak naprawdę nie jest to rozpiętość, a rozwiązanie jest nieco hakerskie, ale w niektórych sytuacjach jest przydatne. Testowane na Chrome 46, Firefox 31 i IE 11.
W moim przypadku musiałem przedstawić niektóre dane nietabelaryczne w sposób tabelaryczny, zachowując szerokość kolumn i nadając tytuły podsekcji danych.
źródło
Użyj tabel zagnieżdżonych do zagnieżdżenia rozpiętości kolumn ...
Lub użyj 2 tabel, w których rozpiętość kolumn obejmuje cały wiersz ...
źródło