In Bootstrap should separate input fields be put inside their own col or share col to keep them together, right justified.
I have a combo and input that I want to be shown on the same row on the right-hand side of the screen. If I put it together in a col-4
<!-- Bootstrap-5 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
<!-- Body -->
<div class="row justify-content-end">
<div class="col-4 ms-auto m-2">
<select id="sort_list" style="display: inline" class="form-select m-2">
<option value="sortname_asc">
Sort by Sortname ascending
</option>
<option value="sortname_desc">
Sort by Sortname descending
</option>
<option value="name_asc">
Sort by Name ascending
</option>
<option value="name_desc">
Sort by Name descending
</option>
</select>
<div class="input-group">
<span for="filter" id="filterlabel" class="input-group-text">
Filter
</span>
<input type="text" id="filter" name="filter" onkeyup="filterOnly()" class="form-control">
</div>
</div>
</div>
they are shown on top of each other
If I put in their own col-2s then only the second one is right-justified, the other one is in the center
<!-- Bootstrap-5 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
<!-- Body -->
<div class="row justify-content-end">
<div class="col-2 ms-auto m-2">
<select id="sort_list" style="display: inline" class="form-select m-2">
<option value="sortname_asc">
Sort by Sortname ascending
</option>
<option value="sortname_desc">
Sort by Sortname descending
</option>
<option value="name_asc">
Sort by Name ascending
</option>
<option value="name_desc">
Sort by Name descending
</option>
</select>
</div>
<div class="col-2 ms-auto m-2">
<div class="input-group">
<span for="filter" id="filterlabel" class="input-group-text">
Filter
</span>
<input type="text" id="filter" name="filter" onkeyup="filterOnly()" class="form-control">
</div>
</div>
</div>
I also tried adding style="display: inline" to the input field but made no difference. What is the correct way of doing this?
It seems that select elements will use all the available space, so in the first case, if I used a larger number of columns (e.g col-8) then all that space will always be used by the first select, never shared with the text input field
Update
Answer from Cervus seems to work, except I need to keep ms-auto or first column will just expand to take up whole, why is that, this is my code
<!-- Bootstrap-5 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
<!-- Body -->
<div class="row justify-content-end">
<span class="col col-auto m-2">
<span class="input-group">
<label class="input-group-text" for="sort_list">
Sort By
</label>
<select id="sort_list" name="sort_list" class="form-select" onchange="sort(this);">
<option value="sortname_asc">
Sort Name Up
</option>
<option value="sortname_desc">
Sort Name Down
</option>
<option value="name_asc">
Name Up
</option>
<option value="name_desc">
Name Down
</option>
</select>
</span>
</span>
<span class="col-2 col-auto m-2">
<span class="input-group">
<span for="filter" id="filterlabel" class="input-group-text">
Filter
</span>
<input type="text" id="filter" name="filter" onkeyup="filterOnly()" class="form-control">
</span>
</span>
</div>
If I remove col-auto I get first column too wide
<!-- Bootstrap-5 -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3" crossorigin="anonymous">
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js" integrity="sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p" crossorigin="anonymous"></script>
<!-- Body -->
<div class="row justify-content-end">
<span class="col m-2">
<span class="input-group">
<label class="input-group-text" for="sort_list">
Sort By
</label>
<select id="sort_list" name="sort_list" class="form-select" onchange="sort(this);">
<option value="sortname_asc">
Sort Name Up
</option>
<option value="sortname_desc">
Sort Name Down
</option>
<option value="name_asc">
Name Up
</option>
<option value="name_desc">
Name Down
</option>
</select>
</span>
</span>
<span class="col-2 m-2">
<span class="input-group">
<span for="filter" id="filterlabel" class="input-group-text">
Filter
</span>
<input type="text" id="filter" name="filter" onkeyup="filterOnly()" class="form-control">
</span>
</span>
</div>