Bộ chọn CSS con và con cháu


298

Tôi có một chút nhầm lẫn giữa 2 bộ chọn này.

Liệu các hậu duệ chọn:

div p

chọn tất cả ptrong một divliệu có hay không ngay lập tức? Vì vậy, nếu plà bên trong khác, divnó vẫn sẽ được chọn?

Sau đó, bộ chọn con :

div > p

Có gì khác biệt? Có phải một đứa trẻ có nghĩa là đứa trẻ ngay lập tức ? Ví dụ.

<div><p>

đấu với

<div><div><p>

cả hai sẽ được chọn, hay không?


Tôi đã cố gắng giải thích chi tiết ở đây , có thể tham khảo nếu nó hữu ích cho bất cứ ai ...
Ông Alien

Câu trả lời:


468

Chỉ cần nghĩ về những từ "trẻ em" và "hậu duệ" trong tiếng Anh:

  • Con gái tôi vừa là con tôi vừa là con cháu của tôi
  • Cháu gái tôi không phải là con tôi, nhưng cháu là con cháu của tôi.

49
Một lưu ý quan trọng là bộ chọn con sẽ nhanh hơn bộ chọn con cháu, có thể có ảnh hưởng rõ ràng trên các trang có 1000 phần tử DOM.
Jake Wilson

Câu trả lời hay, nhưng tôi chỉ đơn giản là thêm vào câu trả lời trực tiếp vào ví dụ của anh ấy trong câu hỏi - chỉ để làm cho nó rõ ràng một cách lố bịch.
JoeCool


23

Về cơ bản, " ab " chọn tất cả b bên trong a, trong khi " a> b " chọn b là những gì chỉ là con của a , nó sẽ không chọn b là con của b là con của a .

Ví dụ này minh họa sự khác biệt:

div span{background:red}
div>span{background:green}

<div><span>abc</span><span>def<span>ghi</span></span></div>

Màu nền của abcdef sẽ là màu xanh lá cây, nhưng ghi sẽ có màu nền đỏ.

QUAN TRỌNG: Nếu bạn thay đổi thứ tự của các quy tắc thành:

div>span{background:green}
div span{background:red}

Tất cả các chữ cái sẽ có nền màu đỏ, vì bộ chọn con cháu cũng chọn con.


Phần "Quan trọng" mà bạn đã thêm làm cho câu trả lời này hoàn tất. Cảm ơn!
Aakash Verma

10

Về lý thuyết: Con => hậu duệ ngay lập tức của tổ tiên (ví dụ Joe và cha)

Hậu duệ => bất kỳ yếu tố nào được truyền lại từ một tổ tiên cụ thể (ví dụ Joe và ông cố của ông)

Trong thực tế: hãy thử HTML này:

<div class="one">
  <span>Span 1.
    <span>Span 2.</span>
  </span>
</div>

<div class="two">
  <span>Span 1.
    <span>Span 2.</span>
  </span>
</div>

với CSS này:

span { color: red; } 
div.one span { color: blue; } 
div.two > span { color: green; }

http://jsfiddle.net/X343c/1/


Thật thú vị trên trình duyệt mà bạn đã thử nghiệm nó, vì nó dường như hoạt động thực sự
yoel halb

3
FYI, CSS trong câu trả lời không khớp với CSS trong JSFiddle ( redbluehoán đổi).
Pang

7

Xin lưu ý rằng bộ chọn con không được hỗ trợ trong Internet Explorer 6. (Nếu bạn sử dụng bộ chọn trong bộ chọn jQuery / Prototype / YUI, v.v. chứ không phải trong một biểu định kiểu, nó vẫn hoạt động)


tôi đang nghĩ rằng tôi sử dụng nó trong css. nhưng trong jquery tôi phát hiện xem trình duyệt có phải là6 không (trong jquery tôi có thể làm điều này không? hoặc tôi có cần sử dụng <! - [if IE 6]>) và thêm một lớp
iceangel89

2
jquery có tính năng đánh hơi thay vì đánh hơi trình duyệt vì vậy tôi không nghĩ bạn có thể phát hiện nếu trình duyệt là eg6. Và bạn không nên. Điều tốt nhất là bao gồm một biểu định kiểu bổ sung cho eg6 với các nhận xét có điều kiện như bạn mô tả.
rlovtang

4
div p 

Chọn tất cả các phần tử 'p' trong đó phần tử cha là phần tử 'div'

div> p

Nó có nghĩa là con ngay lập tức Chọn tất cả các phần tử 'p' trong đó cha mẹ là phần tử 'div'


-1

Lựa chọn CSS và áp dụng kiểu cho một phần tử cụ thể có thể được thực hiện thông qua duyệt qua phần tử dom [Ví dụ

Thí dụ

.a .b .c .d{
    background: #bdbdbd;
}
div>div>div>div:last-child{
    background: red;
}
<div class='a'>The first paragraph.
 <div class='b'>The second paragraph.
  <div class='c'>The third paragraph.
   <div class='d'>The fourth paragraph.</div>
   <div class='e'>The fourth paragraph.</div>
  </div>
 </div>
</div>
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.