CSSグラデーションでsin関数を活用して円形グラデーションや波形グラデーションを作成する方法

2024-04-02

CSSのMiscellaneousにおけるsin関数

sin関数の使い方

sin関数は以下の構文で記述します。

sin( <angle> )
  • <angle> は角度を指定します。角度は度数法またはラジアン法で指定できます。

例:

/* 角度30度の正弦を計算 */
sin(30deg);

/* ラジアン法で角度π/2の正弦を計算 */
sin(pi() / 2);

sin関数の応用例

アニメーション

sin関数はアニメーションのタイミング関数として使用できます。例えば、以下のようなコードは、要素を上下に波打たせるアニメーションを作成します。

@keyframes wave {
  0% {
    top: 0;
  }
  50% {
    top: 50px * sin(360deg * time() / 2s);
  }
  100% {
    top: 0;
  }
}

.element {
  animation: wave 2s infinite;
}

グラデーション

sin関数はグラデーションの角度を制御するために使用できます。例えば、以下のようなコードは、円形のグラデーションを作成します。

radial-gradient(
  circle at center,
  hsla(0, 100%, 50%, 1) 0%,
  hsla(0, 100%, 50%, 0.5) 50%,
  hsla(0, 100%, 50%, 0) 100%
)

上記コード中の50%の部分を50% + 50% * sin(180deg * time() / 5s)のように変更すると、グラデーションが時間経過とともに回転するアニメーションを作成できます。

sin関数と合わせて、cos関数やtan関数も使用できます。これらの関数はそれぞれ三角関数の余弦と正接を計算します。

詳細は以下のリソースを参照してください。



sin関数を使ったサンプルコード

アニメーション

@keyframes wave {
  0% {
    top: 0;
  }
  50% {
    top: 50px * sin(360deg * time() / 2s);
  }
  100% {
    top: 0;
  }
}

.element {
  animation: wave 2s infinite;
}

左右に揺れるアニメーション

@keyframes swing {
  0% {
    transform: translateX(0);
  }
  50% {
    transform: translateX(20px * sin(360deg * time() / 1s));
  }
  100% {
    transform: translateX(0);
  }
}

.element {
  animation: swing 1s infinite;
}

回転アニメーション

@keyframes rotate {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg * sin(360deg * time() / 2s));
  }
}

.element {
  animation: rotate 2s infinite;
}

グラデーション

円形グラデーション

radial-gradient(
  circle at center,
  hsla(0, 100%, 50%, 1) 0%,
  hsla(0, 100%, 50%, 0.5) 50%,
  hsla(0, 100%, 50%, 0) 100%
)

角度が変化する円形グラデーション

radial-gradient(
  circle at center,
  hsla(0, 100%, 50%, 1) 0%,
  hsla(0, 100%, 50%, 0.5) 50%,
  hsla(0, 100%, 50%, 0) 100%
)

@keyframes rotate-gradient {
  0% {
    background-position: 0% 50%;
  }
  100% {
    background-position: 50% * sin(180deg * time() / 5s) 50%;
  }
}

.element {
  animation: rotate-gradient 5s infinite;
}

波形のグラデーション

linear-gradient(
  to right,
  hsla(0, 100%, 50%, 1) 0%,
  hsla(0, 100%, 50%, 0.5) 50%,
  hsla(0, 100%, 50%, 0) 100%
)

@keyframes wave-gradient {
  0% {
    background-position: 0% 0%;
  }
  100% {
    background-position: 50% * sin(180deg * time() / 2s) 0%;
  }
}

.element {
  animation: wave-gradient 2s infinite;
}

複数のsin関数を組み合わせる

@keyframes complex-wave {
  0% {
    top: 0;
  }
  50% {
    top: 50px * (sin(360deg * time() / 2s) + sin(720deg * time() / 4s));
  }
  100% {
    top: 0;
  }
}

.element {
  animation: complex-wave 2s infinite;
}

cos関数とtan関数を使う

@keyframes


sin関数のその他の方法

sin関数はアニメーションのタイミング関数として使用できます。

@keyframes wave {
  0% {
    top: 0;
  }
  50% {
    top: 50px * sin(360deg * time() / 2s);
  }
  100% {
    top: 0;
  }
}

.element {
  animation: wave 2s infinite;
  animation-timing-function: cubic-bezier(sin(0deg), sin(90deg), sin(180deg), sin(270deg));
}

上記コードでは、cubic-bezier関数の4つのパラメータにsin関数を設定することで、滑らかな動きを実現しています。

ベジェ曲線の制御点

sin関数を使用してベジェ曲線の制御点を設定できます。

path {
  d: M 0 0 C 50 50 * sin(90deg), 100 0, 150 50;
}

上記コードでは、Cコマンドの2番目の制御点のY座標にsin関数を設定することで、曲線を滑らかにしています。

その他の関数と組み合わせる

sin関数は、他の関数と組み合わせることで、より複雑な動きや形状を作成できます。

@keyframes rotate {
  0% {
    transform: rotate(0deg);
  }
  100% {
    transform: rotate(360deg * sin(360deg * time() / 2s) * cos(360deg * time() / 4s));
  }
}

.element {
  animation: rotate 2s infinite;
}

上記コードでは、sin関数とcos関数を組み合わせることで、回転方向が時間経過とともに変化するアニメーションを作成しています。

