Выбор размера отличается от входного размера из-за разного размера блока. Для входных данных в качестве размера блока установлено значение «content-box», а в параметре select для размера блока установлено значение «border-box». В приведенном ниже примере ввод будет шире, чем выбор:
<input type="text" name="a" value="a" style="width:100px; border:5px solid red; padding: 10px;" />
<select name="b" style="width:100px; border:5px solid red; padding: 10px;" /><option value="b">b</option></select>
это потому, что полной шириной для ввода будет ширина + отступ (влево + вправо) + граница (влево + вправо), а для выбранной полной ширины будет только ширина (но вы это знаете). Чтобы оба элемента вели себя одинаково, вы должны изменить модель размеров блока. В приведенном ниже примере input и select будут иметь одинаковую ширину *:
<input type="text" name="a" value="a" style="width:100px; border:5px solid red; padding: 10px;" />
<select name="b" style="box-sizing: content-box; width:100px; border:5px solid red; padding: 10px;" /><option value="b">b</option></select>
* используйте -moz-box-sizing для firefox
Как я знаю, это поведение согласованно во всех современных браузерах (включая iE6), но я не знаю, почему это работает именно так. Не знаю ни одной спецификации W3, где описывается это конкретное поведение. Есть примечание , предлагающее стиль по умолчанию , но оно охватывает только простые атрибуты - поэтому сброс css по умолчанию так популярен.