Chọn các yếu tố theo thuộc tính dữ liệu trong CSS


Câu trả lời:


776

Nếu bạn có nghĩa là sử dụng bộ chọn thuộc tính , chắc chắn, tại sao không:

[data-role="page"] {
    /* Styles */
}

Có nhiều bộ chọn thuộc tính mà bạn có thể sử dụng cho các tình huống khác nhau, tất cả được đề cập trong tài liệu tôi liên kết đến. Lưu ý rằng, mặc dù các thuộc tính dữ liệu tùy chỉnh là "tính năng HTML5 mới",

  • các trình duyệt thường không có bất kỳ vấn đề nào hỗ trợ các thuộc tính không chuẩn, vì vậy bạn sẽ có thể lọc chúng bằng các bộ chọn thuộc tính; và

  • bạn cũng không phải lo lắng về việc xác thực CSS, vì CSS không quan tâm đến các tên thuộc tính không được đặt tên miễn là chúng không phá vỡ cú pháp của bộ chọn.


4
Có tương thích với tất cả các hoa tiêu?
Barshe Debove

21
@Christophe Debove: IE7 + và mọi thứ khác.
BoltClock

7
CSS dường như không phát hiện ra điều này nếu thuộc tính dữ liệu được đặt hoặc thay đổi thông qua JS.
ᴍᴀᴛᴛ 4/2/2015

30
Sau khi điều tra thêm, nó sẽ xuất hiện $("#element").data("field","value");không thay đổi giá trị thuộc tính dữ liệu, nó chỉ sửa đổi phiên bản DOM được lưu trong bộ nhớ cache của jQuery. Để thay đổi thuộc tính DOM thực tế, người ta cần sử dụng $("#element").attr("data-field","value");. Làm cho nhận xét ban đầu của tôi không hợp lệ.
ᴍᴀᴛᴛ 5/2/2015

2
Vâng, có vẻ như việc thay đổi tập dữ liệu cũng hoạt động tốt @Matthew - jsfiddle.net/BoltClock/k378xgj3 Cảm ơn vì không có gì jQuery.
BoltClock

107

Cũng có thể chọn các thuộc tính bất kể nội dung của chúng, trong các trình duyệt hiện đại

với:

[data-my-attribute] {
   /* Styles */
}

[anything] {
   /* Styles */
}

Ví dụ: http://codepen.io/jasonm23/pen/fADnu

Hoạt động trên một tỷ lệ rất đáng kể của trình duyệt.

Lưu ý điều này cũng có thể được sử dụng trong bộ chọn JQuery hoặc sử dụng document.querySelector


Wow, tôi chưa bao giờ thấy nó có thể được sử dụng như vậy !! +1! Và FWIW, hiện tại đã hết hạn trình duyệt, tôi tin rằng nó hoạt động trong IE7 + vì vậy sự hỗ trợ của nó có mặt ở khắp mọi nơi. Thật buồn cười khi ngay cả Chris Coyier cũng không đề cập đến nó ở đây
Camilo Martin

Cảm ơn @CamiloMartin tôi đã xóa liên kết trình duyệt để tránh nhầm lẫn / phiền toái.
ocodo 27/12/13

Đã thêm một liên kết đến chủ đề của Chris Coyier css-tricks.com/attribution-selector/#comment-965838 @CamiloMartin
ocodo 27/12/13

1
Không có cú pháp nào là mới dù sao - nhiều người ngạc nhiên rằng IE6 không hỗ trợ nó hơn IE7 +. Bạn có thể giả định khá nhiều tất cả các bộ chọn CSS2.1 được hỗ trợ trong IE8 trở lên - IE7 thực hiện hầu hết, mặc dù có một vài lỗi tối nghĩa. Tất cả các trình duyệt hiện đại đã hỗ trợ các trình chọn cấp 3 trong một thời gian, thay vào đó Chrome là lỗi.
BoltClock

1
Kể từ khi chúng tôi về chủ đề của thuộc tính selectors tuy nhiên, thật thú vị khi lưu ý rằng các bộ chọn thuộc tính substring đã được giới thiệu vào cấp 3 ( ^=, *=$=) cũng được hỗ trợ bởi IE7 và IE8. Có lẽ chúng đã được giới thiệu trong IE trước khi được chuẩn hóa.
BoltClock

47

Đáng chú ý là các bộ chọn thuộc tính chuỗi con CSS3

[attribute^=value] { /* starts with selector */
/* Styles */
}

[attribute$=value] { /* ends with selector */
/* Styles */
}

[attribute*=value] { /* contains selector */
/* Styles */
}

13

Bạn có thể kết hợp nhiều bộ chọn và điều này thật tuyệt khi biết rằng bạn có thể chọn mọi thuộc tính và thuộc tính dựa trên giá trị của chúng giống như hrefdựa trên giá trị của chúng chỉ với CSS ..

Bộ chọn thuộc tính cho phép bạn chơi xung quanh một số phụ idclassthuộc tính

Đây là một bài đọc tuyệt vời trên Bộ chọn thuộc tính

Vĩ cầm

a[href="http://aamirshahzad.net"][title="Aamir"] {
  color: green;
  text-decoration: none;
}

a[id*="google"] {
  color: red;
}

a[class*="stack"] {
  color: yellow;
}
<a href="http://aamirshahzad.net" title="Aamir">Aamir</a>
<br>
<a href="http://google.com" id="google-link" title="Google">Google</a>
<br>
<a href="http://stackoverflow.com" class="stack-link" title="stack">stack</a>

Hỗ trợ trình duyệt:
IE6 +, Chrome, Firefox & Safari

Bạn có thể kiểm tra chi tiết tại đây .


4
    [data-value] {
  /* Attribute exists */
}

[data-value="foo"] {
  /* Attribute has this exact value */
}

[data-value*="foo"] {
  /* Attribute value contains this value somewhere in it */
}

[data-value~="foo"] {
  /* Attribute has this value in a space-separated list somewhere */
}

[data-value^="foo"] {
  /* Attribute value starts with this */
}

[data-value|="foo"] {
  /* Attribute value starts with this in a dash-separated list */
}

[data-value$="foo"] {
  /* Attribute value ends with this */
}
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.