Я пытаюсь элегантно решить проблему стилей с помощью некоторых кнопок и изображений. Моя цель - иметь кнопки, которые выглядят следующим образом:
(макет Hacky mspaint)
Пример кнопки http://www.robhruska.com/images/button-example.png
Однако у меня есть набор критериев, которым я бы хотел соответствовать:
- Мне также нужно, чтобы изображение значка существовало как одна кнопка без текста (т. Е. Фон кнопки - это изображение значка, а ширина / высота кнопки = ширина / высота изображения значка).
- Кнопка только для значка должна поддерживать
:hover
состояния, которые изменяют фоновый значок.
- Текстовые кнопки должны поддерживать изменение градиентного фона на
:hover
, но сам значок менять не нужно.
У меня есть и изображение значка, и изображение градиента в виде вертикального изображения спрайта CSS.
В настоящее время я могу думать только о том, чтобы сделать это с отдельными наборами стилей для текстовых кнопок и кнопок только для значков, в виде строк:
<!-- text-button -->
<!-- button.text-button would have gradient background and border -->
<!-- button.text-button:hover would change to the hover gradient -->
<!-- .icon would have the icon background (icon border is included in image) -->
<button class="text-button">
<div class="icon-delete">Button Text</div>
</button>
<!-- icon-only button -->
<!-- button.icon-button would have the specific icon image background -->
<!-- button.icon-button:hover would change to the hover state background -->
<!-- button styling is different than .text-button, since icon border is included in image -->
<button class="icon-button-delete"></button>
Мне не особенно нравится использовать внутреннюю <div>
для текстовой кнопки, поскольку кажется, что она добавляет больше разметки, которая может быть ненужной. Это также делает так, что если бы я захотел вернуться позже и добавить текст к кнопке, мне пришлось бы изменить несколько компонентов вместо простого изменения класса кнопки. Это также означает, что мне, вероятно, придется определить положение изображения для моих спрайтов значков для нескольких различных комбинаций стилей кнопок / div, что не СУХОЙ.
Подводя итог моему вопросу: Как я могу сделать это с одиночным стилем верхнего уровня на <button>
, вместо использования вложенных элементов или отдельных стилей для значков и текстовых кнопок? Это также не обязательно должен быть <button>
, это может быть любой элемент, если он выполняет это элегантно.
Мне на самом деле не нужен полный пример кода, просто предложение о том, как его можно добиться наилучшим образом.