変数を動的に変化させる

CSS変数とJavaScriptを組み合わせることで、sin関数の引数を変動させ、アニメーションを動的に変化させることができます。

<script>
const angle = document.querySelector('#angle');

function update() {
  angle.style.setProperty('--angle', sin(360deg * time() / 2s));
}

setInterval(update, 100);
</script>

<style>
:root {
  --angle: 0deg;
}

.element {
  transform: rotate(var(--angle));
}
</style>

上記コードでは、JavaScriptで--angleというCSS変数を更新し、sin関数の引数として渡しています。

Web Componentsを使用して、sin関数を再利用可能なコンポーネントとしてカプセル化できます。

<custom-element name="sin-wave">
  <template>
    <div style="width: 100px; height: 100px; background-color: red; animation: wave 2s infinite;">
      <slot></slot>
    </div>
  </template>

  <script>
    class SinWave extends HTMLElement {
      constructor() {
        super();

        this.shadowRoot = this.attachShadow({mode: 'open'});

        const style = document.createElement('style');
        style.textContent = `
          @keyframes wave {
            0% {
              top: 0;
            }
            50% {
              top: 50px * sin(360deg * time() / 2s);
            }
            100% {
              top: 0;
            }
          }
        `;
        this.shadowRoot.appendChild(style);
      }
    }

    customElements.define('sin-wave', SinWave);
  </script>
</custom-element>

上記コードでは、sin-waveという名前のWeb Componentsを作成し、sin関数を使用して波打つアニメーションを実現しています。

これらの方法はほんの一例です。sin関数はさまざまな方法で使用できます。




Flexbox や CSS Grid で実現!Miscellaneous 書き込みモードの代替方法

writing-modeプロパティには、horizontal-tb、vertical-rl、vertical-lrなど、いくつかの標準的な書き込みモードがあります。さらに、Miscellaneousと呼ばれる特殊な書き込みモードも存在します。



CSS Miscellaneous: view-timeline-name 詳細解説

view-timeline-name は CSS の Miscellaneous モジュールで定義されるプロパティで、スクロールタイムラインの名前を指定します。スクロールタイムラインは、スクロールによってアニメーションを制御するために使用されます。


CSS Miscellaneous: user-selectプロパティの徹底解説

user-select プロパティは、ユーザーがテキストを選択できるかどうかを制御します。これは、ユーザーインターフェースの利便性を向上させたり、重要なコンテンツを保護したりするために使用できます。値auto: ユーザーがテキストを選択できます。これはデフォルト値です。


まとめ:text-overflow プロパティを使いこなして、見やすく機能的なWebサイトを作ろう!

text-overflow プロパティは、要素内に収まりきらなかったテキストをどのように表示するかを制御します。これは、長いタイトルや文章を扱う際に、見やすくするために役立ちます。値:ellipsis: 省略記号(…)を表示します。これがデフォルト値です。


Morrow County, Oregon で開発された translateZ() 関数

translateZ() 関数は、CSS Transforms 機能の一つで、要素を Z軸方向 に移動させるために使用します。3D 空間における Z軸Z軸は、ブラウザ画面から垂直に奥に向かって伸びる軸です。 translateZ() 関数で要素を 正の値 で移動すると、画面から奥に移動し、 負の値 で移動すると、画面手前に移動します。



アニメーションも自由自在!CSS transform rotate3d() で表現の幅を広げる

rotate3d() 関数は、要素を 3D 空間で回転させるための CSS transform プロパティの一部です。この関数は、X 軸、Y 軸、および Z 軸のいずれかを中心に要素を回転させることができます。構文:引数:x: X 軸を中心に回転させる角度を度数で指定します。正の値は時計回りの回転、負の値は反時計回りの回転を表します。


::view-transition-old を使ったページ遷移アニメーション

この疑似要素を使うメリットページ遷移時のアニメーションをより自然に表現できます。遷移前の画面の一部を保持することで、ユーザーの視覚的な混乱を軽減できます。遷移前の画面に要素を追加することで、情報伝達を強化できます。::view-transition-old の使い方


角丸デザインを簡単に実現!CSSのborder-radiusプロパティ

CSSにおける "Miscellaneous" カテゴリは、要素の形状、配置、装飾などをコントロールするプロパティ群を指します。その中でも "round" は、要素の角を丸く表現する機能を提供するプロパティです。round プロパティborder-radius プロパティは、要素の境界線の角の丸みを設定します。値をピクセル単位で指定することで、角の丸み具合を調整できます。


CSS Transforms matrix3d() 関数の詳細解説: 3D 空間における要素のあらゆる変形を可能にする強力なツール

matrix3d() の仕組み:matrix3d() は、16 個の数字からなる 3D 変形マトリックス を受け取り、そのマトリックスに基づいて要素を変形します。マトリックス内の各数字は、要素の位置、回転、拡大縮小、傾斜など、特定の変形パラメータに対応します。


CSS Miscellaneous モジュールにおける border-color プロパティの詳細解説

使い方border-color プロパティは、要素のすべての境界線の色を一度に設定したり、個別に設定したりすることができます。すべての境界線の色を設定する個別に設定する色の指定方法border-color プロパティは、以下のいずれかの方法で色を指定できます。