Выравнивание формы сворачивается в одну строку

#html #css #alignment #css-grid

#HTML #css #выравнивание #css-сетка

Вопрос:

У меня для родительского элемента установлено значение newTableForm with labelColumn и mainFormColumn as children — но с текущим CSS все сворачивается в одну строку:

 .newTableForm {
  display: grid;
  grid-template-columns: 1fr 3fr;
  grid-template-rows: 30px 30px 30px 40px;
  grid-gap: 10px;
  grid-template-areas: "... main" "labels main" "labels main" "... main";
  border: 2px dashed deeppink;
}

.labelColumn {
  grid-area: labels;
}

.mainFormColumn {
  grid-area: main;
}  
 <form method='post' action="/admin-post.php" class="newTableForm">
  <h4 class="mainFormColumn">
    Add a new price compare table
  </h4>
  <label for="store" class="labelColumn">Store</label>
  <input type="text" name="store" placeholder="" class="mainFormColumn"/>
  <label for="product-page" class="labelColumn">Product Page Link</label>
  <input type="text" name="product-page" placeholder="Copy address here" class="mainFormColumn" />
  <button class="mainFormColumn">Save new price compare table</button>
</form>  

Есть ли способ отменить поведение укладки в один столбец здесь? Я бы вообще удалил области шаблона, если бы не пустые разделы с … (выше и ниже раздела label)

Комментарии:

1. также удалите область сетки из .labelColumn amp; .mainFormColumn и какой тип компоновки вы хотите

Ответ №1:

Опять же, вы можете отбросить, grid-template-areas поскольку несколько областей сетки перекрываются — и вы можете использовать псевдоэлементы для этого:

  • поместите labelColumn в первый столбец с помощью grid-column: 1 и mainFormColumn во второй столбец с помощью grid-column: 2 .

  • after элемент будет первым столбцом в последней строке с использованием grid-row: -2 и grid-column: 1

  • before будет первым столбцом в первой строке с использованием grid-column: 1

Смотрите демонстрацию ниже:

 .newTableForm {
  display: grid;
  grid-template-columns: 1fr 3fr;
  grid-template-rows: 30px 30px 30px 40px;
  grid-gap: 10px;
  border: 2px dashed deeppink;
}

.labelColumn {
  grid-column: 1;
}

.mainFormColumn {
  grid-column: 2;
}
.newTableForm:after, .newTableForm:before {
  content: '';
  display: block;
  grid-column: 1;
}

.newTableForm:after {
  grid-row: -2;
}  
 <form method='post' action="/admin-post.php" class="newTableForm">
  <h4 class="mainFormColumn">
    Add a new price compare table
  </h4>
  <label for="store" class="labelColumn">Store</label>
  <input type="text" name="store" placeholder="" class="mainFormColumn"/>
  <label for="product-page" class="labelColumn">Product Page Link</label>
  <input type="text" name="product-page" placeholder="Copy address here" class="mainFormColumn" />

  <button class="mainFormColumn">Save new price compare table</button>
</form>  

Ответ №2:

Я просто обновляю ваш .newTableForm css некоторыми обновлениями. Я надеюсь, это вам поможет. Спасибо

 .newTableForm {
  display: flex;
  flex-direction: column;
  border: 2px dashed deeppink;
}
  

Комментарии:

1. Привет, с этим кодом проблема со стекированием устранена. Но я хотел левый столбец меток, это не делает этого.