Вы можете сделать это, добавив другое изображение к фону, по одному для каждого состояния кнопки.Однако есть более чистый, более простой и современный способ достижения этого результата: спрайты.
Спрайт - это изображение, которое сохраняется как часть большего изображения.Одним из самых больших преимуществ использования спрайтов является сокращение количества обращений к серверу для всех изображений до одного запроса на спрайты.Элемент для отображения изображения имеет изображение в качестве фона.Фон перемещается относительно элемента, поэтому элемент отображает только часть изображения.Например, когда вы перемещаете фоторамку над плакатом (или, в данном случае, перемещаете плакат под рамкой)
В SO они создают изображение, которое содержит все состояния кнопки.Они дают элементу кнопки (в данном случае span
) фиксированную ширину и высоту и добавляют к ней фон с помощью CSS.Затем переключите класс для состояния (вкл или выкл) с помощью JavaScript на событие click.Теперь единственное, что вам нужно сделать в CSS, это изменить положение фона с помощью классов CSS:
for (const btn of document.querySelectorAll('.vote')) {
btn.addEventListener('click', event => {
event.target.classList.toggle('on');
});
}
.vote {
display: inline-block;
overflow: hidden;
width: 40px;
height: 25px;
cursor: pointer;
background: url('http://i.stack.imgur.com/iqN2k.png');
background-position: 0 -25px;
}
.vote.on {
background-position: 0 2px;
}
Click to vote: <span class="vote"> </span>
Вы можете легко добавить больше состояний к спрайтам, таким как «зависание» и «активный» точно так же.Таким образом, даже помещает все изображения для всей страницы в одно изображение.Вы можете проверить это с помощью Firebug или инструментов разработчика Chrome.Ищите «sprites.png».