Как выровнять строки вложенных форм с помощью Bootstrap 4? - PullRequest
3 голосов
/ 02 июля 2019

У меня есть вложенная строка формы, и я хочу выровнять поля формы по вертикали. В настоящее время вывод таков:

enter image description here

Код здесь:

 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
 
 <div class="card">
      <div class="card-body">
    
        <div class="form-group row">
          <label for="name" class="col-sm-3 col-form-label">Name</label>
          <div class="col-sm-9">
            <input type="text" class="form-control" id="name" disabled>
          </div>
        </div>
        <div class="form-group row">
          <label for="description" class="col-sm-3 col-form-label">Description</label>
          <div class="col-sm-9">
            <textarea class="form-control" id="description" rows="5" disabled></textarea>
          </div>
        </div>
        
        <div class="form-group row">
          <div class="col-sm-7">
            <div class="form-group row">
              <label for="description" class="col-sm-5 col-form-label">Rate</label>
              <div class="col-sm-7">
                <input type="text" class="form-control">
              </div>
            </div>
            <div class="form-group row">
              <label for="description" class="col-sm-5 col-form-label">Start date</label>
              <div class="col-sm-7">
                <input type="text" class="form-control">
              </div>
            </div>
            <div class="form-group row">
              <label for="description" class="col-sm-5 col-form-label">End date</label>
              <div class="col-sm-7">
                <input type="text" class="form-control">
              </div>
            </div>
          </div>
          
          <div class="col-sm-5">
            <div class="promotion-image-container">
              <img src="https://via.placeholder.com/300x200" class="img-thumbnail">
            </div>
          </div>
        </div>
        
      </div>
    </div>

Как видите, в столбцах есть небольшое смещение. У меня есть изображение, которое я хочу выровнять с другими 3 полями.

Я попытался откорректировать номера столбцов, но не могу правильно их выровнять.

Любая помощь будет высоко ценится.

Ответы [ 3 ]

1 голос
/ 02 июля 2019

Только что добавили собственный стиль padding-left:24px !important для div class='col-sm-7 padd-left', это будет работа

