Ответ 1
Проблема в том, что Flexbox не работает в строках/столбцах так, как это делает таблица. Вы можете использовать col-sm-auto
чтобы каждая метка сокращалась до соответствия, но тогда метки/входы не будут выравниваться вертикально вниз по странице...
Похоже, вы хотите сжать столбец меток, чтобы он соответствовал ширине самой широкой метки. Это можно сделать, поместив все метки в 1 столбец и входы в другой столбец, но затем каждая метка/вход не будет складываться вместе на мобильных экранах.
Там нет элегантного решения Bootstrap для решения этой проблемы. Вы можете использовать Таблицы, сетку CSS или опцию, описанную @Toan Lu в комментариях.
Опция Bootstrap Grid
Я бы рекомендовал просто использовать col-sm-2
или col-sm-3
для ярлыков (приспосабливая их примерно к самой широкой этикетке) и text-truncate
до эллипсиса (...) переполняющего текста до тех пор, пока они не упадут вертикально на мобильный...
<div class="form-row">
<label class="col-form-label col-sm-2 text-truncate">
Label
</label>
<div class="col-sm-3 col-md-2">
<select>..</select>
</div>
</div>
https://www.codeply.com/go/e3mDrmMv7k
Опция таблицы
С помощью этой опции width:1%
используется на этикетках, чтобы они уменьшались до ширины самого широкого. Используйте text-nowrap
чтобы остановить этикетки от упаковки. Каждая строка строки представляет собой d-table-row
и каждая метка представляет собой d-table-cell
...
.col-form-label.d-sm-table-cell {
width: 1%;
}
<div class="container py-3">
<div class="form-row d-table-row">
<label class="col-form-label col-sm-2 d-sm-table-cell text-nowrap">
Genre
</label>
<div class="col-sm-3 col-md-2">
<select>
..
</select>
</div>
</div>
<div class="form-row d-table-row">
<label class="col-form-label col-sm-2 d-sm-table-cell text-nowrap">
Longer label here
</label>
<div class="col-sm-3 col-md-2">
<select>
..
</select>
</div>
</div>
</div>
https://www.codeply.com/go/e3mDrmMv7k (см. второй вариант)
Параметр table делает divs в tr/td, но также работает с гибкостью, позволяя полям стек вертикально на мобильных устройствах. Подробнее читайте в [d-table classes] (Да, часть Bootstrap 4: http://getbootstrap.com/docs/4.1/utilities/display/#notation).
Опция CSS Grid
Еще один метод (не-Bootstrap 4) использует сетку CSS. Сделайте строки display:grid
Используйте fr
проклейки на 2 grid-template-columns
через ряд.
.d-grid {
display: grid;
grid-template-columns: 0fr 1fr;
}