Я думаю, вы пытаетесь усложнить ситуацию. Простое решение состоит в том, чтобы просто установить стиль вашего флажка по умолчанию с помощью непроверенных стилей, а затем добавить проверенные стили состояний.
input[type="checkbox"] {
// Unchecked Styles
}
input[type="checkbox"]:checked {
// Checked Styles
}
Я извиняюсь за то, что поднял старую ветку, но чувствовал, что она могла бы найти лучший ответ.
РЕДАКТИРОВАТЬ (03.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
должен был бы использовать border: none;
для достижения того же эффекта.
Используйте input[type="checkbox"]
для базового стиля, чтобы уменьшить дублирование.
Используйте input[type="checkbox"]:not(:checked)
для явных непроверенных стилей, которые вы не хотите применять к проверенному состоянию.