CSSでcalc()
関数を使用して16進カラー値を操作することは可能ですか?
次のCSSスニペットでは、--enable
変数を使用して、MyBtnStyle:background-color
と--enable-color
の--disable-color
プロパティの2つの16進カラー値を切り替えたいと思います。
各色成分がrgb(r,g,b)
を使用して計算されるcalc()
カラー形式を使用すると、これを実現できましたが、16進数のカラー値を直接切り替えることをお勧めします。
:root {
--enable: 0;
--disable-color: #ff0000;
--disable-r: 255;
--disable-g: 0;
--disable-b: 0;
--enable-color: #00ff00;
--enable-r: 0;
--enable-g: 255;
--enable-b: 0;
}
.MyBtnStyle {
width: 100%;
height: 100%;
text-align: center;
border: 2px;
margin: 1px 1px;
color: black;
padding: 1px 1px;
background-color: calc(var(--enable-color)*var(--enable) + var(--disable-color)*(1 - var(--enable)));
}
/* this works */
/* rgb( calc(var(--enable-r)*var(--enable) + var(--disable-r)*(1 - var(--enable)) ),
calc(var(--enable-g)*var(--enable) + var(--disable-g)*(1 - var(--enable)) ),
calc(var(--enable-b)*var(--enable) + var(--disable-b)*(1 - var(--enable)) )) */
あなたがしているように16進値を掛けることはできません。秘訣は、グラデーションを使用して色の割合を制御することです。これは、どの色形式でも機能します。
:root {
--enable: 0;
--disable-color: red;
--enable-color: #00ff00;
}
.MyBtnStyle {
text-align: center;
margin: 5px;
color: black;
padding:20px;
background:
linear-gradient(
var(--enable-color) calc(100% * var(--enable)),
var(--disable-color) calc(100% * var(--enable)),
var(--disable-color) calc(100% * (1 - var(--enable)))
);
}
<div class="MyBtnStyle" style="--enable:1">some text</div>
<div class="MyBtnStyle">some text</div>
background-size
を調整する別の構文は次のとおりです。
:root {
--enable: 0;
--disable-color: red;
--enable-color: #00ff00;
}
.MyBtnStyle {
text-align: center;
margin: 5px;
color: black;
padding:20px;
background:
linear-gradient(var(--enable-color),var(--enable-color)),
var(--disable-color);
background-size:100% calc(100% * var(--enable))
}
<div class="MyBtnStyle" style="--enable:1">some text</div>
<div class="MyBtnStyle">some text</div>