【Figma】CSSで実装できる機能・できない機能(Effect編)

  • URLをコピーしました!

2025年10月時点で広くサポートされているCSSで実装できるかどうかの観点で、Figmaの機能を見ていきます。
(SVGフィルターやJavaScriptでの実装が必要なものは「CSSで実装できない」と捉えます)

この記事ではFigmaのフレームに対して適用可能な「Effect(エフェクト)」について述べます。
(その他の機能については触れません)

目次

前提

FigmaではEffectを複数重ね掛けすることができますが、CSSでは重ね掛けしすぎるとレンダリングに問題が出る場合があります。

また、単一の機能としてはCSSで実現可能でも、他の条件と複合すると実現できなくなる場合があります

この記事で「CSSでほぼできる」とした機能でも、CSSで実装するとFigma通りのレンダリングにならない場合があることに留意してください。

CSSに無い

Layer blur(レイヤーブラー) と Background blur(背景ぼかし)の Progressive(プログレッシブ)

いわゆるプログレッシブブラーと呼ばれる、段階的なブラーはCSSにはありません。

CSSのbackdrop-filtermask を利用して、疑似的なプログレッシブブラーを作ることができますが、疑似的なものです。(プログレッシブブラー表現のために大量のdivを設置する方法は通常の制作では現実的ではないでしょう)

参考:https://qiita.com/kskwtnk/items/569a36c802e46eeffef5

Noise(ノイズ)

NoiseはMono、Duo、MultiのいずれもCSSにはありません。

Effect: Noise, Mono, Noise size:0.5, Density:100%, Color: 000000 25%

単なる画像加工の目的なら、そのままノイズ付きの画像としてエクスポートしましょう。

CSSで実装する必要があるならノイズと画像を分ける

たとえばCMSで投稿した画像にCSSでノイズを付与する必要があるなら、ノイズ単体と画像単体をそれぞれ別々の要素にして乗算等で重ねて配置してあげましょう。

このときノイズは100~200px程度のシームレスパターンであると理想的です。
目の細かなノイズの場合シームレスパターンでなくても適当なサイズで切り取って繰り返し(background-repeat)してもつなぎ目は目立ちません。

Noiseの代わりのフレームに画像とノイズテクスチャが重ねて設定されている様子。ノイズ画像は不透明度50%乗算。

Texture(テクスチャー)

TextureはCSSにはありません。

Effect: Texture, Size:0.5, Radius:4

近いCSS表現もないため、そのままテクスチャー付きの画像としてエクスポートする必要があります。

画像のふちのもちゃもちゃが不要な場合は、Clip to shape(シェイプにクリップする)で、フレーム境界でふちを切り落としておくと、画像として利用しやすくなります。

Glass(ガラス)

GlassはCSSにはありません。

Glass(Beta), Light -45° 80%, Refraction:80, Depth:20, Dispersion:50, Frost:4

近いCSS表現もないため、そのまま画像としてエクスポートする必要があります。

CSSで実装する必要があるならBackground blur(背景ぼかし)にする

CSSで実装する必要があるなら、後述するBackground blurとInner shadowに必要に応じてStrokeを組み合わせて表現しておきましょう。(歪みの表現はできません)

Glassの表現と、Background blur×Inner shadowの表現の差

CSSでほぼできる(同じにならないこともある)

Drop shadow(ドロップシャドウ)

FigmaのDrop shadowはCSSでは通常box-shadowで実装します。

Effects: Drop shadow, Position: X0 Y4, Blur: 4, Spread: 0, Color: 000000 25%

開発モードで出るCSS

box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.25);

filter: drop-shadow(0 4px 4px rgba(0, 0, 0, 0.25)); としても近い結果が得られますが「Spreadの指定ができない」「レンダリングが重め」という違いがあります。

単純な四角形の要素に適用する場合、Figmaと近い見た目になるのは box-shadow です。

FigmaとCSS box-shadow drop-shadow()の表示比較

FigmaのDrop shadowにできて、CSSのbox-shadowにできないこと

FigmaのDrop shadowは内部に複数の要素を持つフレームやグループに対して適用した場合、filter: drop-shadow() のように透過を考慮した形状になります。

CSSのbox-shadowは各要素の透過を考慮しない形状(つまり四角形)になり、シャドウは各要素のすぐ後ろ側に来るので、要素間よりシャドウが大きくなると要素の上にシャドウが重なります

