давайте рассмотрим окончательный вывод, предоставленный пользователю того, что мы хотим достичь: заполненная текстовая область с рамкой и отступом, характеристики которых заключаются в том, что при нажатии они передают фокус нашей текстовой области и преимущество автоматической ширины 100%, характерной для блочных элементов.
На мой взгляд, лучшим подходом является использование решений низкого уровня, насколько это возможно, для достижения максимальной поддержки браузеров.
В этом случае единственный HTML может работать нормально, избегая использования Javascript (который так или иначе мы все любим).
Тег LABEL приходит в нашу помощь, потому что он имеет такое поведение и может содержать элементы ввода, к которым он должен обращаться.
Его стиль по умолчанию - стиль встроенных элементов, поэтому, придав метке блочный стиль отображения, мы можем использовать автоматическую 100% ширину, включая отступы и границы, в то время как внутренняя текстовая область не имеет границ, нет отступов и ширины 100% .
Взглянув на особенности W3C, мы можем заметить и другие преимущества:
- атрибут «for» не требуется: если тег LABEL содержит целевой ввод, он автоматически фокусирует дочерний ввод при нажатии;
- если внешняя метка для текстовой области уже разработана, никаких конфликтов не возникает, поскольку данный вход может иметь одну или несколько меток.
См. Особенности W3C для получения более подробной информации.
Простой пример:
<code>
<html>
<head>
<style type="text/css">
.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; }
</style>
</head></p>
<p><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>
</html>
Заполнение и граница элементов .textareaContainer - это те, которые мы хотим дать текстовой области. Попробуйте отредактировать их, чтобы оформить их так, как вы хотите.
Я дал большой и видимый отступ и границы для элемента .textareaContainer, чтобы вы могли видеть их поведение при нажатии.