“I” có nghĩa là gì trong bộ chọn thuộc tính CSS?


112

Tôi đã tìm thấy bộ chọn CSS sau trong biểu định kiểu tác nhân người dùng Google Chrome:

[type="checkbox" i]

Nghĩa ilà gì?


1
@Alexander O'Mara: Bộ chọn cấp độ 4 là một phần của CSS3 - nó chỉ là cấp độ tiếp theo của mô-đun bắt đầu từ cấp độ 3. "CSS4" là một từ viết sai.
BoltClock

2
@Alexander O'Mara: Tôi rất muốn thấy nó được đưa vào meta. Đặc biệt, tôi muốn biết cách chúng tôi có thể xử lý việc sử dụng thẻ [css4] - biện pháp quyết liệt nhất mà tôi có thể thực hiện là biến nó thành từ đồng nghĩa của [css3] và đó thực sự là điều đúng đắn cần làm.
BoltClock

1
@BoltClock Meta Câu hỏi đã lên! BTW, khi bạn hỏi về việc hợp nhất câu trả lời của bạn với câu hỏi này, ý bạn là bạn đã chỉnh sửa câu hỏi / câu trả lời ở đây để thêm thông tin hay bạn đang đề cập đến một nút chuyển-một-câu-trả-lời-câu-hỏi-khác kì diệu?
Alexander O'Mara

1
@Alexander O'Mara: Không chuyển các câu trả lời riêng lẻ mà kết hợp cả hai câu hỏi. Đó là một chức năng chỉ dành cho mod.
BoltClock

1
@TylerH Chúng tôi có một cuộc thảo luận trên Meta về chủ đề này . Hãy thêm vào cuộc thảo luận ở đó.
Alexander O'Mara

Câu trả lời:


132

Như đã đề cập trong các nhận xét, nó dành cho đối sánh thuộc tính không phân biệt chữ hoa chữ thường. Đây là một tính năng mới trong CSS Selectors Level 4.

Hiện tại, nó có sẵn trong Chrome 49+, Firefox 47+, Safari 9+ và Opera 37 + *. Trước đó, nó chỉ có sẵn trong các kiểu tác nhân người dùng Chrome bắt đầu từ Chrome 39, nhưng có thể được bật cho nội dung web bằng cách đặt cờ các tính năng thử nghiệm.

* Các phiên bản trước của Opera cũng có thể hỗ trợ nó.

Ví dụ làm việc / Kiểm tra trình duyệt:

[data-test] {
    width: 100px;
    height: 100px;
    margin: 4px;
}

[data-test="A"] {
    background: red;
}

[data-test="a" i] {
    background: green;
}
Green if supported, red if not:

<div data-test="A"></div>

Hình vuông bên trên sẽ có màu xanh nếu trình duyệt hỗ trợ tính năng này, màu đỏ nếu không.


6
Cảm ơn vì đã chỉ dạy! Hãy tận hưởng chiếc mũ mới của bạn. Loại thứ này có hoạt động trong các thư viện bộ chọn không? Nó có hỗ trợ trình duyệt nào?
Benjamin Gruenbaum

1
@BenjaminGruenbaum Có vẻ như nó chỉ khả dụng trong các kiểu tác nhân người dùng Chrome (ít nhất là không phải CSS của trang web). Tôi không thể tìm thấy bất kỳ tài liệu tương thích chính thức nào.
Alexander O'Mara

(Đăng lại bình luận trước đây của tôi bây giờ rằng các câu hỏi đã được hợp nhất.) Không hoàn toàn ngạc nhiên khi các tiêu chuẩn mới, thử nghiệm như tiêu chuẩn này được ghi chép kém. Điều đó nói rằng, câu trả lời của tôi chứa thêm một số thông tin về điều này, cụ thể là cách nó hoạt động, tại sao nó được sử dụng và cách nó được triển khai trong Chrome (như câu hỏi đã đưa ra).
BoltClock

Chrome sẽ bổ sung hỗ trợ cho việc này trong phiên bản 49.0 (hiện đang ở phiên bản Beta), Firefox trong phiên bản 47.0 (dự kiến ​​phát hành vào tháng 6 năm 2016). Nguồn: developer.mozilla.org/en-US/docs/Web/CSS/…
Miscreant

