Что взять за основу? Есть несколько вариантов, например с помощью js добавлять (удалять) класс, который определяет состояние переключателя...
Мы сделаем попроще, на чистом css3, правда не гарантирую совместимость с деревянными браузерами. Родитель должен быть независимым Создаем родительский label, который определит ширину и высоту блока, можно определять это внутренним элементом, но не сегодня=)
Label я выбрал не просто так, его атрибут "for" поможет нам работать с checkbox, который будет отвечать за состояние переключателя. Теперь зададим черновую стилистику.
Для label поставим высоту 30px, а ширину 50px, "position: relative" чтобы дочерние элементы выравнивались по нашему лейбл, а также "display: inline-block" т.к. справа у нас скорей всего будет текст.
Скрываем input, но не через display т.к он не будет работать. Задаем "opacity: 0; position: absolute" чтобы не мешал другим элементам в родителе; а "top: 0" и "left: 0" чтобы не убежал за пределы label. Нужен фон Фон задаем для следу