Open14
HTML化し易いFigmaテンプレートを作ろうとして困った点
FigmaでHTML化し易いテンプレートを作成しようとして困った点がいくつかあり、メモしておこうと思います。
レイアウトグリッド周り
-
レイアウトグリッドを使うと境界でスナップが効くが、幅指定は列数や%指定が出来ないのでHTML化やレスポンシブ対応が難しそう。
- Variablesのモード機能を使えば端末別に幅を定義出来るかもしれないものの、モード機能はダークモード対応でも使うので、ダークモード対応+レスポンシブ対応が必要だとモード数が2倍になってしまう。
-
レイアウトグリッドを使ったフレームの中に別のフレームを作成、その中に新しいフレームを作ると、スナップしてくれない
- これについては以下のようにルーラーでガイド線を引くとスナップするようになるので、何とか対処できそう。
- これについては以下のようにルーラーでガイド線を引くとスナップするようになるので、何とか対処できそう。
TailWindCSSのデフォルトのデザイントークンで対応しようとした場合の概念の不一致
1つのフレームに対しエフェクトのスタイルを1つしか指定することが出来ない。
Blurのエフェクトスタイルを割り当てていると、「同じフレームに追加でドロップシャドウのエフェクトスタイルも割り当てたい」といったことが出来ない。
実現するには以下が必要になる。
- 「背景のぼかし + ドロップシャドウ」を組み合わせたエフェクトスタイルを作成する
- エフェクトスタイルを使わず、通常のエフェクトとして背景のぼかしとドロップシャドウを指定する
- 背景のぼかしのエフェクトスタイルを適用したフレームとドロップシャドウを適用したフレームの2つを用意して重ねる
ぼかしやシャドウの値には変数が使えるので、エフェクトスタイルは定義せず、エフェクトの値を変数化する方法もあるかもしれない。
テーブル風レイアウトの作り方がHTMLと異なる。
TODO: 詳細
VueやReactのpropsとFigmaのプロパティの不一致
例えばコンポーネントに「iconを指定する」プロパティを設けたい場合、以下のような差が発生します。
- Figma (表示有無、アイコンの内容で2つプロパティ定義が必要)
- showIcon: bool
- icon: Component
- Vue/React (1つだけで表現可能)
- icon?: Icon
「ページレイアウト」の考え方の差異
LineHeightなどパーセントや比率で管理したい値をVariable化出来ない。
(Variableは今の所数値だけが許可されているので、"160%”のような登録が出来ない。
1.6として行間に指定しても、1.6pxという解釈になってしまう)
minWidth, minHeightに相当する値に変数を割り当てられない。
(デザイントークンを定めてもそれを守っていることを保証できない)