2009-11-17 12 views
50

Mam tabelę z kolorowym tłem i muszę określić dopełnienie między tabelą a jej zawartością, I.E. komórki.
Znacznik tabeli prawdopodobnie nie akceptuje wartości dopełnienia.
Firebug pokazuje tabelę i układ tbody z padding 0, ale nie akceptuje żadnej wprowadzonej wartości, więc domyślam się, że po prostu nie mają właściwości padding.
Ale chodzi o to, że chcę mieć taki sam podział między komórkami niż górne komórki z blatem i dolnymi komórkami z dolnym stołem.
Ponownie, to, czego chcę, to nie dopełnianie komórek.Jak określić dopełnienie tabeli w CSS? (tabela, bez wypełniania komórek)

EDIT: Dzięki temu, czego teraz potrzebowałem, zdałem sobie sprawę, był odstęp między wierszami lub jego odpowiednik html, przestrzeń między komórkami.
Ale z jakiegoś powodu nie robią nic na stronie, nad którą pracuję.
Oba działają świetnie na oddzielnym kodzie HTML, ale na stronie nie.
Pomyślałem, że może to być jakiś styl nadpisujący właściwość, ale przestrzeń między komórkami i wbudowane odstępy między wierszami nie powinny zostać nadpisane, prawda?
(Używam firefox)

EDYCJA 2: Nie, wypełnianie TD NIE jest tym, czego potrzebuję. W przypadku padów TD, górne i dolne wyściółki sąsiednich komórek sumują się, więc istnieje podwójna przestrzeń (pad faktycznie) między dwiema komórkami niż między górną komórką a górną krawędzią stołu. Chcę mieć dokładnie taką samą odległość między nimi.

Odpowiedz

36

Najprostszym/najlepiej zalecaną metodą jest użycie <table cellspacing="10">

Sposób css: border-spacing (nie obsługiwane przez IE nie sądzę)

<!-- works in firefox, opera, safari, chrome --> 
 
    <style type="text/css"> 
 
    
 
    table.foobar { 
 
    \t border: solid black 1px; 
 
    \t border-spacing: 10px; 
 
    } 
 
    table.foobar td { 
 
    \t border: solid black 1px; 
 
    } 
 
    
 
    
 
    </style> 
 
    
 
    <table class="foobar" cellpadding="0" cellspacing="0"> 
 
    <tr><td>foo</td><td>bar</td></tr> 
 
    </table>

Edycja: jeśli chcesz tylko umieścić zawartość komórki, a nie spację, możesz po prostu użyć

<table cellpadding="10"> 

LUB

td { 
    padding: 10px; 
} 
+7

border-spacing jest obsługiwany w IE8, ale nie we wcześniejszych wersjach. border-collapse może być użyty do osiągnięcia 'cellspacing =" 0 "' w różnych przeglądarkach, ale nie wyższych wartości. – bobince

+0

Oh! TO jest klucz! Zastanawiałem się, czy nie było żadnej innej własności działającej na odstępach ... i to jest granica-zawalenie! Dzięki! – Petruza

+0

odstępy między ramkami nie działają w późniejszych wersjach Firefox – evanmcd

1

Możesz wypróbować właściwość border-spacing. To powinno robić, co chcesz. Ale może chcesz zobaczyć to answer.

4

Nie możesz ... Może, jeśli zamieściłeś obrazek pożądanego efektu, jest inny sposób, aby to osiągnąć.

Na przykład można zawinąć całą tabelę w DIV i ustawić dopełnienie na div.

23

Można ustawić margines dla tabeli. Alternatywnie, zawiń tabelę w div i użyj dopełnienia div.

5

Zabawne, właśnie to robiłem wczoraj. Po prostu trzeba to w pliku css

.ablock table td { 
    padding:5px; 
} 

następnie owinąć tabelę w odpowiednim div

<div class="ablock "> 
<table> 
    <tr> 
    <td> 
+0

Najprostsze i najbardziej kuloodporne podejście. – Rantiev

1

