私たちが達成したいもののユーザーにレンダリングされる最終的な出力を考えてみましょう:ボーダーとパディングの両方を備えたパディングされたテキストエリア、クリックされたときにテキストエリアにフォーカスが渡されるという特徴、および自動100%幅の利点典型的なブロック要素。
私の意見では、最良のアプローチは、可能な限り低レベルのソリューションを使用して、ブラウザーの最大サポートに到達することです。この場合、唯一のHTMLは正常に機能し、JavaScriptの使用を回避します(いずれにせよ私たちはそれを愛しています)。
LABELタグは、そのような動作を持ち、アドレス指定する必要のある入力要素を含めることができるため、助けとなります。デフォルトのスタイルはインライン要素の1つであるため、ラベルにブロック表示スタイルを指定すると、パディングとボーダーを含む自動100%幅を利用できますが、内側のテキストエリアにはボーダーなし、パディングなし、100%幅があります。 。
私たちが気づくかもしれない他の利点であるW3Cの詳細を見てみましょう:
- 「for」属性は必要ありません。LABELタグにターゲット入力が含まれている場合、クリックすると自動的に子入力にフォーカスします。
- textareaの外部ラベルが既に設計されている場合は、特定の入力に1つ以上のラベルが含まれる可能性があるため、競合は発生しません。
詳細については、W3Cの仕様を参照してください。
簡単な例:
.container { 
  width: 400px; 
  border: 3px 
  solid #f7c; 
  }
.textareaContainer {
	display: block;
	border: 3px solid #38c;
	padding: 10px;
  }
textarea { 
  width: 100%; 
  margin: 0; 
  padding: 0; 
  border-width: 0; 
  }
<body>
<div class="container">
	I am the container
	<label class="textareaContainer">
		<textarea name="text">I am the padded textarea with a styled border...</textarea>
	</label>
</div>
</body>
 
 
.textareaContainer要素のパディングとボーダーは、textareaに指定したいものです。それらを編集して、必要に応じてスタイルを設定してください。.textareaContainer要素に大きくて目に見えるパディングと境界線を付けて、クリックしたときの動作を確認できるようにしました。