CSS3: неперевірений псевдоклас


108

Я знаю, що існує офіційний CSS3 :checkedпсевдоклас, але чи є :uncheckedпсевдоклас, і чи є у них однакова підтримка браузера?

Посилання Sitepoint не згадує жодного, однак ця специфікація whatwg (що б там не було) робить.

Я знаю , що той же результат може бути досягнутий , коли :checkedі :not()псевдо-класи об'єднуються, але я все ще цікаво:

input[type="checkbox"]:not(:checked) {
    /* styles */
}

Редагувати:

W3c рекомендує ту саму методику

Невірно встановлений прапорець можна встановити, використовуючи псевдоклас заперечення:

:not(:checked)

Відповіді:


104

:unchecked не визначено в специфікаціях 3-го рівня інтерфейсу селекторів або CSS, а також не з'явилося у рівні 4 селекторів.

Фактично, цитата W3C взята з специфікацій Selectors 4 . Оскільки селектори 4 рекомендують використовувати :not(:checked), з впевненістю можна припустити, що немає відповідного :uncheckedпсевдо. Підтримка веб-переглядача :not()і :checkedоднакова, тому це не повинно бути проблемою.

Це може здатися невідповідним станам :enabledта :disabledстанам, тим більше, що елемент не може бути ні ввімкнено, ні вимкнено (тобто семантика повністю не застосовується), проте, як видається, не існує жодного пояснення цієї невідповідності.

( :indeterminateне рахується, тому що елемент може не бути ні перевіреним, ні перевіреним, ні невизначеним, оскільки семантика не застосовується.)


Просто додати до цієї відповіді, що вибір: not (: перевірено) прекрасно працює на Chrome, але це не на IE (тестовано на 9 та 11).
Бруно Палець

@Bruno Finger:: перевірено і: not (: перевірено) повинні обидва працювати на IE, за винятком того, що обидва в однаковій мірі впливають на помилку, коли зміна перевіреного стану не оновлює стилі елементів, націлених відносно перевірених / неперевірених елемент.
BoltClock

35

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

input[type="checkbox"] {
  // Unchecked Styles
}
input[type="checkbox"]:checked {
  // Checked Styles
}

Прошу вибачення за те, що я вивів стару тему, але відчув, що міг би скористатися кращою відповіддю.

EDIT (3.03.2016):

Специфікації W3C зазначають, що :not(:checked)їх прикладом для вибору неперевіреного стану. Однак це явно неперевірений стан і застосовуватиме лише ці стилі до неперевіреного стану. Це корисно для додавання стилів, які потрібні лише у неперевіреному стані та потребують вилучення із перевіреного стану, якщо вони використовуються у input[type="checkbox"]селекторі. Для роз'яснення див. Приклад нижче.

input[type="checkbox"] {
  /* Base Styles aka unchecked */
  font-weight: 300; // Will be overwritten by :checked
  font-size: 16px; // Base styling
}
input[type="checkbox"]:not(:checked) {
  /* Explicit Unchecked Styles */
  border: 1px solid #FF0000; // Only apply border to unchecked state
}
input[type="checkbox"]:checked {
  /* Checked Styles */
  font-weight: 900; // Use a bold font when checked
}

Без використання :not(:checked)в наведеному вище прикладі :checkedселектору потрібно було б використовувати a, border: none;щоб досягти такого ж ефекту.

Використовуйте input[type="checkbox"]для базового стилю, щоб зменшити дублювання.

Використовуйте input[type="checkbox"]:not(:checked)для явних неперевірених стилів, які ви не хочете застосовувати до перевіреного стану.


Є й інше використання селекторів css, де це корисно / виразно: javascript, автоматичне тестування браузера
nruth

2
Це не завжди можливо. Елементи форми, зокрема, відомі тим, що не дозволяють повернути їм їх зовнішній вигляд за замовчуванням за допомогою каскадних правил. (Хоча чому хто-небудь хотів би надати лише перевіреним або лише неперевіреним введенням користувальницький вигляд та відчуття, поки залишаючи інший монетний двір - це поза мною.)
BoltClock

Ще один випадок, коли це неможливо: Більше 2 перемикачів. Наприклад, вам може знадобитися один стиль, коли параметр №1: перевірено, а інший, коли все інше: перевірено. Рішення:not(:checked)
Navin

Якщо ви були бажаючи тільки бажаючі конкретні з них стилю, чому б не використати :first-child, :last-childабо :nth-childселектор в поєднанні з :checked. :not(:checked)не охоплюватиме ситуацію, яку ви вказали, якщо я не зрозумів ваш коментар.
Майкл Страмель

@MichaelStramel введення порядку htmls у css? nope дякую
inetphantom

3

Немає: неперевірений псевдоклас, однак якщо ви використовуєте: перевірений псевдоклас та селектор сестер, ви можете диференціювати обидва стани. Я вважаю, що всі останні браузери підтримують: перевірений псевдоклас, ви можете знайти більше інформації з цього ресурсу: http://www.whatstyle.net/articles/18/pretty_form_controls_with_css

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


-2

Як я вирішував це, було перемикання className мітки на основі умови. Таким чином вам потрібна лише одна мітка, і ви можете мати різні класи для різних станів ... Сподіваюся, що це допомагає!

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.