GODRICH
#cssアニメーション#ボタン#ローディング#トランジション#スクロール#ダッシュボード#実用ui#デザイントレンド

【コピペOK】シェアボタン デザイン 9選 — 埋め込みウィジェット

シェアボタン デザインは、記事の横や下に一枚だけ貼り付けるだけで、共有・口コミ・お問い合わせのどれか一つを代わりにやってくれる小さなカードです。本物のYouTube・X・GoogleマップのAPIを呼ばなくても、見た目だけCSSで再現すれば、コピーして貼るだけで本物らしく見えます。

自動再生 · タイルを押すとその項目へ · すべて1つのzip

9つは人気順ではなく、訪問者が記事を読む間に実際に出会う順で並べています。記事下部の共有列(01)から始まり、目を引く動画カード(02)、信頼を固めるX投稿(03)と口コミ(04)を経て、来店につながる位置カード(05)へと進みます。ポッドキャスト(06)とGitHub(07)でさらに見せたあと、離脱前にニュースレター(08)で引き留め、最後まで画面に残るフローティング ボタン デザインのチャットバブル(09)で締めます。他人のページに載る部品という点は同じですが、再生コントロールまで自作する側はカスタム動画プレーヤーに、ウィジェット内の文字が言語ごとに欠けないか確かめる手順は言語パックJSONの検証チェックにあります。

01ソーシャルシェアボタン列

sns シェアボタン デザインとして何が見えるか

ピンク・ミント・ライラック・スカイの4つの丸ボタンが順番にscaleでポップして現れます。

ソーシャルシェアボタン列
新しいタブで開く

01 · ソーシャルシェアボタン列 — 計測 累積面積 4.878% · 動いたフレーム 13/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

scale bounce staggernavigator.clipboardaria-pressed

コードのどこを見るか

記事下部の共有列や、商品詳細のSNSシェア欄で使います。

.btn { animation: pop $duration $easing infinite; }
.pink  { background: $subject-pink;  animation-delay: 0s; }
.mint  { background: $subject-mint;  animation-delay: .15s; }
.lilac { background: $subject-lilac; animation-delay: .3s; }
.sky   { background: $subject-sky;   animation-delay: .45s; }
@keyframes pop {
  0%, 40%, 100% { transform: scale(1); }
  15% { transform: scale(1.16); }
  25% { transform: scale(.94); }
}

リンクボタンはnavigator.clipboard.writeText()で実際にコピーを試み、いいねボタンはaria-pressedで押した状態を切り替えます。

02動画埋め込み再生ボタンオーバーレイ

画面で起きること

暗いサムネイルの再生ボタン周りの白いリングが、レーダーのように広がって薄れます。

動画埋め込み再生ボタンオーバーレイ
新しいタブで開く

02 · 動画埋め込み再生ボタンオーバーレイ — 計測 累積面積 2.308% · 動いたフレーム 11/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

ring ping looprequestAnimationFrame progressaria-label toggle

コードの読み方

本物のYouTube iframeは読み込まず、ロード前のプレースホルダーとして使うCSSカードです。

.ring {
  border: 2px solid rgba(255, 255, 255, .5);
  animation: ping $duration $easing infinite;
}
@keyframes ping {
  0% { opacity: .55; transform: scale(.8); }
  70%, 100% { opacity: 0; transform: scale(1.35); }
}

押すとアイコンが再生・一時停止に切り替わり、requestAnimationFrameで進行バーが実際に埋まります(本物の動画ファイルはありません)。

03X投稿埋め込みカードのモック

どんな動きか

ハートアイコンが呼吸するようにscale・opacityを上下させ、押せることを示します。

X投稿埋め込みカードのモック
新しいタブで開く

03 · X投稿埋め込みカードのモック — 計測 累積面積 0.315% · 動いたフレーム 10/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

opacity+scale breathearia-pressed toggleCSS-only mock, no real API

どこを変えるか

本物のXのAPIは一切呼ばないので、口コミページに貼るSNS反応のスクショの代わりに使えます。

.heart { animation: breathe $duration $easing infinite; }
@keyframes breathe {
  0%, 100% { transform: scale(1); opacity: .5; }
  50% { transform: scale(1.45); opacity: 1; }
}
.likeActive .heart { animation: bump 220ms $ease-pop; }

いいね・リポストを押すとカウントが実際に増減し、色が変わります — 画面の数字はこのカードの中だけで動く値です。

04口コミ埋め込みウィジェット

何が見えるか

5つの星が左から順にバウンドしながら現れます。

