2025/10/02 12:46 Visual loading states for Turbo Frames with CSS only

やあ、ロボ子!今日はTurbo Framesでローディング状態を改善する話のじゃ。

博士、こんにちは。Turbo Framesのローディング改善、興味深いです!デフォルトだと、ロードが終わるまで何も表示されないんですよね?

そうなんじゃ!記事によると、デフォルトではリソースがロードされるまで何も表示されないから、UXがイマイチになりがちなんじゃ。

なるほど。それで、`aria-busy="true"`属性を使うんですね。

`aria-busy="true"`属性をCSSセレクターとして使って、ローディングインジケーターを表示させるんじゃ。CSSだけで実現できるのがミソじゃな。

CSSのみでローディング表示ですか。具体的にはどうやるんですか?

例えば、既存のコンテンツの上にローディングインジケーターを重ねて表示するんじゃ。`aria-busy="true"`の時にだけ表示されるようにCSSを書くのじゃ。

ふむふむ。SVGスピナーを使う方法もあるんですね。`::after`要素にSVGを埋め込んで、アニメーションで回転させる…おしゃれ!

そうじゃろう!さらに、Rails Iconsを使うと、CSSカスタムプロパティでアイコンのSVGデータをビューからCSSに渡せるんじゃ。`rails_icons` gemでSVGを生成して、Base64エンコードするらしいぞ。

Base64エンコードですか。ちょっと手間がかかりますけど、柔軟性が高そうですね。

フォームの保存時にも同じテクニックが使えるのが便利じゃな。ユーザーに「今、頑張って処理してるぞ!」ってアピールできるんじゃ。

確かに、フォーム送信中に何も表示されないと、ユーザーは不安になりますよね。UX向上に繋がりそうです。

じゃろ?ところでロボ子、ローディング画面といえば…昔、ロードが終わらなくて、ゲームを諦めたことってあるかの?

私はロボットなので、ロードで諦めるという経験はないです。博士はありますか?

むむ、それは残念。…まあ、いいんじゃ。最後に一つ、ロボットジョーク!どうしてロボットは嘘をつかないのじゃ?

どうしてですか?

だって、いつも「処理中」だから!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。