2013-08-18 147 views
1

我有一個HTML表,我想最後一排排除與.table-bottom類行,並刪除其border-bottom如何在CSS中選擇具有特定類名的元素的「最後一個孩子」?

<table cellpadding="0" cellspacing="0" style="width:752px;" class="table"> 
    <tr class="table-top"><th style="width:40px;">ID</th> <th>Post title</th> <th>Date</th> <th>Owner</th> <th style="width:100px;">Actions</th></tr> 
    <tr class="table-middle"><td>1</td> <td>Test</td> <td>16.7.2013</td> <td>Admin</td> <td>Delete</td></tr> 
    <tr class="table-middle"><td>2</td> <td>Test 2</td> <td>3.8.2013</td> <td>Admin</td> <td>Delete</td></tr> 
    <tr class="table-bottom"><td colspan="5"></td></tr> 
</table> 
.table tr th { 
color:#929191; 
font-weight:bold; 
font-size:14px; 
text-align:left; 
padding-left:19px; 
border-right:1px solid #d7d7d7; 
border-bottom:1px solid #d7d7d7; 
} 
.table tr th:last-child { 
border-right:none; 
} 
.table tr td { 
color:#929191; 
font-weight:bold; 
font-size:12px; 
padding:19px; 
border-right:1px solid #d7d7d7; 
border-bottom:1px solid #d7d7d7; 
} 
.table tr td:last-child { 
border-right:none; 
} 
.table .table-middle:last-of-type td { 
border-bottom:none; 
background:red; 
} 
.table tr.table-middle td:first-child { 
text-align:center; 
} 
.table tr th:first-child { 
text-align:center; 
padding-left:0px; 
} 
.table tr.table-bottom td { 
border-right:none; 
border-bottom:none; 
} 

.table .table-middle:last-of-type td選擇不工作。

這是Fiddle

任何想法?

+0

你也可以在這裏找到類似的問題:http://stackoverflow.com/a/7298062/1725764 –

回答

3

簡短回答:除非您更改HTML結構,否則無法通過CSS來完成。

的更多細節:

:last-of-type僞類,表示這是它在它的父元素的子元素的列表類型的最後一個側邊的元件。

考慮這個選擇器:.table-middle:last-of-type

.table-middle點元素正確,有.table-middle類的元素不是其type的最後一個兄弟姐妹,因爲type術語指的是HTML元素本身,而不是element.class組合。


這裏是工作的解決方案:

HTML

<table cellpadding="0" cellspacing="0" style="width:752px;" class="table"> 
    <thead> 
     <tr> 
      <th style="width:40px;">ID</th> 
      <th>Post title</th> 
      <th>Date</th> 
      <th>Owner</th> 
      <th style="width:100px;">Actions</th> 
     </tr> 
    </thead> 
    <tfoot> 
     <tr> 
      <td colspan="5"></td> 
     </tr> 
    </tfoot> 
    <tbody> 
     <tr> 
      <td>1</td> 
      <td>Test</td> 
      <td>16.7.2013</td> 
      <td>Admin</td> 
      <td>Delete</td> 
     </tr> 
     <tr> 
      <td>2</td> 
      <td>Test 2</td> 
      <td>3.8.2013</td> 
      <td>Admin</td> 
      <td>Delete</td> 
     </tr>   
    </tbody> 
</table> 

CSS

.table tbody tr:last-child td { 
    border-bottom:none; 
    background:red; 
} 

這裏是Fiddle

+1

當最後一行似乎有一個colspan時使用tfoot是一個很好的建議。 – FelipeAls

2

你可以把它簡單得多,而無需使用類都:

HTML:

<table> 
    <tr> 
     <td>...</td> 
     <td>...</td> 
     <td>...</td> 
     <td>...</td> 
     <td>...</td> 
    </tr> 
    <tr> 
     <td>...</td> 
     <td>...</td> 
     <td>...</td> 
     <td>...</td> 
     <td>...</td> 
    </tr> 
    <tr> 
     <td>...</td> 
     <td>...</td> 
     <td>...</td> 
     <td>...</td> 
     <td>...</td> 
    </tr> 
    <tr> 
     <td>...</td> 
     <td>...</td> 
     <td>...</td> 
     <td>...</td> 
     <td>...</td> 
    </tr> 
</table> 

CSS:

table { 
    width: 500px; 
} 
table td { /* style for all the cells between the top and bottom row */ 
    background: red; 
} 
table tr:first-child td { /* style for the cells in the top row */ 
    background: green; 
} 
table tr:last-child td { /* style for the cells in the bottom row */ 
    background: blue; 
} 
table tr:first-child td:first-child, /* first row, first cell */ 
table tr:first-child td:last-child, /* first row, last cell */ 
table tr:last-child td:first-child, /* last row, first cell */ 
table tr:last-child td:last-child { /* last row, last cell */ 
    background: yellow; 
} 

另外,還要檢查working JSFiddle

+0

它不利於選擇最後一個'.table-middle'表格行。 –

+0

的確如此。但是從startpost的代碼中的最後一行表格開始,我認爲它不是必需的。但是這取決於TS決定。 – LinkinTED

+0

感謝boss完美無缺 –

相關問題