Open14

HTML化し易いFigmaテンプレートを作ろうとして困った点

tristartristar

FigmaでHTML化し易いテンプレートを作成しようとして困った点がいくつかあり、メモしておこうと思います。

tristartristar

レイアウトグリッド周り

tristartristar
  • レイアウトグリッドを使うと境界でスナップが効くが、幅指定は列数や%指定が出来ないのでHTML化やレスポンシブ対応が難しそう。

    • Variablesのモード機能を使えば端末別に幅を定義出来るかもしれないものの、モード機能はダークモード対応でも使うので、ダークモード対応+レスポンシブ対応が必要だとモード数が2倍になってしまう。
  • レイアウトグリッドを使ったフレームの中に別のフレームを作成、その中に新しいフレームを作ると、スナップしてくれない

    • これについては以下のようにルーラーでガイド線を引くとスナップするようになるので、何とか対処できそう。
tristartristar

TailWindCSSのデフォルトのデザイントークンで対応しようとした場合の概念の不一致

tristartristar

1つのフレームに対しエフェクトのスタイルを1つしか指定することが出来ない。
Blurのエフェクトスタイルを割り当てていると、「同じフレームに追加でドロップシャドウのエフェクトスタイルも割り当てたい」といったことが出来ない。

実現するには以下が必要になる。

  • 「背景のぼかし + ドロップシャドウ」を組み合わせたエフェクトスタイルを作成する
  • エフェクトスタイルを使わず、通常のエフェクトとして背景のぼかしとドロップシャドウを指定する
  • 背景のぼかしのエフェクトスタイルを適用したフレームとドロップシャドウを適用したフレームの2つを用意して重ねる
tristartristar

ぼかしやシャドウの値には変数が使えるので、エフェクトスタイルは定義せず、エフェクトの値を変数化する方法もあるかもしれない。

tristartristar

テーブル風レイアウトの作り方がHTMLと異なる。

TODO: 詳細

tristartristar

VueやReactのpropsとFigmaのプロパティの不一致

tristartristar

例えばコンポーネントに「iconを指定する」プロパティを設けたい場合、以下のような差が発生します。

  • Figma (表示有無、アイコンの内容で2つプロパティ定義が必要)
    • showIcon: bool
    • icon: Component
  • Vue/React (1つだけで表現可能)
    • icon?: Icon
tristartristar

「ページレイアウト」の考え方の差異

tristartristar

VueやReactではページ全体に対するレイアウトがあり、そこでヘッダーやサイドメニューを定義します。
Figmaでも同じことが出来なくはないですが、レイアウト用コンポーネントのコンテンツ部分を「インスタンスの入れ替え」で実現する必要があり、編集作業が行いにくくなってしまいます。

tristartristar

LineHeightなどパーセントや比率で管理したい値をVariable化出来ない。
(Variableは今の所数値だけが許可されているので、"160%”のような登録が出来ない。
1.6として行間に指定しても、1.6pxという解釈になってしまう)

tristartristar

minWidth, minHeightに相当する値に変数を割り当てられない。
(デザイントークンを定めてもそれを守っていることを保証できない)