あなたの前提はかなり混乱しています...
CSS Typed OM は、作成された値を解析して内部に保存されている CSS 値を取得することを目的としています。
この API は、現在の API がそのフォーマットされた値のみを返すという事実を回避することを意図しているため、標準化されたフォーマットされた値が必要な場合に使用しても意味がありません。
したがって、標準化されたフォーマットされた値が本当に必要な場合は、次のルールに従って <color> コンポーネントをシリアル化する仕様ごとgetComputedStyle
に使用します。
つまり、不透明な場合は常に になりrgb()
、アルファがある場合は常に になりrgba()
ます。
document.querySelectorAll('.test > div').forEach( elem => {
console.log( 'formatted as', getComputedStyle(elem)['background-color'] );
} );
.named-color { background-color: magenta; }
.currentcolor { background-color: currentColor; }
.no-alpha-hex { background-color: #FF00FF; }
.no-alpha-rgb { background-color: rgb(255,0,255); }
.no-alpha-rgb-perc { background-color: rgb(100%,0%,100%); }
.no-alpha-hsl { background-color: hsl(300deg, 100%, 50%); }
.no-alpha-rgba { background-color: rgb(255,0,255,1); }
.no-alpha-rgba-perc { background-color: rgb(100%,0%,100%,1); }
.no-alpha-hsla { background-color: hsl(300deg, 100%, 50%,1); }
.alpha-hex { background-color: #FF00FF80; }
.alpha-rgba { background-color: rgba(255,0,255,0.5); }
.alpha-rgba-perc { background-color: rgba(100%,0%,100%,0.5); }
.alpha-hsla { background-color: hsla(300deg, 100%, 50%,0.5); }
.test { color: magenta; }
.test > div {
width: 100%;
height: 5px;
}
<div class="test">
<div class="named-color"></div>
<div class="currentcolor"></div>
<div class="no-alpha-hex"></div>
<div class="no-alpha-rgb"></div>
<div class="no-alpha-rgb-perc"></div>
<div class="no-alpha-hsl"></div>
<div class="no-alpha-rgba"></div>
<div class="no-alpha-rgba-perc"></div>
<div class="no-alpha-hsla"></div>
<div class="alpha-hex"></div>
<div class="alpha-rgba"></div>
<div class="alpha-rgba-perc"></div>
<div class="alpha-hsla"></div>
</div>
CSS Typed OM が CSSColorValue を導入する場合、これらのすべてのフォーマット (および CSS-colors-4 によって導入された多くの新しいフォーマット) を個別に処理する必要があります。