Выравнивание столбцов без таблиц или colspan

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

Вот пример ( plnkr):

<!DOCTYPE html>
<html>

  <head>
    <style>
      h1 {
          font-size: 1.1rem;
          border-bottom: 1px solid #ccc;
      }

      td {
        vertical-align: top;
        padding-bottom: 0.5rem;
      }
      </style>
  </head>

  <body>
      <table>
          <tr>
              <td colspan='2'><h1>This is a header that should span columns.</h1></td>
          </tr>
          <tr>
              <td>
                label:
                  <div>(This label is extra</div>
                  <div>tall because of these</div>
                  <div> extra lines.)</div>
              </td>
              <td><input placeholder='search for stuff'></td>
          </tr>
          <tr>
              <td>this is the longest label:</td>
              <td><input placeholder='search for stuff'>
                  <div>This content is extra tall.</div>
              </td>
          </tr>
          <tr>
              <td>longer label:</td>
              <td><input placeholder='search for stuff'></td>
          </tr>

          <tr>
              <td colspan='2' class='my-header-style'><h1>This is a header that should span columns.</h1></td>
          </tr>
          <tr>
              <td>long label:</td>
              <td><input placeholder='search for stuff'></td>
          </tr>
          <tr>
              <td>another label:</td>
              <td>
                  <div>This content is extra tall.</div>
                  <div>This content is extra tall.</div>
                  <div>This content is extra tall.</div>
              </td>
          </tr>
          <tr>
              <td>short label:</td>
              <td><input placeholder='search for stuff'></td>
          </tr>
      </table>
  </body>
</html>

У нас есть две группы списков "label: input", каждая из которых имеет свои заголовки. Крайний левый столбец соответствует ширине самой широкой метки в любой группе, и в то же время каждая строка также регулируется по высоте самого высокого элемента.

Как мне добиться такого же поведения без таблиц? Когда люди говорят о макете "без таблиц", это только для вещей, которые не заботятся о размере контента для их макета?

1 ответ

РЕДАКТИРОВАТЬ:

Извини. На самом деле вы можете сделать более двух элементов в строке, но (как обычно с float: right) вы должны расположить их в обратном порядке.


Если вам не нужно использовать таблицу: добавьте div для каждой строки и поместите невидимое горизонтальное правило между ними, чтобы они не наваливались друг на друга. Также: float: слева от меток и float: справа от полей ввода. Это работает, но я не знаю, как сделать линию из трех или более элементов, например: Рожденный: Месяц / День / Год, работа.

Во всяком случае, вот как вы можете это сделать.

<!DOCTYPE=html>
<html>
   <style>
       * {
          margin: 0;
          padding: 0;
       }
       body {
          float: left;
       }
       hr {
          clear: both;
          border: none;
       }
       p{
          float: left;
       }
       form {
          float: right;
       }
   </style>
   <body>
       <div id = "row_1">
              <p>looooooooooooo <br /> ooooooooooooo <br /> ooong label: </p>
              <form><input type="text" placeholder="Second" /></form>
       </div>
       <hr />
       <div id = "row_2">
              <p>short</p>
              <form><input type="text" placeholder="First" /></form>
       </div>
   </body>
</html>
Другие вопросы по тегам