残り入力可能文字数をリアルタイムで表示するテキストエリアを作る方法
テキストエリアに入力できる残り文字数をリアルタイムで表示する方法を紹介します。このサンプルでは入力できる文字数の上限を200文字に設定し、文章を入力するたびに「あと200文字入力できます」「あと150文字入力できます」のように、残りの入力可能文字数をテキストエリアの下へ自動で表示します。
お問い合わせ内容、レビュー、プロフィール、アンケートの自由記入欄など、入力できる文章の長さに上限を設けたい場面で利用できます。単純に最大文字数を設定するだけでなく、あと何文字入力できるのかを利用者が入力中に確認できるため、文字数の上限を意識しながら文章を調整しやすくなります。
HTMLのmaxlength属性で200文字を超える入力を制限し、JavaScriptではinputイベントを使って現在の入力文字数を取得します。最大文字数から現在の文字数を引くことで残り文字数を計算し、入力するたびに表示を更新します。上限となる200文字はHTMLから変更でき、CSSではテキストエリアの高さや横幅、枠線、角丸、残り文字数の表示などを調整できます。スマートフォン・タブレット・PCでも利用できるレスポンシブ対応のサンプルです。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
200文字以内でお問い合わせ内容を入力してください。
あと200文字入力できます
テキストエリアへ文章を入力すると、入力した文字数に合わせて残りの入力可能文字数がリアルタイムで減っていきます。最初は「あと200文字入力できます」と表示され、50文字入力すると残り150文字、100文字入力すると残り100文字になります。200文字に到達すると残りは0文字となり、maxlength属性によって200文字を超えて入力することはできません。入力した文章を削除すると、その文字数に応じて残りの入力可能文字数も自動で増えます。
コードをコピーして使おう!
<!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-remaining_wrap">
<!-- タイトル -->
<div class="textarea-remaining_title">
お問い合わせ内容
</div>
<!-- 説明文 -->
<p class="textarea-remaining_text">
200文字以内でお問い合わせ内容を入力してください。
</p>
<!-- 入力項目 -->
<div class="textarea-remaining_group">
<!-- ラベル -->
<label
class="textarea-remaining_label"
for="textarea-remaining-input">
内容
</label>
<!-- 最大200文字のテキストエリア -->
<textarea
class="textarea-remaining_input"
id="textarea-remaining-input"
name="message"
maxlength="200"
placeholder="お問い合わせ内容を入力してください。"
aria-describedby="textarea-remaining-count"></textarea>
<!-- 残り入力可能文字数 -->
<p
class="textarea-remaining_count"
id="textarea-remaining-count"
aria-live="polite">
あと<span class="textarea-remaining_number">200</span>文字入力できます
</p>
</div>
</div>
<!-- JavaScriptファイルを読み込む -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLで最大200文字のテキストエリアと残り文字数の表示欄を配置し、CSSで入力欄や残り文字数のデザインを設定します。JavaScriptでは現在入力されている文字数を取得し、最大文字数から差し引くことで、あと何文字入力できるのかをリアルタイムで計算します。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlはテキストエリアの表示部分を構成するファイルです。「お問い合わせ内容」のタイトル、説明文、「内容」のラベル、テキストエリア、残り入力可能文字数の表示欄を配置しています。テキストエリアにはmaxlength="200"を設定しているため、200文字を超えて入力できないようになっています。同じ階層にあるstyle.cssとscript.jsもこのファイルから読み込みます。
style.cssはテキストエリア全体の横幅、余白、背景色、枠線、角丸、入力欄の高さ、フォーカス時の表示などを設定するファイルです。残り入力可能文字数は右揃えで表示し、数字部分だけを青色にして現在の残り文字数を確認しやすくしています。
script.jsは残り入力可能文字数を計算して表示するファイルです。HTMLに設定したmaxlengthから最大文字数を取得し、textarea.value.lengthで現在の入力文字数を取得します。「最大文字数 − 現在の入力文字数」で残り文字数を計算し、テキストエリアの内容が変化するたびに表示を更新します。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを同じ階層で保存してください。保存後にsample/index.htmlをブラウザで開くと、index.htmlからstyle.cssとscript.jsが読み込まれ、サンプルを利用できます。
ページを開いた直後はテキストエリアが空なので、「あと200文字入力できます」と表示されます。1文字入力すると199文字、50文字入力すると150文字、100文字入力すると100文字というように、入力した文字数に応じて残り文字数がリアルタイムで減っていきます。入力した文章を削除した場合は、その文字数に応じて残り文字数が再び増えます。
最大文字数の判定にはHTMLのmaxlength="200"を使用しています。そのため、残り文字数が0になる200文字まで入力すると、それ以上の通常入力はブラウザによって制限されます。JavaScript側で200という数値を別に指定するのではなく、textarea.maxLengthからHTMLの設定値を取得しているため、最大文字数を変更するときはHTML側のmaxlengthを変更するだけで残り文字数の計算にも反映されます。
カスタマイズできる内容
index.htmlでは「お問い合わせ内容」のタイトル、説明文、「内容」のラベル、プレースホルダー、最大入力文字数を変更できます。最大文字数はテキストエリアのmaxlength="200"で設定しています。例えば最大500文字にしたい場合はmaxlength="500"へ変更します。初期表示の「200」も同じ値に合わせて変更してください。
style.cssでは全体の最大横幅、余白、背景色、枠線、角丸、テキストエリアの高さ、フォーカス時の表示、残り文字数の文字色やサイズなどを変更できます。
script.jsではtextarea.value.lengthで現在の入力文字数を取得し、maxLength-currentLengthで残り文字数を計算しています。表示方法を変更したい場合は、remainingNumber.textContentへ設定している部分を編集できます。
数値調整
index.html
maxlength="200"
テキストエリアへ入力できる最大文字数です。200を500へ変更すると最大500文字まで入力でき、JavaScriptで計算する残り文字数にも自動で反映されます。
style.css
max-width:700px;
全体の最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。
margin:40px auto;
全体の上下余白です。40pxを大きくすると上下の間隔が広がります。
padding:32px;
全体の内側余白です。値を大きくすると内容と外枠の間隔が広がります。
border-radius:18px;
全体の角丸です。値を大きくすると丸みが強くなります。
gap:10px;
ラベル、テキストエリア、残り文字数の間隔です。値を大きくすると各要素の間隔が広がります。
min-height:180px;
テキストエリアの初期高さです。値を大きくすると入力欄が高く表示されます。
padding:14px 16px;
テキストエリアの内側余白です。14pxが上下、16pxが左右の余白です。
border-radius:10px;
テキストエリアの角丸です。値を大きくすると丸みが強くなります。
box-shadow:0 0 0 4px ...
テキストエリアへフォーカスしたときの外側の強調範囲です。4pxを大きくすると強調表示が広がります。
font-size:16px;
残り文字数の数字部分の文字サイズです。値を大きくすると数字が大きく表示されます。
レスポンシブ対応
このサンプルはstyle.cssでレスポンシブ対応しています。全体へwidth:100%とmax-width:700pxを設定しているため、画面幅が狭くなると利用できる横幅に合わせて縮小します。また、@media (max-width:640px)を使用し、640px以下では上下余白を24px、内側余白を24px 18pxへ変更します。スマートフォン・タブレット・PCの画面幅に合わせて利用できます。
コメント