2015-01-12 20 views
5

Selector nhưCss pseudo-lớp học mà không có bất kỳ bộ chọn, là nó ok?

.some-class :first-child 

mà chọn đứa con đầu lòng trong .some-class công trình như mong đợi trong tất cả các trình duyệt, ngay cả trong IE8.

Tuy nhiên, tùy chọn 'Giảm dữ liệu' của Chrome trên thiết bị di động sẽ xóa khoảng cách giữa .some-class:first-child và ngắt CSS bằng cách áp dụng kiểu cho .some-class phần tử. Trong các trường hợp khác như .class1 .class2 Chrome giữ nguyên không gian. Có lẽ, nó xem xét khoảng cách giữa .some-class:first-child là không gian không phải ngữ nghĩa, bởi vì nó cho rằng không thể là lớp giả mà không có một bộ chọn nào đó.

Nhưng tôi đã kiểm tra các tiêu chuẩn và nó không nói bất cứ nơi nào mà lớp giả phải có một bộ chọn. Đồng thời tất cả các ví dụ với các lớp giả bao gồm công cụ chọn phần tử, như

p:first-child 

Vì vậy, tôi nhầm lẫn. Bộ chọn CSS này có đúng không hoặc có lỗi trong 'Giảm mức sử dụng dữ liệu' của Chrome không?

+0

"có lỗi trong 'Giảm mức sử dụng dữ liệu' của Chrome" <- Điều này. –

+0

Chà, bạn thực sự không thể làm được điều này. Đây là cấp độ vô nghĩa IE9. – BoltClock

Trả lời

2

:first-child có giá trị như một chọn độc lập và điều này dường như là một lỗi trong các phiên bản di động của Chrome. Chúng tôi có thể xác nhận điều này với W3C's CSS Validator.

:first-child { background: #F00; } 

Xin chúc mừng! Không tìm thấy lỗi.

Trong thực tế, tất cả mọi thứ được liệt kê trong Selectors phần của Selectors Level 3 specification có giá trị như một chọn độc lập. Tôi tưởng tượng lý do các ví dụ cho :first-child cũng bao gồm bộ chọn yếu tố là để tránh nhầm lẫn và hiển thị cách nó có thể được sử dụng trên phần tử cụ thể đó.

+0

@ james-donelly cảm ơn vì câu trả lời mở rộng! Tôi đã báo cáo sự cố cho Google và đính kèm một liên kết đến câu hỏi SO này. – snovity

+1

Một lớp giả là hợp lệ bởi chính nó bởi vì nó là một bộ chọn đơn giản, giống như một bộ chọn lớp hoặc một bộ chọn ID là hợp lệ ngày của riêng nó. Bộ chọn không bắt đầu bằng bộ chọn loại được cho là có bộ chọn ẩn '*' thay thế. Điều này bao gồm các phần tử giả (ví dụ: '*,: before,: after {box-sizing: border-box;}'). – BoltClock

1

Tôi đoán đó là lỗi. Bạn sẽ có thể làm việc xung quanh nó với .some hạng *: first-child

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