filter: drop-shadow() の場合、透過を考慮した形状にできますが、シャドウの広がり方がFigmaと異なります。

複数の要素を持つフレームやグループに対して適用した場合のFigmaとCSS の表示比較

box-shadow の形状はborder-radius については考慮します。

Inner shadow(インナーシャドウ)

FigmaのInner shadowはCSSではbox-shadowで実装します。※ただし inset キーワードを追加する

Effects: Inner shadow, Position: X0 Y4, Blur: 4, Spread: 0, Color: 000000 25%

開発モードで出るCSS

box-shadow: 0 4px 4px 0 rgba(0, 0, 0, 0.25) inset;

単純な四角形の要素に適用する場合、FigmaとCSSのbox-shadow はほぼ同じ見た目になります。

Drop shadowとは異なり、CSSのfilter プロパティは利用できません

FigmaとCSS box-shadow の表示比較

FigmaのInner shadowにできて、CSSのbox-shadowにできないこと

FigmaのInner Shadowは適用する要素の透過を考慮した形状で適用されます。

CSSの box-shadow は、透過を考慮しない形状(つまり四角形)になるため、CSSではFigmaとは異なる四角形のシャドウが描画されます。

ハート型の要素にInner shadowを適用した場合のFigmaとCSSの表示比較

box-shadow の形状はborder-radius については考慮します。

Layer blur: Uniform(レイヤーブラー: ユニフォーム)

FigmaのLayer blurはCSSではfilter:blur()で実装します。

※前述のとおりProgressive(プログレッシブ)はCSSで出ません

Layer blur, Uniform, Blur: 4

開発モードで出るCSS

filter: blur(2px);

ブラウザのぼかしの計算方法によってFigmaと完全に一致しない場合もありますが、おおむねFigmaと同じレンダリングになります。

ただし、Figma上でBlurを4 で指定した場合、CSSでは 2px で指定する必要があります。

FigmaとCSS blur() の表示比較

インタラクション(動き・変化)が無い画像は、「ぼかした画像」を書き出して

CSSのfilterプロパティは、描画のためにブラウザに計算させる分、描画の負荷が高くなります。
CSSで変化させる必要が無い画像は、画像として書き出しましょう。

背景画像で用いるなど、画像のふちのボケが不要な場合は、下記の手順でふちのボケを切り落としておくと、画像として利用しやすくなります。

  1. Layer blurをかけた要素を同サイズのフレームで囲む
  2. 外側のフレームの[ Clip content ]をオンにする
親フレームに Clip content、子フレームにLayer blurがかかっている
フレームの境界線の外まで色がにじんでいる状態から、フレームの境界線の中に納まっている状態への変化

Background blur: Uniform(背景のぼかし: ユニフォーム)

FigmaのBackground blurはCSSではbackdrop-filter:blur()で実装します。

※前述のとおりProgressive(プログレッシブ)はCSSで出ません

開発モードで出るCSS

backdrop-filter: blur(2px);

ブラウザのぼかしの計算方法によってFigmaと完全に一致しない場合もありますが、おおむねFigmaと同じレンダリングになります。

ただし、Figma上でBlurを4 で指定した場合、CSSでは 2px で指定する必要があります。

ただしfilter プロパティと同じく、描画のための計算コストが高く、他のCSSとの組み合わせでは適用できない・レンダリングが壊れる場合があります。

CSSでできるかどうかを確認するためのヒント

CSSでできるかどうかは、実装して各種ブラウザでチェックしてみないと分からない場合もあります。
(CSSの組み合わせ方や、ブラウザのバグによって実装できない場合があるため)

ただ「開発モードに値が出ないので無理そう」と分かるものもあるため、無理そうかどうかの判断のヒントのひとつにしてみてください。

  • Inner shadow: 開発モードに出る・ほぼできる
  • Drop shadow: 開発モードに出る・ほぼできる
  • Layer blur (Uniform): 開発モードに出る・ほぼできる
  • 🆖 Layer blur (Progressive): 開発モードに出るけどUniformと同じ・できない
  • Background blur (Uniform): 開発モードに出る・ほぼできる
  • 🆖 Background blur (Progressive): 開発モードに出るけどUniformと同じ・できない
  • 🆖 Noise: 開発モードに出ない・できない
  • 🆖 Texture: 開発モードに出ない・できない
  • 🆖 Glass: 開発モードに出ない・できない
よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

CAPTCHA

目次