1
@LWChris: Tôi không chắc có trình duyệt nào như vậy thực sự tồn tại hay không. IE6 hoàn toàn không hiểu các bộ chọn thuộc tính và IE7 hỗ trợ chúng ngay cả với các thuộc tính dữ liệu tùy chỉnh.
BoltClock

36

Đó là cờ phân biệt chữ hoa chữ thường cho các bộ chọn thuộc tính, được giới thiệu trong Bộ chọn 4 . Rõ ràng là họ đã lén triển khai tính năng này vào Chrome vào đầu tháng 8 năm 2014.

Tóm lại: cờ này yêu cầu trình duyệt khớp các giá trị tương ứng cho typethuộc tính không phân biệt chữ hoa chữ thường. Bộ chọn mặc định phù hợp với hành vi cho các giá trị thuộc tính trong HTML là trường hợp nhạy cảm , mà thường là không mong muốn vì nhiều thuộc tính được định nghĩa có giá trị case-insensitive, và bạn muốn chắc chắn chọn chọn của bạn lên tất cả các yếu tố đúng bất kể trường hợp. typelà một ví dụ về một thuộc tính như vậy, vì nó là một thuộc tính liệt kêcác thuộc tính được liệt kê được cho là có giá trị không phân biệt chữ hoa chữ thường .

Dưới đây là các cam kết có liên quan:

  • 179370 - thực hiện
  • 179401 - thay đổi đối với bảng định kiểu UA như được hiển thị trong ảnh chụp màn hình trong câu hỏi

Lưu ý rằng nó hiện bị ẩn trong cờ "Bật tính năng Nền tảng web thử nghiệm", bạn có thể truy cập cờ này tại chrome: // flags / # enable-testing-web-platform-features. Điều này có thể giải thích tại sao tính năng này hầu như không được chú ý - các tính năng ẩn đằng sau cờ đó chỉ có thể được sử dụng trong nội bộ và không được sử dụng trong mã hiển thị công khai (chẳng hạn như bảng định kiểu tác giả) trừ khi nó được bật, vì chúng đang thử nghiệm và do đó chưa sẵn sàng để sử dụng sản xuất.

Đây là một trường hợp kiểm tra mà bạn có thể sử dụng - so sánh kết quả khi cờ được bật và tắt:

span[data-foo="bar"] {
    color: red;
}

span[data-foo="bar" i] {
    color: green;
}
<span data-foo="bar">If all of this text is green,</span>
<span data-foo="Bar">your browser supports case-insensitive attribute selectors.</span>

Lưu ý rằng tôi sử dụng thuộc tính dữ liệu tùy chỉnh thay vì typeđể cho thấy rằng nó có thể được sử dụng với bất kỳ thuộc tính nào.

Tôi không biết về bất kỳ triển khai nào khác kể từ khi viết bài này, nhưng hy vọng các trình duyệt khác sẽ sớm bắt kịp. Đây là một bổ sung tương đối đơn giản nhưng cực kỳ hữu ích cho tiêu chuẩn và tôi mong muốn có thể sử dụng nó trong tương lai.


Tôi đang có "buổi chiều hôm đó" mệt mỏi ... Sau khi đọc thông số kỹ thuật của W3, tôi vẫn chưa hiểu hoàn toàn, cách sử dụng thực tế thực tế trong css cho việc này là gì?
Matt,

2
@Matt: Đối sánh bộ chọn thuộc tính có phân biệt chữ hoa chữ thường như đã nêu trong HTML5 , điều này trong nhiều trường hợp là không mong muốn vì HTML5 cho phép các giá trị không phân biệt chữ hoa chữ thường cho các thuộc tính nhất định. Bạn có thể sử dụng cờ này để đảm bảo bạn chọn đúng các yếu tố bất kể trường hợp nào. Ví dụ trong ảnh chụp màn hình, bạn có thể thấy rằng nó sẽ tìm kiếm input[type="search" i], sẽ khớp với các yếu tố như <input type="SEARCH">.
BoltClock

1
Tôi có thể xác nhận rằng nó hoạt động với Chromium Phiên bản 43.0.2357.130 và đã bật "Bật các tính năng Nền tảng web thử nghiệm".
Robert Siemer
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.