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