達成したいことのユーザーにレンダリングされる最終的な出力を考えてみましょう: ボーダーとパディングの両方を持つパディングされたテキストエリア。クリックするとフォーカスがテキストエリアに渡され、自動 100% 幅の利点があります。ブロック要素の典型。
私の意見では、最善のアプローチは、可能な限り低レベルのソリューションを使用して、ブラウザーのサポートを最大化することです。この場合、HTML のみが正常に機能し、Javascript の使用を回避できます (いずれにせよ、私たちは Javascript を愛しています)。
LABEL タグは、そのような動作を持ち、アドレス指定する必要がある入力要素を含めることができるため、私たちの助けになります。デフォルトのスタイルはインライン要素のスタイルであるため、ラベルにブロック表示スタイルを指定すると、パディングと境界線を含む自動 100% 幅を利用できますが、内側のテキストエリアには境界線もパディングも幅 100% もありません。 .
W3C の仕様を見ると、他にも次のような利点があります。
- 「for」属性は必要ありません。LABEL タグにターゲット入力が含まれている場合、クリックすると子入力が自動的にフォーカスされます。
- テキストエリアの外部ラベルがすでに設計されている場合、特定の入力に 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 要素のパディングとボーダーは、テキストエリアに与えたいものです。それらを編集して、必要に応じてスタイルを設定してみてください。.textareaContainer 要素に大きくて目立つパディングと境界線を付けて、クリックしたときの動作を確認できるようにしました。