HTML

The <textarea> element in HTML is used to provide a multi-line input field where users can enter and edit text.

textarea 要素

<textarea> とは?

<textarea> は、複数行にわたるテキスト入力領域を作る際に使用する HTML 要素です。シングルラインの入力欄(例: <input type="text">)と異なり、改行を含む長文の入力が必要な場合に利用されます。例えば、ユーザーにコメントや問い合わせ内容、説明文などを自由に入力してもらいたいときに便利です。

基本的な例

HTML

<label for="message">メッセージ:</label><br>
<textarea id="message" name="message" rows="5" cols="40"></textarea>

基本的な属性と使い方

name 属性

rows と cols

placeholder 属性

基本的な例

HTML

<label for="message">メッセージ:</label><br>
<textarea id="message" name="message" rows="5" cols="40" placeholder="ご意見やご感想をお書きください"></textarea>

disabled 属性

基本的な例

HTML

<label for="message">メッセージ:</label><br>
<textarea id="message" name="message" rows="5" cols="40" disabled></textarea>

readonly 属性

HTML

<textarea name="comments" readonly>閲覧のみ可能</textarea>

maxlength 属性 (HTML5)

HTML

<textarea name="comments" maxlength="200"></textarea>

見た目のカスタマイズ

サイズの調整 (CSS)

従来は、rowscols でサイズが指定されていましたが、実際には CSS での制御がより柔軟です。

HTML

<label for="message">メッセージ:</label><br>
<textarea id="message" name="message"></textarea>

CSS

textarea {
	width: 100%;  /* 親要素に合わせて横幅を自動調整 */
	height: 80px;
	box-sizing: border-box; /* 枠線やパディングを含めたサイズ計算に */
}

リサイズの制御 (CSS の 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 要素との連携

HTML

<label for="comments">コメント</label>
<textarea id="comments" name="comments"></textarea>

aria-* 属性

バリデーションとイベント処理

必須入力の指定 (HTML5)

HTML

<textarea name="comments" required></textarea>

イベント処理 (JavaScript)

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

高度な応用

自動サイズ調整 (Auto-resizing textarea)

ユーザーが入力するにつれて自動でテキストエリアの高さを調整するテクニックは、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>

カスタムスクロールバー

CSS

textarea::-webkit-scrollbar {
	width: 8px; /* スクロールバーの幅 */
}

textarea::-webkit-scrollbar-thumb {
	background-color: #666; /* スクロールバーのつまみ部分 */
	border-radius: 4px;
}

textarea::-webkit-scrollbar-track {
	background-color: #eee; /* スクロールバーの背景 */
}

リッチテキストエディタとの統合

セキュリティ面での注意事項

XSS 対策

攻撃的な文字入力への対処

まとめ

<textarea> はユーザーから複数行の入力を受け取るための基礎的な HTML 要素ですが、多様な属性や CSS、JavaScript を組み合わせることで、以下のような幅広い機能や使い勝手を実現できます。

これらのポイントを押さえることで、単なる長文入力欄としてだけでなく、ユーザーや開発者にとってより利便性の高いフォームを作り上げることができます。ぜひ実際のプロジェクトに取り入れ、要件に合った最適な実装を目指してください。