3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CSSで近似スーパー楕円 (Approximated superellipse by CSS)

Last updated at Posted at 2021-02-03

スーパー楕円に近い形をCSSでシンプルに表現することができたので備忘録。

完全なスーパー楕円はCSSのみで実現するのは非常に難しく、Web上では擬似要素を用いて近似した形をつけるなどの手法でスーパー楕円を表現しているものが散見される。これらは曲線の接合部分が環境によっては不自然になったり、image要素などをマスクするのに使いづらかったりと問題点が多い。

この手法では、CSSのborder-radiusプロパティとtransformプロパティにより変形することで、擬似要素を用いない単一のdiv要素で近似スーパー楕円を表現している。

See the Pen Approximated super ellipsox by CSS by Kozy a.k.a. Tab (@kozycorner) on CodePen.

説明

斜めのスーパー楕円に見える図形をなんとかborder-radiusで描画できたので、transformroteteプロパティにてまっすぐに見えるようにしている。

borer-radius.png

roteteしているので、image要素を配置してアイコンにする場合などは中の要素に対して逆向きのrotateを指定するとよい。

資料

スーパー楕円の式

\left| \frac{x}{a} \right| ^{n} + \left| \frac{y}{b} \right| ^{n} = 1

$n$:スーパー楕円の丸みを決める値
$a,b$:大きさ

$n$は$2$のときが楕円($a=b$なら正円)で、それより大きいほど長方形($a=b$なら正方形)に近づく。理想的なスーパー楕円は$n=2.5$とされているらしい。

今回近似したスーパー楕円との比較

薄い赤色でオーバーレイしているのが今回CSSで近似したスーパー楕円。$n=2.3$のスーパー楕円とほぼ同じことが確認できる。

superellipse.png

\left| x \right| ^{n} + \left| y \right| ^{n} = 1

課題(CSSのみでは解決不可能かも)

  • $a=b$(縦横が同じ大きさ)のものしか作れない
  • $n$の値を変更した形は試した限りでは実現できなかった(本当は$n=2.5$を目指してた)

高度なことがしたければ大人しくJavaScriptかSVGを使う方が早い(戒め)

参考

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?