口コミ埋め込みウィジェット
新しいタブで開く

04 · 口コミ埋め込みウィジェット — 計測 累積面積 0.689% · 動いたフレーム 8/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

staggered scale poparia-pressed counterquote + star icon

コードのどこを見るか

口コミ一覧ページのカード型レビューや、LPのお客様の声セクションで使います。

.star { animation: star $duration $easing infinite; }
@keyframes star {
  0% { transform: scale(0); opacity: 0; }
  12% { transform: scale(1.3); opacity: 1; }
  20%, 100% { transform: scale(1); opacity: 1; }
}

「役に立った」ボタンはaria-pressedで押した状態を残し、押すたびにカウントが実際に増えます。

05地図・位置埋め込みカード

画面で起きること

地図上のピンが上から落ちるように現れ、軽くバウンドして収まります。

地図・位置埋め込みカード
新しいタブで開く

05 · 地図・位置埋め込みカード — 計測 累積面積 0.37% · 動いたフレーム 13/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

mcard-drop 바운스aria-expanded panelCSS-only abstract map

コードの読み方

店舗・オフィス紹介ページの位置カードや、お問い合わせページのアクセス案内で使います。

.pin { animation: drop $duration $easing infinite; }
@keyframes drop {
  0% { transform: translate(-50%, -220%); opacity: 0; }
  35% { transform: translate(-50%, -100%); opacity: 1; }
  46% { transform: translate(-50%, -108%); }
  56%, 100% { transform: translate(-50%, -100%); }
}

道順ボタンを押すとaria-expandedとともに距離・所要時間パネルが実際に開きます — 本物の地図タイルはなく、道路2本だけCSSで描いています。

06ポッドキャストプレーヤー埋め込みウィジェット

どんな動きか

8本の波形バーがそれぞれ違うタイミングで上下し、本当に再生中のように見せます。

ポッドキャストプレーヤー埋め込みウィジェット
新しいタブで開く

06 · ポッドキャストプレーヤー埋め込みウィジェット — 計測 累積面積 0.083% · 動いたフレーム 22/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

scaleY bar loopanimation-play-state toggletext-overflow ellipsis title

どこを変えるか

ブログ記事内のポッドキャスト回カードや、サイドバーの最新エピソードウィジェットで使います。

