学習ガイドテーマ設定

テーマ設定

Svelte Flow は最小限のデフォルトスタイルで提供され、完全にカスタマイズできるように設計されています。多くのユーザーが、Svelte Flow のルックアンドフィールを独自のブランドやデザインシステムに合わせて完全に変換しています。このガイドでは、Svelte Flow の外観をカスタマイズできるさまざまな方法を紹介します。

デフォルトのスタイル

Svelte Flow のデフォルトスタイルは、組み込みノードを使用するには十分です。パディング、ボーダー半径、アニメーション化されたエッジなどのスタイルに、いくつかの適切なデフォルト値が提供されています。以下のようになります。

import '@xyflow/svelte/dist/style.css';
<script lang="ts">
const data: string = "world";
</script>

<h1>Hello {data}</h1>

<style>
h1 {
  font-size: 1.5rem;
}
</style>
読み取り専用

基本スタイル

Svelte Flow の動作に不可欠な非常に基本的なスタイルのみを読み込みたい場合は、代わりに基本スタイルをインポートできます。

import '@xyflow/svelte/dist/base.css';
<script lang="ts">
const data: string = "world";
</script>

<h1>Hello {data}</h1>

<style>
h1 {
  font-size: 1.5rem;
}
</style>
読み取り専用

カスタマイズ

Svelte Flow の外観をカスタマイズするには、さまざまな方法があります。

  • カスタムノードとエッジ内でスコープ付き CSS を使用する
  • 組み込みクラスをカスタム CSS でオーバーライドする
  • Svelte Flow が使用する CSS 変数をオーバーライドする
  • style プロップスを介してインラインスタイルを渡す

組み込みクラスの操作

デフォルトのスタイルをオーバーライドする場合は、組み込み CSS クラスをオーバーライドすることで実行できます。Svelte Flow で使用されるすべてのクラスのリストを以下に示します。

クラス名説明
.svelte-flow一番外側のコンテナ
.svelte-flow__renderer内側のコンテナ
.svelte-flow__zoompaneズーム&パンペイン
.svelte-flow__selectionpane選択ペイン
.svelte-flow__selectionユーザー選択
.svelte-flow__edgesフロー内のすべてのエッジを含む要素
.svelte-flow__edgeフロー内の各 エッジ に適用されます
.svelte-flow__edge.selectedエッジ が選択されたときに追加されます
.svelte-flow__edge.animatedエッジanimated プロパティが true のときに追加されます
.svelte-flow__edge-path エッジの SVG <path /> 要素
.svelte-flow__edge-labelエッジラベル
.svelte-flow__connection現在の接続ラインに適用されます
.svelte-flow__connection-path接続ラインの SVG <path />
.svelte-flow__nodesフロー内のすべてのノードを含む要素
.svelte-flow__nodeフロー内の各 ノード に適用されます
.svelte-flow__node.selectedノード が選択されたときに追加されます。
.svelte-flow__node-defaultノード タイプが "default" の場合に追加されます
.svelte-flow__node-inputノード タイプが "input" の場合に追加されます
.svelte-flow__node-outputノード タイプが "output" の場合に追加されます
.svelte-flow__node-groupノード タイプが "group" の場合に追加されます
.svelte-flow__nodesselectionノード選択
.svelte-flow__nodesselection-rectノード選択四角形
.svelte-flow__handle<Handle /> コンポーネントに適用されます
.svelte-flow__handle-topハンドルの 位置"top" に設定されている場合に適用されます
.svelte-flow__handle-rightハンドルの 位置"right" に設定されている場合に適用されます
.svelte-flow__handle-bottomハンドルの 位置"bottom" に設定されている場合に適用されます
.svelte-flow__handle-leftハンドルの 位置"left" に設定されている場合に適用されます
.svelte-flow__handle.connecting接続ラインがハンドルの真上にある場合に適用されます。
.svelte-flow__handle.valid接続ラインがハンドルの真上にあり、かつ接続が有効な場合に適用されます
.svelte-flow__background<Background /> コンポーネントに適用されます
.svelte-flow__minimap<MiniMap /> コンポーネントに適用されます
.svelte-flow__controls<Controls /> コンポーネントに適用されます
⚠️

