Áp dụng kiểu cho chỉ cấp độ đầu tiên của thẻ td


136

Có cách nào để áp dụng kiểu của Class cho chỉ một cấp thẻ td không?

<style>.MyClass td {border: solid 1px red;}</style>

<table class="MyClass">
  <tr>
    <td>
      THIS SHOULD HAVE RED BORDERS
    </td>
    <td>
      THIS SHOULD HAVE RED BORDERS
      <table><tr><td>THIS SHOULD NOT HAVE ANY</td></tr></table>
    </td>
  </tr>
</table>

Câu trả lời:


221

Có cách nào để áp dụng kiểu của Class cho chỉ một cấp thẻ td không?

* :

.MyClass>tbody>tr>td { border: solid 1px red; }

Nhưng! Bộ >chọn con trực tiếp '' không hoạt động trong IE6. Nếu bạn cần hỗ trợ trình duyệt đó (điều mà bạn có thể làm, than ôi), tất cả những gì bạn có thể làm là chọn riêng phần tử bên trong và bỏ đặt kiểu:

.MyClass td { border: solid 1px red; }
.MyClass td td { border: none; }

* Lưu ý rằng ví dụ đầu tiên tham chiếu một tbodyyếu tố không được tìm thấy trong HTML của bạn. Nó đáng lẽ phải có trong HTML của bạn, nhưng các trình duyệt thường ổn với việc loại bỏ nó ... họ chỉ cần thêm nó vào phía sau hậu trường.


1
Tôi rùng mình khi nhớ về một thế giới nơi chúng tôi phải gỡ lỗi cho IE6. Bài đăng này mang lại cảm giác ớn lạnh ..
webfish

35

Làm thế nào về việc sử dụng CSS: lớp giả đầu tiên:

.MyClass td:first-child { border: solid 1px red; }

16
Điều đó sẽ không làm việc. Điều này chọn tất cả tdtrẻ em trong cây con .MyClassđầu tiên là phần tử chứa của chúng, và do đó cũng sẽ tạo kiểu bên trong td.
Lazlo

1
Làm thế nào điều này có rất nhiều upvote? :first-childchắc chắn sẽ không có hiệu ứng mà OP đang tìm kiếm.
plong0

8

Phong cách này:

table tr td { border: 1px solid red; }
td table tr td { border: none; }

đưa cho tôi:

này http://img12.imageshack.us/img12/4477/bnings.png

Tuy nhiên, sử dụng một lớp học có lẽ là cách tiếp cận đúng đắn ở đây.


Sử dụng một lớp trên mỗi phần tử td có thể hơi dư thừa, bạn có thể sử dụng một lớp trên phần tử bảng chứa, và sau đó bạn vẫn phải loại trừ các mức bảng thứ hai - ví dụ ví dụ đầu tiên của bạn là chính xác.
thomasrutter

6

Chỉ cần tạo một bộ chọn cho các bảng bên trong MyClass.

.MyClass td {border: solid 1px red;}
.MyClass table td {border: none}

(Để áp dụng chung cho tất cả các bảng bên trong, bạn cũng có thể làm table table td.)


3

Tôi muốn đặt chiều rộng của cột đầu tiên của bảng và tôi thấy điều này đã hoạt động (trong FF7) - cột đầu tiên rộng 50px:

#MyTable>thead>tr>th:first-child { width:50px;}

nơi đánh dấu của tôi là

<table id="MyTable">
 <thead>
  <tr>
   <th scope="col">Col1</th>
   <th scope="col">Col2</th>
  </tr>
 </thead>
 <tbody>
   ...
 </tbody>
</table>

3

Tôi nghĩ rằng, nó sẽ làm việc.

.Myclass tr td:first-child{ }

 or 

.Myclass td:first-child { }

Có phải cái đầu tiên chọn cái đầu tiên tdcủa mỗi hàng và cái thứ hai chỉ chọn cái đầu tiên tdcủa trang không?
Joshua Pinter

@JoshuaPinter bạn cơ bản là chính xác về cái đầu tiên. Nói chung, td:first-childchọn bất kỳ tdphần tử nào là phần tử đầu tiên bên dưới phần tử mẹ của nó (bất kể phần tử mẹ của nó là gì). Điều thứ nhất tr td:first-childbổ sung điều kiện là tdcũng phải được lồng bên dưới một tr(ở bất kỳ cấp độ nào, không nhất thiết phải là con cháu trực tiếp). tr > td:first-childchọn một tdđó là phần tử đầu tiên trực tiếp dưới a tr. Vì vậy, cuối cùng :first-childkhông có gì để làm với một giải pháp cho câu hỏi của OP và câu trả lời này là không chính xác.
plong0

2

Tôi đoán bạn có thể thử

table tr td { color: red; }
table tr td table tr td { color: black; }

Hoặc là

body table tr td { color: red; }

trong đó 'body' là công cụ chọn cho cha mẹ của bảng của bạn

Nhưng các lớp học rất có thể là cách đúng đắn để đi đến đây.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.