Чистое решение CSS
Аннотация
Входные данные флажка - это собственный элемент, предназначенный для реализации функций переключения, мы можем использовать это в наших интересах.
Используйте псевдокласс :checked
- присоедините его к псевдоэлементу флажка (поскольку вы не можете реально повлиять на фон самого input
) и измените его фон соответствующим образом.
Осуществление
input[type="checkbox"]:before {
content: url('images/icon.png');
display: block;
width: 100px;
height: 100px;
}
input[type="checkbox"]:checked:before {
content: url('images/another-icon.png');
}
Демо
Вот полная демонстрация по jsFiddle , чтобы проиллюстрировать подход.
Рефакторинг
Это немного громоздко, и мы могли бы внести некоторые изменения, чтобы убрать ненужные вещи; поскольку мы на самом деле не применяем фоновое изображение, а вместо этого устанавливаем элемент content
, мы можем опустить псевдоэлементы и установить его непосредственно в флажок.
По общему признанию, они не служат здесь никакой реальной цели, кроме как маскировать собственный рендеринг флажка. Мы могли бы просто удалить их, но это в лучшем случае привело бы к FOUC, или, если мы не получим изображение, оно просто покажет огромный флажок.
Вводит appearance
свойство:
CSS-свойство (-moz-)appearance
используется ... для отображения элемента
используя собственный стиль платформы, основанный на теме операционной системы.
мы можем переопределить собственный стиль платформы, назначив appearance: none
и вообще обойти этот сбой (естественно, нам придется учитывать префиксы поставщиков, а форма без префиксов нигде не поддерживается , в данный момент). Затем селекторы упрощаются, и код становится более надежным.
Осуществление
input[type="checkbox"] {
content: url('images/black.cat');
display: block;
width: 200px;
height: 200px;
-webkit-appearance: none;
}
input[type="checkbox"]:checked {
content: url('images/white.cat');
}
Демо
Опять же, живая демонстрация с измененной версией находится на jsFiddle .
Ссылки
Примечание: пока что это работает только с webkit, я пытаюсь исправить его также и для движков gecko. Выложу обновленную версию, как только сделаю.