コピーボタン付きテキストエリアを作る方法
コピーボタン付きテキストエリアを作る方法を紹介します。このサンプルでは、テキストエリアに入力されている内容をボタンひとつでクリップボードへコピーできる機能を実装しています。長文のコピーや定型文の共有、お問い合わせ内容やメモのコピーなど、さまざまな場面で活用できるシンプルなサンプルです。
JavaScriptのClipboard APIを利用しているため、コピー処理はブラウザ上で完結します。ボタンをクリックすると入力内容がコピーされ、利用者はテキストを手動で選択することなく内容を取得できます。HTML・CSS・JavaScriptだけで構成されているため、サーバー環境を用意しなくても動作確認できます。
ボタンの文言や配色、テキストエリアのサイズ、初期表示する文章などは自由に変更できます。FAQやサンプルコード、テンプレート文、問い合わせ番号などを簡単にコピーしてもらいたいページにも利用しやすいサンプルです。
免責事項 本記事を利用したことによる損害について、当サイトは一切の責任を負いません。
デモ
テキストエリアへ文章を入力して「入力内容をコピー」を押すと、入力内容がクリップボードへコピーされます。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>コピーボタン付きテキストエリア</title>
<!-- CSSファイル -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- テキストエリア全体 -->
<div class="textarea-copy-button_wrap">
<!-- タイトル -->
<p class="textarea-copy-button_title">
お問い合わせ内容
</p>
<!-- 説明文 -->
<p class="textarea-copy-button_text">
ボタンを押すと入力内容をクリップボードへコピーできます。
</p>
<!-- 入力エリア -->
<div class="textarea-copy-button_group">
<!-- ラベル -->
<label
class="textarea-copy-button_label"
for="textarea-copy-button">
内容
</label>
<!-- テキストエリア -->
<textarea
id="textarea-copy-button"
class="textarea-copy-button_input"
placeholder="コピーする内容を入力してください。">こちらはコピーできるサンプル文章です。
「入力内容をコピー」を押すと、この文章がクリップボードへコピーされます。</textarea>
</div>
<!-- ボタン -->
<div class="textarea-copy-button_actions">
<button
type="button"
id="textarea-copy-button_button"
class="textarea-copy-button_button">
入力内容をコピー
</button>
<!-- コピー結果表示 -->
<p
id="textarea-copy-button_message"
class="textarea-copy-button_message"
aria-live="polite">
</p>
</div>
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLではコピー対象のテキストエリア、コピーボタン、コピー結果を表示するメッセージ欄を配置します。CSSではフォーム全体やテキストエリア、ボタン、メッセージのデザインを設定し、JavaScriptでは入力内容をクリップボードへコピーする処理を行います。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlはコピー機能付きテキストエリア全体を構成するファイルです。ページタイトル、フォーム内のタイトル、説明文、ラベル、プレースホルダー、初期表示する文章、コピーボタンの文字を変更できます。コピー結果を表示するメッセージ欄もこのファイルに配置されています。
style.cssはページ全体、フォーム、テキストエリア、コピーボタン、コピー結果メッセージのデザインを設定するファイルです。フォームの最大横幅、余白、背景色、角丸、テキストエリアの高さ、枠線、ボタンのサイズや色、メッセージの文字色などを変更できます。
script.jsはコピーボタンを押したときの処理を記述するファイルです。テキストエリアが空の場合は「コピーする内容がありません。」と表示します。文章が入力されている場合はClipboard APIでクリップボードへコピーし、コピー完了メッセージを表示します。Clipboard APIを利用できない場合は、テキストエリアを選択してコピーする処理へ切り替えます。
設置方法・使い方
sampleフォルダを作成し、その中へindex.html・style.css・script.jsを配置します。3つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。テキストエリアへ文章を入力して「入力内容をコピー」を押すと、その内容がクリップボードへコピーされます。コピーが完了すると、ボタンの下に「✓ 入力内容をコピーしました。」と表示されます。
カスタマイズできる内容
index.htmlではページタイトル、フォーム内のタイトル、説明文、ラベル、プレースホルダー、初期表示する文章、コピーボタンの文字を変更できます。定型文、案内文、問い合わせ内容、サンプルコードなど、コピーさせたい内容に合わせて編集できます。
style.cssではページ全体とフォームの背景色、最大横幅、余白、枠線、角丸、テキストエリアの高さ、入力文字の行間、ボタンの色やサイズ、コピー結果メッセージの文字色を変更できます。resize:vertical;を変更すると、利用者によるテキストエリアの高さ変更方法も調整できます。
script.jsでは未入力時のメッセージとコピー完了メッセージを変更できます。コピー対象はtextarea-copy-buttonというIDのテキストエリアに設定されているため、対象を変更する場合はHTMLとJavaScriptのIDを一致させてください。
数値調整
style.css
padding:40px 20px;
ページ全体の内側余白です。40pxは上下、20pxは左右の余白を表します。値を大きくすると画面端との間隔が広がり、小さくすると狭くなります。
max-width:700px;
フォーム全体の最大横幅です。値を大きくすると横長になり、小さくするとコンパクトになります。
margin:40px auto;
フォーム全体の上下余白です。40pxを大きくすると上下の間隔が広がります。autoによって左右中央へ配置します。
padding:32px;
フォーム全体の内側余白です。値を大きくすると内容と枠線の間隔が広がり、小さくすると狭くなります。
border:1px solid #e5e7eb;
フォーム全体の枠線です。1pxを大きくすると枠線が太くなります。
border-radius:18px;
フォーム全体の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
margin:0 0 12px;
タイトルの下側余白です。12pxを大きくすると説明文との間隔が広がります。
font-size:22px;
タイトルの文字サイズです。値を大きくすると文字が大きくなり、小さくすると小さくなります。
margin:0 0 24px;
説明文の下側余白です。24pxを大きくすると入力エリアとの間隔が広がり、小さくすると狭くなります。
line-height:1.8;
説明文の行間です。値を大きくすると行間が広がり、小さくすると詰まった表示になります。
gap:10px;
ラベルとテキストエリアの間隔です。値を大きくすると間隔が広がり、小さくすると近くなります。
min-height:180px;
テキストエリアの初期の最低高さです。値を大きくすると最初から高く表示され、小さくすると低くなります。
padding:14px 16px;
テキストエリアの内側余白です。上下の14pxを大きくすると入力欄が高くなり、左右の16pxを大きくすると文字と枠線の間隔が広がります。
border:2px solid #d1d5db;
テキストエリアの枠線です。2pxを大きくすると枠線が太くなり、小さくすると細くなります。
border-radius:10px;
テキストエリアとコピーボタンの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
line-height:1.7;
テキストエリア内の入力文字の行間です。値を大きくすると行間が広がり、小さくすると詰まった表示になります。
transition:0.3s;
枠線、影、ボタンの背景色が切り替わる時間です。0.3秒で変化します。値を大きくするとゆっくり、小さくすると速く切り替わります。
box-shadow:0 0 0 4px ...
テキストエリアを選択したときの外側の強調範囲です。4pxを大きくすると影が広がり、小さくすると控えめになります。
margin-top:20px;
ボタン表示エリアの上側余白です。20pxを大きくするとテキストエリアとの間隔が広がります。
min-width:180px;
コピーボタンの最低横幅です。値を大きくするとボタンが横長になります。
min-height:50px;
コピーボタンの最低高さです。値を大きくするとボタンが高くなります。
padding:14px 32px;
コピーボタンの内側余白です。上下の14pxを大きくするとボタンが高くなり、左右の32pxを大きくすると横幅が広がります。
outline:3px solid ...
コピーボタンへフォーカスしたときの外枠です。3pxを大きくすると外枠が太くなります。
outline-offset:3px;
コピーボタンとフォーカス用外枠の間隔です。値を大きくすると外枠がボタンから離れます。
min-height:24px;
コピー結果メッセージ欄の最低高さです。メッセージがない状態でも高さを確保し、表示時のレイアウト変化を抑えます。
margin:12px 0 0;
コピー結果メッセージの上側余白です。12pxを大きくするとボタンとの間隔が広がります。
font-size:14px;
コピー結果メッセージの文字サイズです。値を大きくすると文字が大きくなります。
padding:24px 12px;
画面幅640px以下で使用するページ全体の内側余白です。24pxは上下、12pxは左右の余白を表します。
padding:24px 18px;
画面幅640px以下で使用するフォーム全体の内側余白です。24pxは上下、18pxは左右の余白を表します。
min-height:160px;
画面幅640px以下で使用するテキストエリアの最低高さです。値を変更するとスマートフォン表示時の高さが変わります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%とmax-width:700pxによって、画面幅に合わせてフォーム全体が縮小されます。また、画面幅640px以下ではページとフォームの余白、テキストエリアの最低高さと内側余白を小さくし、コピーボタンを横幅いっぱいに表示するため、スマートフォン・タブレット・PCで利用できます。
コメント