2015-04-20 17 views
9

Tôi đang nghiên cứu css và typography, và chạy vào khái niệm hấp dẫn này của các bộ chọn giả. Tôi đã sử dụng bộ chọn psuedo ruột già duy nhất và không quen thuộc với phiên bản hai dấu hai chấm của bộ chọn psuedo. I understand rằng dấu hai chấm được gọi là phần tử giả thay vì một bộ chọn giả - nhưng tại sao? Và sự khác biệt là gì?CSS "::" vs ":" - phần tử giả vs bộ chọn giả?

Tôi cũng hiểu rằng dấu hai chấm đơn được hỗ trợ nhiều hơn, vì vậy trong trường hợp nào thì người ta sẽ sử dụng phần tử giả đại tràng kép? Có những trường hợp sử dụng trong đó hai dấu hai chấm là cần thiết, và dấu hai chấm đơn lẻ sẽ không hoàn thành công việc? tình huống đó có thể là gì?

"Không giống như các phần tử giả, các lớp giả có thể xuất hiện ở bất kỳ vị trí nào trong chuỗi chọn". (Trích dẫn từ liên kết) - Tôi không biết 'chuỗi chọn' là gì, nhưng điều này cũng có vẻ như là một hạn chế khác của cách tiếp cận hai dấu hai chấm. Tại sao tôi cần phải sử dụng dấu hai chấm nếu nó là (trong sự hiểu biết của tôi) chỉ là một phiên bản ít được hỗ trợ của dấu hai chấm đơn?

chỉnh sửa: chúng xuất hiện không phải là chức năng giống nhau: fiddle

<div><p>First Line</p></div> 
<div><p>Second Line</p></div> 

css

div:nth-child(1) > p { 
    color: green; 
} 

div::nth-child(2) > p { 
    color: blue; 
} 
+1

Như [MDN nêu rõ] (https://developer.mozilla.org/en-US/docs/Web/CSS/Pseudo-elements): "Đôi khi bạn sẽ thấy dấu hai chấm (:) thay vì chỉ một (Đây là một phần của CSS3 và một nỗ lực để phân biệt giữa các lớp giả và các phần tử giả. Hầu hết các trình duyệt đều hỗ trợ cả hai giá trị. " – j08691

+0

Theo https://developer.mozilla.org/en/docs/Web/CSS/:nth-child nth-child là bộ chọn lớp giả, do đó bạn nên sử dụng dấu hai chấm đơn, không phải dấu hai chấm (vì nó không phải là bộ chọn phần tử psedo). –

+1

Tại sao bạn gọi chúng là bộ chọn psuedo khi tài liệu gọi chúng là các lớp giả? –

Trả lời

14

Giả lớp (:) cho phép bạn tạo kiểu cho tiểu bang khác nhau của một phần tử ví dụ khi bạn di chuột qua nó, khi nó bị vô hiệu hóa, khi nó là con đầu tiên của cha mẹ, v.v.

Các phần tử giả (::) cho phép bạn tạo kiểu các phần khác nhau của một phần tử, ví dụ: dòng đầu tiên, chữ cái đầu tiên, chèn nội dung trước hoặc sau, v.v.

Ban đầu, tất cả đều sử dụng một dấu hai chấm, nhưng CSS3 đã giới thiệu dấu hai chấm để tách hai.

+2

Không có vấn đề gì khi chèn nội dung với một dấu hai chấm đơn. – Stickers

+0

Các trình duyệt có thể hỗ trợ các dấu hai chấm đơn cho một số phần tử giả vì đó là cách chúng được định nghĩa trong CSS2. Mặt khác, không trình duyệt nào cho phép các dấu hai chấm cho các lớp giả vì chúng không bao giờ được định nghĩa theo cách đó. – scronide

+1

Vì vậy, trong khi tôi không thể sử dụng ':' và '::' cùng một cách ('::' sẽ thất bại với ví dụ: ':: hover'), tôi có thể sử dụng': 'trong bất kỳ tình huống nào? –

Các vấn đề liên quan