UNTIL.LT #0x07
CSS だけでモンテカルロ法を実装する
→ 本当に CSS はなんでもできる?
:root {
--px-width: calc(100vw / 1px);
}結果 → 無効
現行のブラウザでの実装では calc() はまだ単位付き同士の除算ができない
div {
width: calc(100vw / 5px);
}↑ 余談:w3.org は埋め込みを許してくれない
まあなんか、仕様的にはOK
しかし実装を待ってられない!!
実際にあなたがブラウザの実装を待っている間にも
ライバルはCSSで黒魔術を続けている
今日はこれを回避するテク
元ネタ
CSS Type Casting to Numeric: tan(atan2()) Scalars - Jane Ori
https://dev.to/janeori/css-type-casting-to-numeric-tanatan2-scalars-582j
ここでおもむろに CSS WG の CSS Values and Units Module Level 4 を見てみる
min や max、clamp といった比較関数が追加されているその他にも
roundrem, modpowsqrtlogexpabssignsin, cos, tan, asin, ...余談:これらを組み合わせると……
calc((1 + sqrt(5)) / 2)calc(pow(e, pi))などが CSS で使うことができる
\[\begin{aligned} \tan( \mathrm{atan2}(Y, X) ) = \frac{Y}{X} \end{aligned} \]
atan2(y, x) は傾き y/x の角度 $\theta$ を表すtan() を適用 → もとの比率 y/x が戻るCSS には tan() と atan2 がある
tan(atan2()) は単なるスカラー値になる
ブラウザは単位付き値でも評価してくれる
つまり、
:root {
--px-width: tan(atan2(100vw, 1px))
}とすると、100vw が何ピクセルであるか得られる
長さをキャストして <number> 型として得る
その他にも
その他にも
rem → px)tan(atan2(1em, 1px))その他にも
tan(atan2(100cqi, 1px))その他にも
s → ms)みなさんも黒魔術 CSS を書こう!