📐
CSSで近似スーパー楕円 (Approximated superellipse by CSS)
スーパー楕円に近い形をCSSでシンプルに表現することができたので備忘録。
完全なスーパー楕円はCSSのみで実現するのは非常に難しく、Web上では擬似要素を用いて近似した形をつけるなどの手法でスーパー楕円を表現しているものが散見される。これらは曲線の接合部分が環境によっては不自然になったり、image
要素などをマスクするのに使いづらかったりと問題点が多い。
この手法では、CSSのborder-radius
プロパティとtransform
プロパティにより変形することで、擬似要素を用いない単一のdiv
要素で近似スーパー楕円を表現している。
説明
斜めのスーパー楕円に見える図形をなんとかborder-radius
で描画できたので、transform
のrotete
プロパティにてまっすぐに見えるようにしている。
rotete
しているので、image
要素を配置してアイコンにする場合などは中の要素に対して逆向きのrotate
を指定するとよい。
資料
スーパー楕円の式
今回近似したスーパー楕円との比較
薄い赤色でオーバーレイしているのが今回CSSで近似したスーパー楕円。
課題(CSSのみでは解決不可能かも)
-
(縦横が同じ大きさ)のものしか作れないa=b -
の値を変更した形は試した限りでは実現できなかった(本当はn を目指してた)n=2.5
高度なことがしたければ大人しくJavaScriptかSVGを使う方が早い(戒め)
参考
Discussion