The <textarea>
element in HTML is used to provide a multi-line input field where users can enter and edit text.
<textarea>
とは?<textarea>
は、複数行にわたるテキスト入力領域を作る際に使用する HTML 要素です。シングルラインの入力欄(例: <input type="text">
)と異なり、改行を含む長文の入力が必要な場合に利用されます。例えば、ユーザーにコメントや問い合わせ内容、説明文などを自由に入力してもらいたいときに便利です。
基本的な例
HTML
<label for="message">メッセージ:</label><br>
<textarea id="message" name="message" rows="5" cols="40"></textarea>
label
要素と組み合わせることで、アクセシビリティと可読性が高まります。rows
や cols
によって初期表示される高さや幅が指定されます。<textarea>
要素の値を参照するための名前を設定します。name="comments"
comments
というフォームキーで入力された値を受け取ります。rows
) と列数 (cols
) を指定します。rows="5" cols="40"
cols
の通りには表示されない場合があります。<textarea>
の中身が空のときに表示されるヒントテキストを指定します。placeholder="ご意見やご感想をお書きください"
label
要素と組み合わせることで、アクセシビリティと可読性が高まります。rows
や cols
によって初期表示される高さや幅が指定されます。基本的な例
HTML
<label for="message">メッセージ:</label><br>
<textarea id="message" name="message" rows="5" cols="40" placeholder="ご意見やご感想をお書きください"></textarea>
<textarea>
に入力できなくなり、送信対象にもなりません(フォームの送信時に値が送信されない)。基本的な例
HTML
<label for="message">メッセージ:</label><br>
<textarea id="message" name="message" rows="5" cols="40" disabled></textarea>
<textarea>
の内容を表示しつつ、ユーザーの変更は許可しない設定です。disabled
とは異なり、フォーム送信時には値が送信されます。HTML
<textarea name="comments" readonly>閲覧のみ可能</textarea>
<textarea>
で入力可能な文字数の最大値を指定します。maxlength="200"
HTML
<textarea name="comments" maxlength="200"></textarea>
従来は、rows
と cols
でサイズが指定されていましたが、実際には CSS での制御がより柔軟です。
HTML
<label for="message">メッセージ:</label><br>
<textarea id="message" name="message"></textarea>
CSS
textarea {
width: 100%; /* 親要素に合わせて横幅を自動調整 */
height: 80px;
box-sizing: border-box; /* 枠線やパディングを含めたサイズ計算に */
}
box-sizing: border-box;
を使うことで、幅・高さの計算が直感的に行えます。width: 100%;
のように可変にするのが一般的です。resize
プロパティ)ユーザーがドラッグしてテキストエリアの大きさを自由に変えられる機能がブラウザに標準実装されています。
必要に応じて、CSS の resize
プロパティで制御可能です。
CSS
/* 縦方向へのリサイズのみ許可 */
textarea {
resize: vertical;
}
/* リサイズを完全に不可にする */
textarea {
resize: none;
}
wrap
属性)<textarea>
の wrap
属性は、ユーザーが入力したテキストをどのように折り返すかを指定するものです。次の値を取ることができます。
soft
hard
soft
扱いとなる。HTML
<!-- 表示上は折り返し、送信時に改行は含まれない -->
<textarea name="description" wrap="soft"></textarea>
<!-- 表示上の折り返し + 送信時に改行を含む -->
<textarea name="description" wrap="hard"></textarea>
label
要素との連携<label>
と <textarea>
を紐づけることで、スクリーンリーダーなどを利用するユーザーにも分かりやすいフォームを提供できます。for
属性に <textarea>
の id
を指定します。HTML
<label for="comments">コメント</label>
<textarea id="comments" name="comments"></textarea>
aria-required="true"
などを指定して、スクリーンリーダーに入力必須であることを伝えられます。required
属性を指定することで、フォーム送信時に入力が空だとエラーが出ます。HTML
<textarea name="comments" required></textarea>
oninput
や onchange
などのイベントを用いて、リアルタイムの入力検知やバリデーションが可能です。HTML
<textarea
name="comments"
id="comments"
oninput="checkLength(this)"
maxlength="200"
></textarea>
<script>
function checkLength(el) {
const max = el.getAttribute('maxlength');
const currentLength = el.value.length;
// 文字数をリアルタイム表示など
document.getElementById('count').innerText = `${currentLength}/${max}`;
}
</script>
<p id="count">0/200</p>
0/200
ユーザーが入力するにつれて自動でテキストエリアの高さを調整するテクニックは、UX 向上に役立ちます。以下のように JavaScript で実装できます。
HTML
<textarea id="auto-resize" rows="1" style="overflow:hidden;"></textarea>
<script>
const textarea = document.getElementById('auto-resize');
// 高さをリセットしてから、scrollHeight に合わせて高さを再設定
function autoResize(element) {
element.style.height = 'auto';
element.style.height = element.scrollHeight + 'px';
}
textarea.addEventListener('input', function() {
autoResize(this);
});
// ページ読み込み時にも初期化
window.addEventListener('load', function() {
autoResize(textarea);
});
</script>
scrollHeight
を用いて現在必要な高さを計算し、要素の style.height
に反映します。CSS
textarea::-webkit-scrollbar {
width: 8px; /* スクロールバーの幅 */
}
textarea::-webkit-scrollbar-thumb {
background-color: #666; /* スクロールバーのつまみ部分 */
border-radius: 4px;
}
textarea::-webkit-scrollbar-track {
background-color: #eee; /* スクロールバーの背景 */
}
<textarea>
は、WYSIWYG エディタや Markdown エディタなどのリッチテキストエディタと組み合わせる際のベースとして利用されることがあります。<textarea>
を隠し要素として利用し、UI にリッチテキストエディタを表示したりします。サーバーに送信する際は <textarea>
の内容を使う形になります。<textarea>
はユーザーから複数行の入力を受け取るための基礎的な HTML 要素ですが、多様な属性や CSS、JavaScript を組み合わせることで、以下のような幅広い機能や使い勝手を実現できます。
rows
, cols
, name
, placeholder
, disabled
, readonly
など) で単純な複数行入力フォームを手早く作成。maxlength
, required
など) やイベント処理でバリデーションを強化。width
, height
, resize
, box-sizing
など) でレイアウトを調整し、ユーザー体験を高める。これらのポイントを押さえることで、単なる長文入力欄としてだけでなく、ユーザーや開発者にとってより利便性の高いフォームを作り上げることができます。ぜひ実際のプロジェクトに取り入れ、要件に合った最適な実装を目指してください。