2012-01-10 178 views
40

我試圖將這個問題花費數月時間,Google並沒有幫助我。我試圖在表中標記<td><th>之間的空格,但是當我這樣做時,它會在外部進行空格。因此,該表與其他任何內容都不是內聯的。所以它看起來像表格有一些填充。僅限於CSS表格邊框間距

我似乎無法找到解決方案。

Here是問題

+0

有多遠你編碼您可以加入一些的jsfiddle? – 2012-01-10 15:54:43

回答

18

有同樣的問題,邊框間距屬性被添加至存儲表空間爲好,據我所知的一個例子,有WASN’噸反正它限制爲僅‘的裏面’,所以我就用透明邊框改爲:

table td { 
    border-left: 1em solid transparent; 
    border-top: 1em solid transparent; 
} 

這臺‘邊框間距’正常,除了有’小號‘不需要表格頂部和左側有210個間距。

table td:first-child { 
    border-left: 0; 
} 

選擇第一列。

table tr:first-child td { 
    border-top: 0; 
} 

選擇第一行的td元素(假設該表的頂部與TR元件開始,對第相應改變)。

+4

雖然這是一個聰明的技巧,但對於任何已經使用邊框屬性來定義單元格樣式的人來說,這並不是真的有用。 – animuson 2013-08-17 01:57:16

+7

如果單元格具有背景,則不起作用。 – vsync 2014-09-14 12:18:46

+0

@vsync正確 - 透明邊框只顯示單元格的背景顏色。所以它看起來像單元格填充越來越大。 – HughHughTeotl 2015-02-25 20:48:48

1

使用負邊距和正邊距填充的容器。

#container { 
    box-sizing: border-box; /* avoids exceeding 100% width */ 
    margin: 0 auto; 
    max-width: 1024px; 
    padding: 0 10px; /* fits table overflow */ 
    width: 100%; 
} 

table { 
    border-collapse: separate; 
    border-spacing: 10px; 
    margin: 0 -10px; /* ejects outer border-spacing */ 
    min-width: 100%; /* in case content is too short */ 
} 

td { 
    width: 25%;  /* keeps it even */ 
} 

只要確保你有大量的內容爲它表延伸到100%的寬度,否則這將是20像素太窄。

更多信息:svachon.com/blog/inside-only-css-table-border-spacing/

+1

這不適用於本身不擴展到100%寬度的表格。請參閱http://jsfiddle.net/EXe8z/(只截斷最後兩列)。你最終會得到右側的三重填充和左側的正常填充。 – animuson 2013-08-17 01:51:32

+1

我已經在回答中說過這一點:「只要確保你有足夠的內容就可以將桌子拉伸至100%寬度」。我使用表建立的大多數應用程序都具有超過單位數字長度的內容。 – 2013-12-28 21:44:39

8

什麼史蒂芬瓦尚說,類似的,陰性切緣可能是你最好的選擇。

或者,您可以使用calc()來解決問題。

CSS:

/* border-collapse and border-spacing are css equivalents to <table cellspacing="5"> */ 

.boxmp { 
    width:100%; 
    border-collapse:separate; 
    border-spacing:5px 0; 
} 

/* border-spacing includes the left of the first cell and the right of the last cell 
    negative margin the left/right and add those negative margins to the width 
    ios6 requires -webkit- 
    android browser doesn't support calc() 
    100.57% is the widest that I could get without a horizontal scrollbar at 1920px wide */ 

.boxdual { 
    margin:0 -5px; 
    width:100.57%; 
    width:-webkit-calc(100% + 10px); 
    width:calc(100% + 10px); 
} 

只需添加你採取任何保證金關閉或寬度將太窄(100%是不夠寬)。

+0

我認爲這是現在廣泛支持calc的最佳答案。 – Andrew 2016-04-12 12:38:05

11

我找到了一種方法來做到這一點與消極的利潤率,並提高了史蒂芬的答案,因爲它可以讓你的表,即使它沒有足夠的內容佔用100%。解決的辦法是使表寬度100%,並使用一個負餘量含元件上:

#container { 
    margin: 0 -10px; 
} 
table { 
    border-collapse: separate; 
    border-spacing: 10px; 
} 
td, th { 
    background-color: #ccf; 
    padding: 5px; 
} 

See it as a jsFiddle

+0

不適用於100%寬度的表格。 – vsync 2014-09-14 12:21:54

+0

@vsync你的意思是什麼?它仍然適用於我(在Firefox中)在jsFiddle中,我以100%的表格寬度鏈接。 – 2014-09-15 13:34:33

+0

對不起,是因爲你正在用'div'包裝它,所以它的工作原理,但對於桌子本身來說,雙方的負邊緣將不起作用..我沒有解釋我自己,我的壞 – vsync 2014-09-15 15:46:10

9

我優化的透明邊界的解決方案,因此它已沒有更多的斜切內邊界。

1)讓表填寫水平和摺疊邊界:

table { 
    width: 100%; 
    border-collapse: collapse; 
} 

2)設置的表格單元格所有邊界與寬度0和防止背景繪製邊界的下方。

td { 
    border: 0px solid transparent; 
    background-clip: padding-box; 
} 

3)設置有透明邊界的內部空間,但不第一行和列。

tr > td + td { 
    border-left-width: 10px; 
} 

tr + tr > td { 
    border-top-width: 10px; 
} 

這裏是一個jsbin

+0

這就是答案! – incleaf 2017-02-09 04:55:26

0

下面是一個簡單和乾淨的解決方案。

HTML

<div class="column-container"> 
    <div class="column-children-wrapper"> 
    <div class="column">One</div> 
    <div class="column">Two</div> 
    <div class="column">Three</div> 
    <div class="column">Four</div> 
    </div> 
</div> 

CSS

.column-container { 
    display: table; 
    overflow: hidden; 
} 

.column-children-wrapper { 
    border-spacing: 10px 0; 
    margin-left: -10px; 
    margin-right: -10px; 
    background-color: blue; 
} 

.column { 
    display: table-cell; 
    background-color: red; 
} 

https://jsfiddle.net/twttao/986t968c/

+0

但'

'是數據網格的有用語義標記。 – Walf2017-10-04 06:24:08