Webパーツ辞典

フローティングアクションボタンFloating action button

画面の隅に浮かせて常に見せておく丸いボタン。新規作成など、その画面で最も使う操作を1つだけ置く。

表示例

アイコン: Font Awesome 7 Free(fa-solid / fa-regular)

別名・英語表記

  • FAB
  • 追従ボタン
  • 浮遊ボタン
  • 丸い追加ボタン
  • 右下に浮く丸ボタン
  • 浮いているボタン
  • Floating action button

実装例

<div class="x-fab">
  <span class="x-fab__stage">
    <button class="x-fab__b" type="button" aria-label="新しいメモを作成">
      <i class="fa-solid fa-plus" aria-hidden="true"></i>
    </button>
  </span>
</div>

AIへの指示文

「フローティングアクションボタン(Floating action button)」を実装してください。

## これは何か
画面の隅に浮かせて常に見せておく丸いボタン。新規作成など、その画面で最も使う操作を1つだけ置く。

## 使いどころ
- 一覧画面で「新規作成」のように、どこを見ていても使う操作が1つあるとき
- スマートフォンで、親指の届く範囲に主要操作を置きたいとき

## 実装の要件
- position: fixed で隅に置く。z-index は他の追従要素と衝突しない値にする
- 直径 56px 目安。影ではなく濃い単色で浮きを表現する
- 本文の末尾やフッターのリンクに重なって、押せなくする事故が起きやすい。本文側に下余白を足す
- 2つ以上置かない。浮いているボタンが増えると、どれも目立たなくなる
- アイコンだけでは何が起きるか伝わらないことが多い。初回だけラベルを出す形も検討する

## アクセシビリティの要件
- aria-label で操作名を付ける。アイコンは aria-hidden="true"
- 固定表示はキーボードのタブ順から外れて見つけにくい。DOM 上の位置を意識して置く
- 下端の安全領域(env(safe-area-inset-bottom))を見込んで余白を取る

## 参考にする実装
この形を出発点にして、プロジェクトの命名規則・色・余白に合わせて調整してください。

```html
<div class="x-fab">
  <span class="x-fab__stage">
    <button class="x-fab__b" type="button" aria-label="新しいメモを作成">
      <i class="fa-solid fa-plus" aria-hidden="true"></i>
    </button>
  </span>
</div>
```

```css
/* 貼った先のリセットに頼らないよう、この部品の中だけ border-box にする */
.x-fab,
.x-fab *:not([class*="fa-"]),
.x-fab *:not([class*="fa-"])::before,
.x-fab *:not([class*="fa-"])::after {
  box-sizing: border-box;
  /* 貼った先の既定の書体に引きずられないようにする。書体が変わると
     文字の幅と高さが変わり、枠のサイズまでずれる */
  font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Hiragino Sans", "Noto Sans JP", "Yu Gothic UI", Meiryo, sans-serif;
}

.x-fab__stage {
  position: relative;
  display: block;
  width: 190px;
  height: 104px;
  border: 1px solid #e3e6ea;
  border-radius: 10px;
  background: #fff;
}
.x-fab__b {
  position: absolute;
  right: 12px;
  bottom: 12px;
  width: 56px;
  height: 56px;
  display: grid;
  place-items: center;
  border: 0;
  border-radius: 50%;
  background: #1d4ed8;
  color: #fff;
  font-size: 18px;
  cursor: pointer;
}
.x-fab__b:hover {
  background: #1b45bd;
}
.x-fab__b:focus-visible {
  outline: 2px solid #1b2028;
  outline-offset: 3px;
}
```

## 出力の約束
- HTML と CSS を分けて出す。JavaScript が要るときは素の JavaScript で書き、UIフレームワークは使わない。
- 参考実装がアイコンに Font Awesome のクラスを使っている場合は、プロジェクトで使っているアイコンかインライン SVG に置き換えてよい。
- 上のアクセシビリティ要件を満たす。満たせない箇所があるときは、理由を添えて先に知らせる。
- 色・角丸・余白は既存のデザイントークンがあればそれを使う。無ければ CSS 変数として切り出す。

使いどころ

  • 一覧画面で「新規作成」のように、どこを見ていても使う操作が1つあるとき
  • スマートフォンで、親指の届く範囲に主要操作を置きたいとき

注意点

  • 本文の末尾やフッターのリンクに重なって、押せなくする事故が起きやすい。本文側に下余白を足す
  • 2つ以上置かない。浮いているボタンが増えると、どれも目立たなくなる
  • アイコンだけでは何が起きるか伝わらないことが多い。初回だけラベルを出す形も検討する

アクセシビリティの要点

  • aria-label で操作名を付ける。アイコンは aria-hidden="true"
  • 固定表示はキーボードのタブ順から外れて見つけにくい。DOM 上の位置を意識して置く
  • 下端の安全領域(env(safe-area-inset-bottom))を見込んで余白を取る

作るときに使えるツール

関連するパーツ