@media only screen and (min-width: 768px) {
  .padd-left{
      padding-left:24px !important
  }
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>
  
  <div class="card">
  <div class="card-body">

    <div class="form-group row">
      <label for="name" class="col-sm-3 col-form-label">Name</label>
      <div class="col-sm-9">
        <input type="text" class="form-control" id="name" disabled>
      </div>
    </div>
    <div class="form-group row">
      <label for="description" class="col-sm-3 col-form-label">Description</label>
      <div class="col-sm-9">
        <textarea class="form-control" id="description" rows="5" disabled></textarea>
      </div>
    </div>

    <div class="form-group row">
      <div class="col-sm-7">
        <div class="form-group row">
          <label for="description" class="col-sm-5 col-form-label">Rate</label>
          <div class="col-sm-7 padd-left">
            <input type="text" class="form-control">
          </div>
        </div>
        <div class="form-group row">
          <label for="description" class="col-sm-5 col-form-label">Start date</label>
          <div class="col-sm-7 padd-left">
            <input type="text" class="form-control">
          </div>
        </div>
        <div class="form-group row">
          <label for="description" class="col-sm-5 col-form-label">End date</label>
          <div class="col-sm-7 padd-left">
            <input type="text" class="form-control">
          </div>
        </div>
      </div>

      <div class="col-sm-5">
        <div class="promotion-image-container">
          <img src="https://via.placeholder.com/300x200" class="img-thumbnail">
        </div>
      </div>
    </div>

  </div>
</div>
1 голос
/ 02 июля 2019

Проблема в том, что <label> эльменец не имеет такой же width. Вы использовали .col-sm-3 на первых двух и .col-ms-5 на последних трех. Даже если вы используете один и тот же .col-* на всех них, они все равно будут иметь разную ширину, поскольку последние три являются вложенными. (Проверьте первый фрагмент кода)

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>

<div class="card">
  <div class="card-body">

    <div class="form-group row">
      <label for="name" class="col-sm-3 col-form-label bg-danger">Name</label>
      <div class="col-sm-9">
        <input type="text" class="form-control" id="name" disabled>
      </div>
    </div>
    <div class="form-group row">
      <label for="description" class="col-sm-3 col-form-label bg-danger">Description</label>
      <div class="col-sm-9">
        <textarea class="form-control" id="description" rows="5" disabled></textarea>
      </div>
    </div>

    <div class="form-group row">
      <div class="col-sm-7">
        <div class="form-group row">
          <label for="description" class="col-sm-5 col-form-label bg-danger">Rate</label>
          <div class="col-sm-7">
            <input type="text" class="form-control">
          </div>
        </div>
        <div class="form-group row">
          <label for="description" class="col-sm-5 col-form-label bg-danger">Start date</label>
          <div class="col-sm-7">
            <input type="text" class="form-control">
          </div>
        </div>
        <div class="form-group row">
          <label for="description" class="col-sm-5 col-form-label bg-danger">End date</label>
          <div class="col-sm-7">
            <input type="text" class="form-control">
          </div>
        </div>
      </div>

      <div class="col-sm-5">
        <div class="promotion-image-container">
          <img src="https://via.placeholder.com/300x200" class="img-thumbnail">
        </div>
      </div>
    </div>
  </div>
</div>

Я предлагаю использовать контейнер для каждого из <label> элементов и применять .col-sm-auto и .col-12 непосредственно к контейнеру. Затем установите фиксированную ширину для <label>, чтобы имели одинаковую ширину . Вы можете использовать медиазапросы для установки различной ширины в зависимости от размера области просмотра.

Используйте .col-sm для контейнеров <input> и <textarea>, чтобы они занимали все доступное пространство. Используйте .col-12 на них для мобильных устройств.

@media (min-width: 576px) {
  label {
    width: 200px !important;
  }
}
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js"></script>

<div class="card">
  <div class="card-body">
    <div class="form-group row">
      <div class="col-12 col-sm-auto bg-primary">
        <label for="name" class="col-form-label">Name</label>
      </div>
      <div class="col-sm col-12">
        <input type="text" class="form-control" id="name" disabled>
      </div>
    </div>
    <div class="form-group row">
      <div class="col-12 col-sm-auto bg-primary">
        <label for="description" class="col-form-label">Description</label>
      </div>
      <div class="col-12 col-sm">
        <textarea class="form-control" id="description" rows="5" disabled></textarea>
      </div>
    </div>

    <div class="form-group row">
      <div class="col-12 col-sm-7">
        <div class="form-group row">
          <div class="col-12 col-sm-auto bg-primary ">
            <label for="description" class="col-form-label">Rate</label>
          </div>
          <div class="col-12 col-sm">
            <input type="text" class="form-control">
          </div>
        </div>
        <div class="form-group row">
          <div class="col-12 col-sm-auto bg-primary">
            <label for="description" class="col-form-label">Start date</label>
          </div>
          <div class="col-12 col-sm">
            <input type="text" class="form-control">
          </div>
        </div>
        <div class="form-group row">
          <div class="col-12 col-sm-auto bg-primary">
            <label for="description" class="col-form-label ">End date</label>
          </div>
          <div class="col-12 col-sm">
            <input type="text" class="form-control">
          </div>
        </div>
      </div>

      <div class="co-12 col-sm-5">
        <div class="promotion-image-container">
          <img src="https://via.placeholder.com/300x200" class="img-thumbnail">
        </div>
      </div>
    </div>
  </div>
</div>

https://codepen.io/anon/pen/RzMzpR

0 голосов
/ 02 июля 2019

Можете ли вы попробовать мой код. Я изменил код строки:

<div class="card">
    <div class="card-body">
        <div class="form-group row">
            <label for="name" class="col-sm-3 col-form-label">Name</label>
            <div class="col-sm-9">
                <input type="text" class="form-control" id="name" disabled>
            </div>
        </div>
        <div class="form-group row">
            <label for="description" class="col-sm-3 col-form-label">Description</label>
            <div class="col-sm-9">
                <textarea class="form-control" id="description" rows="5" disabled></textarea>
            </div>
        </div>
        <div class="form-group row">
            <div class='col-3'>
                <div class="form-group"><label for="description" class="col-form-label">Rate</label></div>
                <div class="form-group"><label for="description" class="col-form-label">Start date</label></div>
                <div class="form-group">
                    <label for="description" class="col-form-label">End date</label>
                </div>
            </div>
            <div class='col-4'>
                <div class="form-group">
                    <input type="text" class="form-control">
                </div>
                <div class="form-group">
                    <input type="text" class="form-control datepicker">
                </div>
                <div class="form-group">
                    <input type="text" class="form-control datepicker">
                </div>
            </div>
            <div class='col-5'>
                <div class="promotion-image-container">
                    <img src="https://via.placeholder.com/300x200" class="img-thumbnail">
                </div>
            </div>
        </div>
    </div>
</div>

Это демонстрационная ссылка: https://codepen.io/phuongnm153/pen/zVWevP

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...