Що означає "я" у селекторі атрибутів CSS?


112

У таблиці стилів агентів Google Chrome я знайшов наступний селектор CSS:

[type="checkbox" i]

Що iозначає?


1
@Alexander O'Mara: Селектори 4 рівня є частиною CSS3 - це лише наступний рівень модуля, який запустився на рівні 3. "CSS4" - це неправильне значення.
BoltClock

2
@ Олександр О'Мара: Я хотів би бачити, як це виховується на мета. Зокрема, я хотів би знати, як ми можемо впоратися з використанням тегу [css4] - найрішучіший захід, який я міг би вжити, - це зробити його синонімом [css3], і це насправді було б правильно зробити.
BoltClock

1
@BoltClock Мета Питання працює! BTW, коли ви запитували про об'єднання своєї відповіді з цим питанням, ви мали на увазі редагувати питання / відповідь тут, щоб додати інформацію, або ви посилалися на чарівну кнопку "перехід-відповідь-на-інше"?
Олександр О'Мара

1
@Alexander O'Mara: Не зволікаючи окремі відповіді, а поєднуючи два цілих запитання. Це лише модульна функція.
BoltClock

1
@TylerH У нас на цю тему обговорюється мета . Не соромтеся додавати до дискусії там.
Олександр О'Мара

Відповіді:


132

Як було сказано в коментарях, це відповідність атрибутів, що не залежать від регістру. Це нова функція у CSS Selectors Level 4.

Наразі він доступний у Chrome 49+, Firefox 47+, Safari 9+ та Opera 37 + *. До цього він був доступний лише в стилях агентів Chrome, починаючи з Chrome 39, але його можна було включити для веб-вмісту, встановивши прапор експериментальних функцій.

* Більш ранні версії Opera також можуть її підтримувати.

Приклад роботи / тест браузера:

[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>

Наведений вище квадрат буде зеленим, якщо браузер підтримує цю функцію, червоним, якщо він не працює.


6
Дякуємо за навчання! Насолоджуйтесь своєю новою шапкою. Чи працює така річ у бібліотеках-селекторах? Яку підтримку браузера він має?
Бенджамін Грюнбаум

1
@BenjaminGruenbaum Схоже, він доступний лише у стилях користувацьких агентів Chrome (не CSS веб-сайту, принаймні ще не). Не вдалося знайти жодної офіційної документації щодо сумісності.
Олександр О'Мара

(Повідомляючи про свій попередній коментар тепер, коли питання об'єднані.) Не зовсім дивно, що нові, експериментальні стандарти, такі як цей, погано задокументовані. Враховуючи це, моя відповідь містить ще деяку інформацію щодо цього, а саме про те, як він працює, чому він використовується та як він реалізований у Chrome (як задано питанням).
BoltClock

Chrome додасть підтримку цього у версії 49.0 (наразі в бета-версії), Firefox у версії 47.0 (планується вийти у червні 2016 року). Джерело: developer.mozilla.org/en-US/docs/Web/CSS/…
Різне

1
@LWChris: Я не впевнений, що такий браузер насправді існує. IE6 взагалі не розуміє селектори атрибутів, а IE7 підтримує їх навіть за допомогою спеціальних атрибутів даних.
BoltClock

36

Це прапор невідчуваного регістру для селекторів атрибутів, введений у селекторах 4 . Мабуть, вони вкрали реалізацію цієї функції в Chrome ще в серпні 2014 року.

Коротше кажучи: цей прапор повідомляє браузеру відповідати відповідним значенням для typeвипадку атрибута без чутливості. Поведінка вибору за замовчуванням для відповідності значень атрибутів у HTML залежить від регістру , що часто небажано, оскільки для багатьох атрибутів визначено значення, що не залежать від регістру, і ви хочете переконатися, що ваш селектор підбирає всі потрібні елементи незалежно від випадку. typeє одним із прикладів такого атрибута, оскільки він є переліченим атрибутом , а перелічені атрибути, як кажуть, мають значення, нечутливі до регістру .

Ось відповідні зобов’язання:

  • 179370 - реалізація
  • 179401 - зміни таблиць стилів UA, як показано на скріншоті у питанні

Зауважте, що він наразі прихований у прапорі "Увімкнути експериментальні функції веб-платформи", до якого можна отримати доступ за адресою chrome: // flags / # enable-експериментально-веб-платформа. Це може пояснити, чому ця функція в основному залишилась непоміченою - особливості, приховані за цим прапором, можна використовувати лише внутрішньо, а не у відкритому для публічного коду (наприклад, авторські таблиці стилів), якщо це не ввімкнено, оскільки вони експериментальні і тому не готові до виробничого використання.

Ось тестовий випадок, який ви можете використовувати - порівняйте результати, коли прапор увімкнено та вимкнено:

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>

Зауважте, що я використовую спеціальний атрибут даних замість того, typeщоб показати, що його можна використовувати майже з будь-яким атрибутом.

Я не знаю жодних інших реалізацій, як це було написано, але, сподіваємось, інші браузери незабаром наздоганяють. Це порівняно просте, але надзвичайно корисне доповнення до стандарту, і я з нетерпінням чекаю можливості його використовувати у майбутньому.


Я відчуваю втому "того дня" ... Прочитавши специфікацію W3, все ще не розуміючи повністю, що було б практичним використанням реального життя в css для цього?
Метт

2
@Matt: Відповідність селектора атрибутів залежно від регістру, як зазначено в HTML5 , що в багатьох випадках небажано, оскільки HTML5 дозволяє визначити нечутливі до регістру значення для певних атрибутів. Ви можете використовувати цей прапор, щоб переконатися, що ви підбираєте потрібні елементи незалежно від випадку. Наприклад, на скріншоті ви бачите, що він шукає input[type="search" i], який буде відповідати таким елементам <input type="SEARCH">.
BoltClock

1
Я можу підтвердити це, працюючи з версією Chromium 43.0.2357.130 та "Увімкнути експериментальні функції веб-платформи".
Роберт Сімер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.