テーマ設定
Svelte Flow は最小限のデフォルトスタイルで提供され、完全にカスタマイズできるように設計されています。多くのユーザーが、Svelte Flow のルックアンドフィールを独自のブランドやデザインシステムに合わせて完全に変換しています。このガイドでは、Svelte Flow の外観をカスタマイズできるさまざまな方法を紹介します。
デフォルトのスタイル
Svelte Flow のデフォルトスタイルは、組み込みノードを使用するには十分です。パディング、ボーダー半径、アニメーション化されたエッジなどのスタイルに、いくつかの適切なデフォルト値が提供されています。以下のようになります。
import '@xyflow/svelte/dist/style.css';
基本スタイル
Svelte Flow の動作に不可欠な非常に基本的なスタイルのみを読み込みたい場合は、代わりに基本スタイルをインポートできます。
import '@xyflow/svelte/dist/base.css';
カスタマイズ
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-default | 1 |
--xy-edge-stroke-selected-default | #555 |
--xy-connectionline-stroke-default | #b1b1b7 |
--xy-connectionline-stroke-width-default | 1 |
--xy-attribution-background-color-default | rgba(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-default | inherit |
--xy-node-border-default | 1px solid #1a192b |
--xy-node-background-color-default | #fff |
--xy-node-group-background-color-default | rgba(240, 240, 240, 0.25) |
--xy-node-boxshadow-hover-default | 0 1px 4px 1px rgba(0, 0, 0, 0.08) |
--xy-node-boxshadow-selected-default | 0 0 0 0.5px #1a192b |
--xy-handle-background-color-default | #1a192b |
--xy-handle-border-color-default | #fff |
--xy-selection-background-color-default | rgba(0, 89, 220, 0.08) |
--xy-selection-border-default | 1px 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-default | inherit |
--xy-controls-button-color-hover-default | inherit |
--xy-controls-button-border-color-default | #eee |
--xy-controls-box-shadow-default | 0 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 の例をご覧ください。