У меня есть симпатичная маленькая кнопка, которая использует много фантазийных CSS, чтобы хорошо выглядеть.Использование селекторов CSS в атрибуте стиля
Вот код позади него (я игнорирую проблемы совместимости в настоящее время); как вы можете видеть, он использует несколько селекторов для наведения и нажатия событий.
.button {
display: inline-block;
width: 200px;
height: 200px;
padding: 15px;
border-radius: 25px;
background:linear-gradient(to bottom, hsla(36, 100%, 60%, 1) 5%, hsla(36, 100%, 40%, 1) 100%);
border:2px solid hsla(36, 100%, 30%, 1);
box-shadow:inset 0px 2px 2px 0px white;
position: relative;
left: 0px;
top: 0px;
text-shadow:0px 1px 0px hsla(36, 100%, 30%, 1);
margin: 25px;
}
.button:hover {
background:linear-gradient(to bottom, hsla(36, 100%, 65%, 1) 5%, hsla(36, 100%, 45%, 1) 100%);
}
.button:active {
background:linear-gradient(to bottom, hsla(36, 100%, 40%, 1) 5%, hsla(36, 100%, 60%, 1) 100%);
}
Однако, чтобы упростить процесс в будущем, когда будет много кнопок, вместо этого я хотел, чтобы иметь возможность сделать кнопку иметь пользовательский атрибут цвета (buttonColor
ниже), который будет читаться некоторым JavaScript , превратился в Hue/Saturation/Lightness и, в конечном итоге, изменился для многих разных вариантов. Каждая кнопка содержит не менее трех цветов; два для градиента и один для тени и границы.
<div class="button" id="testButton"buttonColor="ff8c00">
<p class="buttonHeader">foo</p>
<p class="buttonBody">foo2</p>
</div>
Вот что я получил в JavaScript:
function hexToRgb(hex) { //converts hexadecimal colors into Red/Green/Blue
//code omitted for sake of conciseness
return [r, g, b];
}
function rgbToHsl(r, g, b) { //converts Red/Green/Blue into Hue/Saturation/Lightness
//ditto
return [h, s, l]
}
var buttons = document.body.getElementsByClassName('button'); //Gets all elements with button class
for (var i = 0; i < buttons.length; i++) {
var rgb = hexToRgb(buttons[i].getAttribute("buttoncolor")); //
var hsl = rgbToHsl(rgb.r, rgb.g, rgb.b)
//here
}
И прямо там, где я застрял.
Я могу легко изменить стиль кнопки, но только пока она неактивна; Я никак не могу изменить, как он реагирует под: hover и: active selectors.
я не думаю, что я полностью понимаю, что именно вы пытаетесь сделать. Вы хотите добавить шестнадцатеричный цвет в качестве атрибута, чтобы сделать то, что именно? – jmore009
OK Я понимаю, что вы хотите конвертировать hex в RGB, а затем в HSL. Я не совсем понимаю это: «и, в конце концов, изменился для многих разных вариантов», как вы планируете изменить многие варианты? или это проблема? и можете ли вы опубликовать все свои JS, если их больше? – jmore009