У меня есть поле выбора и значок внутри контейнера, например:
<div class = "container">
<select name = "select" style = "width:100%">
<option>Girl</option>
<option>Boy</option>
</select>
<i class = "fa fa-star"></i>
</div>
Я хочу, чтобы поле выбора имело полную ширину контейнера за вычетом длины значка, чтобы они располагались рядом друг с другом.
Я думал об измерении ширины значка в пикселях и установке его как margin-right в поле выбора. Но, похоже, это не работает с width:100%, и я также не уверен, будет ли ширина значка в пикселях одинаковой на всех устройствах.
Как я могу максимально расширить поле выбора, находясь на одной строке со значком?
Вот jFiddle.






Для этого вы можете использовать Flexbox. Вы можете назначить родительский контейнер для отображения как flexbox с помощью display:flex;. Кроме того, вы можете использовать свойство css flex, которое является сокращением для flex-grow, flex-shrink и flex-basis вместе взятых. Установка этого значения на 1 указывает элементу использовать все «пустые» горизонтальные интервалы.
.container {
display: flex;
}
select{
flex: 1;
}
i{
font-size: 1em;
}
.container {
display: flex;
}
select{
flex: 1;
}
i{
font-size: 1em;
}<link href = "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel = "stylesheet" />
<div class = "container">
<select name = "select">
<option>Girl</option>
<option>Boy</option>
</select>
<i class = "fa fa-star"></i>
</div>Вы можете найти дополнительную информацию о flexbox здесь
Flexbox
.container {
border: 1px solid;
display: flex;
}
select {
flex: 1; /* be as wide as possible */
}
i {
font-size: 1em;
}<link href = "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel = "stylesheet" />
<div class = "container">
<select name = "select">
<option>Girl</option>
<option>Boy</option>
</select>
<i class = "fa fa-star"></i>
</div>CSS-сетка
.container {
border: 1px solid;
display: grid;
grid-template-columns: 1fr auto;
/* first column will be as wide as possible */
}
i {
font-size: 1em;
}<link href = "https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.css" rel = "stylesheet" />
<div class = "container">
<select name = "select">
<option>Girl</option>
<option>Boy</option>
</select>
<i class = "fa fa-star"></i>
</div>Использование гибкого макета может решить вашу проблему, проверьте следующий код:
<style>
.container {
border:1px solid;
display:flex;
flex-direction:row;
}
select{
width: 100%;
}
i{
font-size: 1em;
}
</style>
<div class = "container">
<select name = "select">
<option>Girl</option>
<option>Boy</option>
</select>
<i class = "fa fa-star">icon</i>
</div>Также дополнительные требования, проверьте эту ссылку: https://www.w3schools.com/css/css3_flexbox.asp
что делает
select{ flex: 1; }?