ソースコードを調べてオーバーライドする他のクラスを探しても、注意が必要です。一部のクラスは内部的に使用されており、ライブラリが機能するために必要です。それらを置き換えると、予期しないバグやエラーが発生する可能性があります。

CSS 変数

デフォルトのスタイル全体を置き換えるのではなく、全体的なルックアンドフィールを微調整したいだけの場合は、ライブラリ全体で使用している CSS 変数のいくつかをオーバーライドできます。

これらの変数は、ほとんどが自明です。以下は、微調整が必要なすべての変数とそのデフォルト値の表です。

変数名デフォルト
--xy-edge-stroke-default#b1b1b7
--xy-edge-stroke-width-default1
--xy-edge-stroke-selected-default#555
--xy-connectionline-stroke-default#b1b1b7
--xy-connectionline-stroke-width-default1
--xy-attribution-background-color-defaultrgba(255, 255, 255, 0.5)
--xy-minimap-background-color-default#fff
--xy-background-pattern-dot-color-default#91919a
--xy-background-pattern-line-color-default#eee
--xy-background-pattern-cross-color-default#e2e2e2
--xy-node-color-defaultinherit
--xy-node-border-default1px solid #1a192b
--xy-node-background-color-default#fff
--xy-node-group-background-color-defaultrgba(240, 240, 240, 0.25)
--xy-node-boxshadow-hover-default0 1px 4px 1px rgba(0, 0, 0, 0.08)
--xy-node-boxshadow-selected-default0 0 0 0.5px #1a192b
--xy-handle-background-color-default#1a192b
--xy-handle-border-color-default#fff
--xy-selection-background-color-defaultrgba(0, 89, 220, 0.08)
--xy-selection-border-default1px dotted rgba(0, 89, 220, 0.8)
--xy-controls-button-background-color-default#fefefe
--xy-controls-button-background-color-hover-default#f4f4f4
--xy-controls-button-color-defaultinherit
--xy-controls-button-color-hover-defaultinherit
--xy-controls-button-border-color-default#eee
--xy-controls-box-shadow-default0 0 2px 1px rgba(0, 0, 0, 0.08)

これらの変数は、Svelte Flow の様々な要素の *デフォルト* を定義するために使用されます。つまり、インラインスタイルやカスタムクラスによって要素ごとに上書きすることができます。変数を上書きする場合は、以下を追加することで可能です。

.svelte-flow {
  --xy-node-background-color-default: #ff5050;
}
⚠️

これらの変数は `.svelte-flow` と `:root` の下で定義されていることに注意してください。

Tailwind

Tailwind CSS

カスタムノードとエッジは単なる Svelte コンポーネントであり、好きなスタイリングソリューションを使用してスタイルを設定できます。たとえば、Tailwind を使用してノードのスタイルを設定することができます。

<script lang="ts">
  import { Handle, Position, type NodeProps } from '@xyflow/svelte';
 
  type $$Props = NodeProps;
  export let data: $$Props['data'];
</script>
 
<div class="px-4 py-2 shadow-md rounded-md bg-white border-2 border-stone-400">
  <div class="flex">
    <div class="rounded-full w-12 h-12 flex justify-center items-center bg-gray-100">
      {data.emoji}
    </div>
    <div class="ml-2">
      <div class="text-lg font-bold">{data.name}</div>
      <div class="text-gray-500">{data.job}</div>
    </div>
  </div>
  <Handle
    type="target"
    position={Position.Top}
    class="w-16 !bg-teal-500 rounded-none border-none"
  />
  <Handle
    type="source"
    position={Position.Bottom}
    class="w-16 !bg-teal-500 rounded-none border-none"
  />
</div>
⚠️

デフォルトのスタイルを上書きする場合は、Svelte Flow の基本スタイルの後に Tailwind のエントリポイントをインポートしてください。

import '@xyflow/svelte/dist/style.css';
import 'tailwind.css';

Tailwind と Svelte Flow を使用した完全な例については、Tailwind の例をご覧ください。