Атрибут размера для поля ввода не выполняется
Взято непосредственно из W3Schools:
Определение и использование Атрибут size определяет ширину поле ввода.
Для <input type="text">
и <input type="password">
размер Атрибут определяет количество символов, которые должны быть видимыми. Для все другие типы ввода, размер определяет ширину поля ввода в пикселей.
Так..
Если это так, почему мое поле <input type="text" size="2"/>
достаточно велико, чтобы отобразить 5 CAPTIAL MMMMM?
Ответы
Ответ 1
Такая же "ошибочная" информация указана в спецификации HTML4, спецификации HTML5, Sitepoint, Mozilla Developer Network и Microsoft MSDN. Таким образом, это не просто ошибка W3Schools.
В любом случае, в то время как в спецификациях утверждается, что атрибутом размера должно быть количество видимых символов, большинство веб-браузеров решили использовать количество единиц em, что означает ширину символа капитала M.
Чтобы указать ширину точно в пикселях или любой выбранной вами единице, используйте свойство ширины CSS.
Чтобы ответить на ваш обновленный вопрос: это ширина капитала M в размере шрифта по умолчанию, применяемая стилем CSS в текстовое поле, но размер шрифта текста внутри текстового поля обычно меньше.
Хотите сделать определенное количество символов, помещенных внутри коробки? Вам придется переключиться на шрифт с фиксированной шириной.
Ответ 2
Проблема заключается в том, что атрибут size = x
не находится в пикселях... скорее, он обозначает очень приблизительный размер, который должен содержать элемент <input />
для хранения символов x
. Так, например, <input size=2 />
должен отображать поле ввода, которое может содержать 2 символа.
К сожалению, это зависит от шрифта и шрифта (например, ширины шрифта переменной ширины), и поэтому вы, вероятно, заметите, что установка атрибута размера на 2 фактически отображает поле ввода размером 5 или что-то в этом роде. Если вы используете моноширинный шрифт, size=2
должен отображать текстовое поле, которое может содержать ровно 2 символа... или хотя бы приблизиться.
Однако, чтобы установить ширину элемента <input>
в пикселях, ems и т.д., попробуйте вместо этого использовать свойство width
CSS:
<input type="text" style="width:20px" />
В приведенном выше примере ширина ввода будет составлять ровно 20 пикселей, за исключением границ и/или заполнения.
Ответ 3
Вы не можете воспринимать это буквально, поскольку это невозможно.
Ширина элемента основывается на атрибуте size
и используемом размере шрифта, но он точно не соответствует этому количеству символов, потому что это невозможно.
Все символы не имеют одинаковой ширины, поэтому символы llll
будут легко помещаться на входе с size="4"
, но символы mmmm
не будут.
Кроме того, добавлено дополнительное пространство, поэтому вход с size="2"
не будет в два раза шире ввода с size="1"
.
То, что используется как средняя ширина символа, может зависеть от браузера. Я тестировал в Firefox, и я не нашел ни одного символа, который точно соответствует, но символ *
очень хорошо соответствует этой средней ширине.
Ответ 4
Ответ заключается в том, что, если не использовать шрифт с фиксированной шириной, браузер не может точно определить ширину двух символов. Я думаю, что ваше поле с двумя символами, вероятно, поместило бы два "m" s бок о бок.
Что касается корректности w3schools, из W3C следует следующее:
size = cdata [CN] Этот атрибут сообщает пользовательскому агенту начальную ширину элемента управления. Ширина указана в пикселях, кроме случаев, когда атрибут type имеет значение "текст" или "пароль". В этом случае его значение относится к (целое число) символов.
http://www.w3.org/TR/html4/interact/forms.html#edef-INPUT