Выравнивание элементов ввода формы разной длины

Мне нужно создать форму, используя только HTML и CSS. Поля формы имеют разную длину в зависимости от того, какое это поле.

Я пробовал почти все решения, которые я нашел на SO и других сайтах, которые используют такие вещи, как режимы отображения, но все они, похоже, нацелены на формы, где все поля ввода имеют одинаковый размер. Я также пытался использовать таблицу для создания формы, но я недостаточно знаю о них, чтобы это сработало. Я по-прежнему открыт для использования таблицы, если кто-нибудь готов научить меня, как заставить ее работать.

form {
  margin-top: 25px;
}

.form {
  margin-left: 10px;
  background-color: #fff;
  float: left;
  width: 620px;
}

.form p {
  margin-left: 10px;
}

.form h3,
.summary h3 {
  font-size: 36px;
  background-color: #fff;
  width: auto;
  padding-top: 35px;
}

.form label {
  font-family: Arial, sans-serif;
  font-size: 14px;
  display: block;
  margin-left: 10px;
  color: #8f8f8f;
}

input {
  float: left;
  margin-left: 10px;
  background-color: #f9f9f9;
  border: 1px solid #cdcdcd;
  height: 36px;
  border-radius: 2px;
}

.form span {
  color: #861919;
}

.name {
  width: 288px;
}

.bigbar {
  width: 448px;
}

.smallbar {
  width: 128px;
}
<form action = "#" method = "POST">
  <label for = "firstname">First Name <span>*</span></label>
  <input type = "text" id = "firstname" required class = "name" />
  <label for = "lastname">Last Name <span>*</span></label>
  <input type = "text" id = "lastname" required class = "name" />
  <label for = "address">Street Address <span>*</span></label>
  <input type = "text" id = "address" required class = "bigbar" />
  <label for = "apt">Apt/Unit/Suite #</label>
  <input type = "text" id = "apt" class = "smallbar" />
  <label for = "city">City <span>*</span></label>
  <input type = "text" id = "city" required class = "bigbar" />
  <label for = "province">Province <span>*</span></label>
  <input type = "text" id = "province" required class = "smallbar" />
  <label for = "code">Postal Code <span>*</span></label>
  <input type = "text" id = "code" required class = "smallbar" />
  <label for = "phone">Phone Number <span>*</span></label>
  <input type = "tel" id = "phone" required class = "bigbar" />
  <button type = "submit" id = "submit">Continue Checkout</button>
</form>

В конце должно получиться так: https://puu.sh/DQhyH/2aed3ce204.png

но, насколько мне известно, это выглядит так: https://puu.sh/DQhAs/eb0a1eeb5b.png (не могу публиковать изображения, потому что просто создал свою учетную запись)

так что это почти там, но поля не выровнены должным образом.

Оффтоп, но почему "Почтовый индекс" и "Телефон" в одной строке?

Kosh 08.07.2019 20:29

Наверное, так хочет инструктор.

user11756032 08.07.2019 20:30

Почему бы вам не использовать CSS, чтобы сделать каждый элемент одинакового размера? input { width: 200px;}

Bryce Howitson 08.07.2019 20:35

Поля ввода должны быть разных размеров в соответствии с инструкциями для моего задания. Может быть, я неправильно понимаю, что вы говорите?

user11756032 08.07.2019 20:40
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
4
217
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Это можно сделать довольно легко с таблицей, использующей атрибут colspan для td элементов. Однако table предназначены для отображения данных и не должны использоваться для макета (эта статья перечисляет несколько причин).

Вам нужно посмотреть на желаемый результат и сформировать сетку, содержащую div элементы. У вас есть несколько «строк», поэтому поместите содержимое каждой строки внутрь div.row, занимающего всю ширину. Ваш контент в строках имеет ширину 1, 2 или 3 «столбца» из 4. Таким образом, вы делаете div.col1, div.col2, div.col3 с соответствующей шириной и отображением встроенного блока. Затем просто убедитесь, что вы поместили четыре столбца в каждую строку. Содержащие элементы div теперь определяют ширину, поэтому мы устанавливаем inputs и labels на width:100%, чтобы использовать полную ширину соответствующих родителей.

div.field {
  display: inline-block;
  padding: .5em;
}

div.row,
input,
label,
button {
  width: 100%;
}

form {
  margin-top: 25px;
  width: 620px;
}

form label {
  font-family: Arial, sans-serif;
  font-size: 14px;
  display: block;
  margin-left: 10px;
  color: #8f8f8f;
}

input {
  /*float: left;*/
  margin-left: 10px;
  background-color: #f9f9f9;
  border: 1px solid #cdcdcd;
  height: 36px;
  border-radius: 2px;
}

form span {
  color: #861919;
}

.col2 {
  width: 288px;
}

.col3 {
  width: 448px;
}

.col1 {
  width: 128px;
}
<form action = "#" method = "POST">
  <div class = "row">
    <div class = "col2 field">
      <label for = "firstname">First Name <span>*</span></label>
      <input type = "text" id = "firstname" required/>
    </div>
    <div class = "col2 field">
      <label for = "lastname">Last Name <span>*</span></label>
      <input type = "text" id = "lastname" required/>
    </div>
  </div>
  <div class = "row">
    <div class = "col3 field">
      <label for = "address">Street Address <span>*</span></label>
      <input type = "text" id = "address" required class = "bigbar" />
    </div>
    <div class = "col1 field">
      <label for = "apt">Apt/Unit/Suite #</label>
      <input type = "text" id = "apt" />
    </div>
  </div>
  <div class = "row">
    <div class = "col3 field">
      <label for = "city">City <span>*</span></label>
      <input type = "text" id = "city" required/>
    </div>
    <div class = "col1 field">
      <label for = "province">Province <span>*</span></label>
      <input type = "text" id = "province" required/>
    </div>
  </div>
  <div class = "row">
    <div class = "col1 field">
      <label for = "code">Postal Code <span>*</span></label>
      <input type = "text" id = "code" required/>
    </div>
    <div class = "col3 field">
      <label for = "phone">Phone Number <span>*</span></label>
      <input type = "tel" id = "phone" required/>
    </div>
  </div>
  <div class = "row">
    <div class = "col1 field"></div>
    <div class = "col2 field">
      <button type = "submit" id = "submit">Continue Checkout</button>
    </div>
    <div class = "col1 field"></div>
  </div>
</form>

Другие вопросы по теме