Figmaで幅や高さを0にした要素を作っても内部的には0ではない


これは何

そもそも「幅や高さを0にした要素」って?

FigmaではWH0と打ち込んでも勝手に1になってしまいますが、0.001とでも打ち込めば0を実現できます1

私はこれを利用して、Auto layout内でも一部はみ出したようなレイアウトのUIを作るときがあります。

見かけ上は0だけど実は0ではない

先ほど作った四角形のデータ、Figma APIを使って見てみましょう。

heightに注目してください。
GUI上では0と表示されていますし、要素同士の距離を測ってもちゃんと0として扱われていますが、内部的には0.0010000000474974513だそうです。

ちなみに先ほどの四角形のH0.001と入れても0.005と入れても変わらず0.0010000000474974513でした。

なお、ご自分でも試してみたい場合は以下の書式でコマンドを叩けばOKです。

curl -H 'X-FIGMA-TOKEN: YOUR-FIGMA-TOKEN' 'https://api.figma.com/v1/files/FILE-KEY'

何が問題か?

こちらのファイルにアクセスしてみてください。

謎の柄があると思いますが「Auto layoutを使って要素を並べて、かつ一部の要素だけをはみ出させたい」という意図があると想定してください。2

上から3番目の移行の要素を選択すると、Y座標がXXX.01になっているのが分かると思います。
しかし、Auto layoutの設定にも各要素の値にも、どこにも小数点は使っていません。

色々試してみましたが、要素のサイズや位置によって変わるのか、XXX.01が出現する条件はバラバラな気がします。
5回6回と要素を繰り返してようやくXXX.01が出るときもあれば、今回作ったファイルでは3番目の要素からXXX.01になっています

対策

そもそもこんな使い方を多用している人があまりいないような気もしますが、今のところ実施している対策も記載します。
ただし非常に対症療法的なのでご容赦ください。

例として、高さ0のFrameを5pxのpaddingのAuto layoutに入れ込むとします。

  1. H0とせず、0.01と逆に明示しておく
  2. Auto layoutの上側か下側どちらかのpaddingを5ではなく4.99にしておく

すると両者で差し引き0となり、いくつ並べてもY座標にXXX.01が出なくなりました。3


  1. おそらくですが、0.006より小さければ0になり0.006以上だと0.01に繰り上がります 

  2. 実際はこんな謎のUIを作ることはないと思いますが、通知バッジとか、「SALE」「NEW」といったラベルはカードからはみ出してレイアウトさせたいこともあると思います。そんなイメージです。 

  3. 50個くらいの要素で試しただけなので、何百個も並べたら出てきてしまうのかもしれませんが……。