CSS naprawdę nie pozwalają to zrobić na poziomie tabeli. Generalnie określam cellspacing="3" kiedy chcę osiągnąć ten efekt. Oczywiście nie jest to rozwiązanie css, więc weź to za to, co jest warte.

2

W przypadku css tabela może mieć wypełnienie niezależnie od jej komórek.

Własność padding nie jest dziedziczona przez potomka.

Więc określenia:

table { 
    padding: 5px; 
} 

powinno działać. Możesz również wyraźnie powiedzieć przeglądarce, jak należy podkładać (lub w tym przypadku nie podkładać) swoje komórki.

td { 
    padding: 0px; 
} 

EDIT: Nie jest obsługiwany przez IE8. Przepraszam.

+0

Nie widziałem paddingu jako własności tabeli w dowolnym miejscu, prawda? – Petruza

+1

Wypełnienie nie jest właściwością HTML tabeli, ale można ją określić w CSS. Jednak nie wszystkie przeglądarki będą go obsługiwać. – MPelletier

21

Oto co należy rozumieć temat tabel ... Oni nie są drzewo zagnieżdżonych niezależnych elementów. Są pojedynczym złożonym elementem. Podczas gdy poszczególne niszczyciele zachowują się mniej więcej tak, jak elementy bloków CSS, elementy pośrednie (wszystko między tabelą a TD, w tym TRs i TBODY) są niepodzielne i nie mieszczą się w ani w linii ani bloku . Żadne losowe elementy HTML nie są dozwolone w tej przestrzeni innego wymiaru, a rozmiar takiej przestrzeni innego wymiaru nie jest w ogóle konfigurowany za pomocą CSS. Tylko własność HTML cellspacing może się do niej dostać, a ta właściwość nie ma analogów w CSS.

Tak więc, aby rozwiązać swój problem, bym sugerować albo otoki DIV jak sugeruje inny plakat, lub jeśli absolutnie muszą zachować to zawarte w tabeli, masz ten brzydki śmieci:

<style> 
    .padded tr.first td { padding-top:10px; } 
    .padded tr.last td { padding-bottom:10px; } 
    .padded td.first { padding-left:10px; } 
    .padded td.last { padding-right:10px; } 
</style> 

<table class='padded'> 
    <tr class='first'> 
     <td class='first'>a</td><td>b</td><td class='last'>c</td> 
    </tr> 
    <tr> 
     <td class='first'>d</td><td>e</td><td class='last'>f</td> 
    </tr> 
    <tr class='last'> 
     <td class='first'>g</td><td>h</td><td class='last'>i</td> 
    </tr> 
</table> 
+1

Możliwe jest również użycie pseudo elementów CSS (: first-child,: last-child) zamiast dodawania (.first, .last) klas. – camcam

+12

Tak, dzisiaj, ale odpowiedziałem na to w 2009 roku! – jpsimons

0
table { 
    border: 1px solid transparent; 
} 
+0

Witamy w stackoverflow! Proszę wyjaśnij swoją odpowiedź. –

+1

Jeśli nie musisz rozróżniać obramowania stołu (to znaczy, nadaj mu kolor), możesz po prostu uczynić krawędź przezroczystą i symulować wypełnienie tuż między granicą tabeli a jej zawartością. Jeśli potrzebujesz rozróżnić granicę tabeli, możesz zasymulować wstawienie tabeli do rodzica DIV z innym kolorem tła. Sprawdź to skrzypce: https://jsfiddle.net/34fq0gru/1/ –

1

jest jeszcze inny trik:

/* Padding on the sides of the table */ 
table th:first-child, .list td:first-child { padding-left: 28px; } 
table th:last-child, .list td:last-child { padding-right: 28px; } 

(tylko zobaczyłem go w mojej obecnej pracy)

0
table { 
    background: #fff; 
    box-shadow: 0 0 0 10px #fff; 
    margin: 10px; 
    width: calc(100% - 20px); 
} 
+0

To pytanie zostało już odebrane i zaakceptowano 7 lat temu. – VDWWD