コピーボタン デザイン見本
navigator.clipboard.writeText() を使ったクリップボードコピーの実装デモ。コピーしてすぐに使えるHTML・JS・CSSのコードを掲載。
① 基本実装 — 要素のテキストをコピー
この文章をクリップボードにコピーできます。ペーストして確認してみてください。
HTML
<p id="target-txt">コピーしたいテキスト</p>
<button id="copy-btn">コピーする</button>
<p id="copy-msg"></p>
JS
var para = document.getElementById('target-txt');
var btn = document.getElementById('copy-btn');
var msgEl = document.getElementById('copy-msg');
btn.addEventListener('click', function() {
if (!navigator.clipboard) {
msgEl.textContent = 'このブラウザはClipboard APIに未対応です。';
return;
}
navigator.clipboard.writeText(para.textContent).then(function() {
msgEl.textContent = 'コピーしました!';
}, function() {
msgEl.textContent = 'コピーに失敗しました。';
});
});
navigator.clipboard.writeText()
引数に渡したテキストをクリップボードへ書き込む非同期メソッドです。Promiseを返すため、.then() の第1引数に成功時、第2引数に失敗時の処理を記述できます。!navigator.clipboard のチェックを冒頭に入れることで、未対応ブラウザへの早期リターンが実現できます。
② テキストエリアのコピー — .value プロパティ
HTML
<textarea id="copy-area">コピーしたいテキスト</textarea>
<button id="copy-ta-btn">テキストをコピー</button>
<p id="copy-ta-msg"></p>
JS
var area = document.getElementById('copy-area');
var btn = document.getElementById('copy-ta-btn');
var msgEl = document.getElementById('copy-ta-msg');
btn.addEventListener('click', function() {
if (!navigator.clipboard) {
msgEl.textContent = 'このブラウザはClipboard APIに未対応です。';
return;
}
navigator.clipboard.writeText(area.value).then(function() {
msgEl.textContent = 'コピーしました!';
}, function() {
msgEl.textContent = 'コピーに失敗しました。';
});
});
element.value
textarea や input などのフォーム要素からテキストを取得するには .textContent ではなく .value プロパティを使います。ユーザーが入力・編集した内容がリアルタイムで反映されるため、「自由記述をコピーする」ような動的なコピー機能の実装に最適です。
③ ビジュアルフィードバック — alert() を使わないコピー通知
NOVEBLO AI Design — navigator.clipboard.writeText()
HTML
<p id="copy-text">コピー対象のテキスト</p>
<button id="copy-visual-btn">テキストをコピー</button>
CSS
#copy-visual-btn {
padding: 10px 24px;
border-radius: 6px;
font-size: 14px;
font-weight: 700;
cursor: pointer;
background: #f8fafc;
color: #334155;
border: 1px solid #cbd5e1;
transition: background 0.2s, color 0.2s, border-color 0.2s;
}
#copy-visual-btn.done {
background: #dcfce7;
color: #16a34a;
border-color: #86efac;
}
JS
var para = document.getElementById('copy-text');
var btn = document.getElementById('copy-visual-btn');
btn.addEventListener('click', function() {
if (!navigator.clipboard) return;
navigator.clipboard.writeText(para.textContent).then(function() {
btn.textContent = '✓ コピー完了!';
btn.className = 'done';
setTimeout(function() {
btn.textContent = 'テキストをコピー';
btn.className = '';
}, 2000);
});
});
ビジュアルフィードバック
コピー完了の通知に alert() を使うとブラウザのUIをブロックしてしまい、ユーザー体験が損なわれます。ボタンのテキストやスタイルを一時的に変更することで、ページを中断せずに直感的なフィードバックを実現できます。2秒後に元の状態に戻す setTimeout() との組み合わせが定番の実装パターンです。
注意点:navigator.clipboard は HTTPS または localhost 環境でのみ動作します。HTTP 環境では undefined になり、コピーが実行されません。!navigator.clipboard による早期チェックとフォールバック処理の実装を推奨します。
当サイトで公開しているWebデザインやUIの実装例は、一覧として以下記事に纏めています。
あわせて読みたい


Webデザイン・UIコンポーネント集(HTML/CSS/JS)
Webサイトやアプリで使われている『Webデザイン』や『UI』の実装例やデザイン例を纏めました。(随時更新中)実装方法などは別記事にコードや実装ポイントを公開してい…
