Выбор входных и текстовых входов в HTML - лучший способ сделать равную ширину?

У меня такая простая форма (только для иллюстрации)...

<form>

   <div class="input-row">
      <label>Name</label>
      <input type="text" name="name" />
   </div>

   <div class="input-row">
      <label>Country</label>
      <select name="country">
         <option>Australia</option>
         <option>USA</option>
      </select>
   </div>

</form>

Мой метод компоновки с использованием CSS выглядит следующим образом:

form  {
    width: 500px;
}

form .input-row {
    display: block;
    width: 100%;
    height: auto;
    clear: both; 
    overflow: hidden; /* stretch to contain floated children */
    margin-bottom: 10px;
}

form .input-row label {
    display: block;
    float: left;
}

form .input-row input,
form .input-row select {
    display: block;
    width: 50%;
    float: right;
    padding: 2px;
}

Все это выравнивается довольно хорошо, за исключением того, что мой select элемент (в любом случае, Firefox) не всегда такой же, как и другие элементы input. Он обычно более узкий на несколько пикселей.

Я попытался изменить ширину на размер пикселя (например, 200px), но это не повлияло.

Каков наилучший способ получить их для всех с одинаковой шириной? Я надеюсь, что это не прибегает ко мне, устанавливая select width индивидуально, или помещая их в таблицы...

Ответ 1

Решение состоит в том, чтобы указать модель окна для элементов формы, и браузеры обычно согласны с большинством, когда вы используете border-box:

input, select, textarea {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}

Здесь normalize.css проект, который объединяет такие трюки.

Ответ 2

padding сделает текст ближе к краю окна.

попробуйте установить поле на 0px, и если это кажется правильным, поиграйте с ним (например, просто установите только margin-margin)

Ответ 3

Имели те же проблемы со 100% шириной таблицы и ячеек, с текстовым полем (также с шириной на 100%) шире, чем ячейка таблицы.

Это решило мою проблему в css:

table td
{
    padding-right: 8px;
}

Не лучшее решение когда-либо, потому что вы, вероятно, получите дополнительное пространство в правой части. Но, по крайней мере, это больше не скрывается!