.wave span { animation: bar #{$duration * 3} ease-out infinite alternate; }
.wave.is-paused span { animation-play-state: paused; }
@keyframes bar {
  from { transform: scaleY(.3); }
  to { transform: scaleY(1); }
}

再生ボタンを押すと波形が実際に止まり、また動き出します — animation-play-state一行で再生状態とアニメーションを結び付けています。

07GitHubリポジトリ統計カード

何が見えるか

星アイコンが押してほしいと言うように左右に小さく揺れます。

GitHubリポジトリ統計カード
新しいタブで開く

07 · GitHubリポジトリ統計カード — 計測 累積面積 0.198% · 動いたフレーム 23/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

rotate wiggle looparia-pressed star togglelanguage dot

コードのどこを見るか

本物のGitHub APIは呼ばないので、OSSプロジェクト紹介記事のリポジトリカードや、ポートフォリオのコードリンクに使えます。

.icStar { animation: wiggle $duration $easing infinite; transform-origin: 50% 90%; }
@keyframes wiggle {
  0%   { transform: rotate(0) scale(1); }
  20%  { transform: rotate(-16deg) scale(1.15); }
  40%  { transform: rotate(12deg) scale(1.05); }
  60%  { transform: rotate(-10deg) scale(1.15); }
  100% { transform: rotate(0) scale(1); }
}

Starを実際に押すとカウントが増減し、星の色が塗りつぶされます。

08ニュースレター購読埋め込みウィジェット

画面で起きること

封筒アイコンが浮かんでは沈むことを繰り返します。

ニュースレター購読埋め込みウィジェット
新しいタブで開く

08 · ニュースレター購読埋め込みウィジェット — 計測 累積面積 0.66% · 動いたフレーム 12/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

translateY float loopregex email validationicon swap on success

コードの読み方

記事下部の購読誘導カードや、サイドバーのニュースレター登録フォームで使います。

.icon { animation: float $duration $easing infinite; }
@keyframes float {
  0%, 100% { transform: translateY(0); }
  50% { transform: translateY(-6px); }
}
@media (prefers-reduced-motion: reduce) {
  .icon { animation: none; }
}

送信時に正規表現でメール形式を実際に検証し、通過すると紙飛行機のアイコンに変わり、完了メッセージが出ます。

09ライブチャットバブルランチャー

どんな動きか

ランチャー周りの白いリングがレーダーのように広がり、バッジの数字が呼吸するように大きくなったり小さくなったりします。

ライブチャットバブルランチャー
新しいタブで開く

09 · ライブチャットバブルランチャー — 計測 累積面積 2.226% · 動いたフレーム 11/23GODRICH オリジナル · SCSS と React は zip に同梱 · パスワードを見る

ring ping + badge pulsefocus({preventScroll:true})aria-expanded toggle

どこを変えるか

サイト右下固定のお問い合わせボタンや、決済ページのリアルタイム相談窓口で使います。

.ring { animation: ping $duration $easing infinite; }
.badge { animation: bounce $duration $ease-pop infinite; }
@keyframes ping {
  0% { opacity: .5; transform: scale(.85); }
  70%, 100% { opacity: 0; transform: scale(1.25); }
}

実際に押すとチャットパネルが開き、.focus({ preventScroll: true })のおかげで入力欄にフォーカスが移ってもページは強制スクロールされません。

落とし穴 — 320pxはどこで画面を超えるか

X投稿カード(03)と口コミカード(04)は最初、カード幅280pxで余白も広めに取っていました。블로그설정.jsonのスマホ幅320pxでPlaywright実測すると、document.body.scrollHeightが200pxの予算を14px・2pxそれぞれ超えていました — document.documentElementだけを測るとこの超過を見逃します(ステージCSSがoverflow: hiddenを掛けてスクロールバー自体が出ないためです)。カード幅を256pxに縮め、余白をトークン1段ずつ($sp-4→$sp-3、$sp-3→$sp-2)下げると、ちょうど200pxに収まりました。地図カード(05)は地図エリアの高さを120pxから88pxに縮めた分がより大きく効きました。border-radiusは$r-*トークンのみ、gap・padding・marginのpx値は4pxの倍数のみと決められているため、再生アイコンを1〜2pxずらすmargin-leftもすべてtransform: translateX()に置き換える必要がありました。埋め込みカードの中に数値を描く必要があるときは、css グラフ をSVGで描くの座標計算をそのまま持ってこられます。9つのzipを開くときのパスワードはxc2tmqdqで、小文字と数字だけなので表示のとおりそのまま貼り付けられます。

アクセシビリティ

9つ全部がprefers-reduced-motion: reduceでループアニメーションを止め、静止した形に落ち着きます — 再生リング(02)とチャットバブルのリング(09)はopacity: 0に固定し、リングが止まったまま浮いて残ることはありません。ボタンにはaria-label・aria-pressed・aria-expandedを付け、いいねが押されたか、パネルが開いたかをスクリーンリーダーが読み取れます。チャットバブルの入力欄フォーカスは常に{ preventScroll: true }付きで、画面が突然動くことはありません。この設定をどこで切り替えるかはMDNのprefers-reduced-motionドキュメントにまとまっています。

FAQ

このウィジェット デザインのカードで本物のYouTube・X・地図が開きますか?

いいえ。9つ全部が本物のAPI・iframeを呼ばないCSS・バニラJSのモックです。動画カード(02)は押すと進行バーが埋まるだけで、X風カード(03)のいいね・リポスト数もこのカードの中だけで動きます。本物の埋め込みが必要なときは、各サービスの公式embedコードを同じ場所に入れ、このCSSはロード前のプレースホルダーとして使えます。ほかの埋め込みパターンはサイト内検索で「埋め込み」で探せます。ウィジェットが最終的に収まるページ下部の構成はフッター デザインでまとめて扱っています。

色や文言を自社ブランドに合わせて変えられますか?

変えられます。ほとんどのデモはSCSS先頭の$duration・$easing・$colorの3変数を変えるだけで、アニメーションの色がまとめて変わります。テキスト(会社名・住所・口コミ文言)はindex.html内の文字列を直接書き換えれば済み、React版は各コンポーネントのprops(title・address・quoteなど)で同じことができます。

320px超えは自分でどう確認しますか?

開発者ツールでビューポートを320pxに狭め、コンソールでdocument.documentElement.scrollWidthとdocument.body.scrollWidthをそれぞれ調べてwindow.innerWidthと比べます。documentElementだけを測ると、この記事の落とし穴のようにoverflow: hiddenの裏に隠れた超過を見逃します。このサイトがデモをどう作り検証しているかは紹介ページにまとめています。

解凍パスワードを入力してください

パスワードはこの記事の本文の中にあります。読み進めると出てきます。