私たちが達成したいもののユーザーにレンダリングされる最終的な出力を考えてみましょう:ボーダーとパディングの両方を備えたパディングされたテキストエリア、クリックされたときにテキストエリアにフォーカスが渡されるという特徴、および自動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要素に大きくて目に見えるパディングと境界線を付けて、クリックしたときの動作を確認できるようにしました。