#html #css
Вопрос:
У меня проблема. CSS-не моя любимая часть программирования, и я не могу этого понять. Мне нужен следующий результат:
Но вот что у меня есть сейчас:
#newOrderControl {
border-style: solid;
border-color: black;
border-width: 1px;
width: min-content;
font-size: 14px;
}
#newOrderInputFields {
display: grid;
grid-template-columns: auto auto auto auto;
column-gap: 40px;
}
#newOrderInputFields .inputField {
display: flex;
align-items: center;
flex-direction: row;
}
#newOrderInputFields label {
width: auto;
}
#newOrderButtons button {
float: right;
border-style: solid;
border-color: black;
border-width: 2px;
color: white;
height: 30px;
width: auto;
padding: 0px 15px;
text-align: center;
text-decoration: none;
font-size: 16px;
border-radius: 10px;
margin: 0px 5px;
}
.btnAll {
background-color: #6DA0ED;
border-style: solid;
border-color: black;
border-width: 1px;
color: white;
border-radius: 5px;
}
#btnTakeProfit {
background-color: #33AB37;
}
#btnPlaceOrder {
background-color: #6DA0ED;
}
.title {
display: block;
text-align: center;
color: #1D0F73;
font-size: 22px;
font-weight: bold;
margin: 5px;
}
<div id="newOrderControl">
<label class="title">New order</label>
<div id="newOrderInputFields">
<div class="inputField">
<label>Action:</label>
<select id="txtOrderAction">
<option value="">-</option>
<option value="Buy">Buy</option>
<option value="Sell">Sell</option>
</select>
</div>
<div class="inputField">
<label>Quantity:</label>
<div>
<input type="text" id="txtOrderQuantity">
<button class="btnAll" onclick="setAllQuantity()">All</button>
</div>
</div>
<div class="inputField">
<label>Target price:</label>
<input type="text" id="txtOrderTargetPrice">
</div>
<div class="inputField">
<label>Target perc:</label>
<input type="text" id="txtOrderTargetPerc">
</div>
<div class="inputField">
<label>Coin:</label>
<select id="txtOrderCoin">
<option value="">-</option>
</select>
</div>
<div class="inputField">
<label>Amount:</label>
<div>
<input type="text" id="txtOrderAmount">
<button class="btnAll" onclick="setAllAmount()">All</button>
</div>
</div>
<div class="inputField">
<label>Limit price:</label>
<input type="text" id="txtOrderLimitPrice">
</div>
<div class="inputField">
<label>Limit perc:</label>
<input type="text" id="txtOrderLimitPerc">
</div>
</div>
<div id="newOrderButtons">
<button id="btnTakeProfit">Take profit</button>
<button id="btnPlaceOrder">Place order</button>
</div>
</div>
С этим кодом у меня в настоящее время возникают следующие проблемы:
- Моя
All
кнопка не находится рядом с полем ввода - 2 кнопки ниже находятся за пределами
newOrderControl
div
- Они
labels
переносятся на следующую строку - Все входные данные и метки должны быть выровнены друг под другом, как в сетке
Сейчас я попытался изменить его на а grid
, но тогда я боролся с тем input
и button
тем, что находятся рядом друг с другом. Поэтому я завернул их в div
, но потом они полностью исчезли.
Что мне нужно сделать, чтобы получить результат?
Ответ №1:
(1) Удаление оболочки <div>
в приведенном ниже коде автоматически выровняет ввод и кнопки с помощью flexbox.
<div>
<input type="text" id="txtOrderQuantity">
<button class="btnAll" onclick="setAllQuantity()">All</button>
</div>
(2) Первое правило: не используйте float
для макета.
Я добавил:
#newOrderControl {
display: flex;
flex-direction: column;
Чтобы кнопки можно было выровнять справа с помощью
#newOrderInputFields label {
width: auto;
}
(3) Нанесение flex-shrink: 0;
<label>
предотвратит обертывание. Я изменил width
размер контейнера на width: max-content;
и уменьшил gap
, чтобы компенсировать это.
(4) добавлено justify-content: flex-end;
для их выравнивания:
#newOrderInputFields .inputField {
display: flex;
flex-direction: row;
justify-content: flex-end;
#newOrderControl {
display: flex;
align-items: center;
flex-direction: column;
border-style: solid;
border-color: black;
border-width: 1px;
width: max-content;
font-size: 14px;
}
#newOrderInputFields {
display: grid;
grid-template-columns: auto auto auto auto;
column-gap: 5px;
}
#newOrderInputFields .inputField {
display: flex;
flex-direction: row;
justify-content: flex-end;
align-items: center;
}
#newOrderInputFields label {
width: auto;
flex-shrink: 0;
}
#newOrderButtons {
align-self: flex-end;
}
#newOrderButtons button {
float: right;
border-style: solid;
border-color: black;
border-width: 2px;
color: white;
height: 30px;
width: auto;
padding: 0px 15px;
text-align: center;
text-decoration: none;
font-size: 16px;
border-radius: 10px;
margin: 0px 5px;
}
.btnAll {
background-color: #6DA0ED;
border-style: solid;
border-color: black;
border-width: 1px;
color: white;
border-radius: 5px;
}
#btnTakeProfit {
background-color: #33AB37;
}
#btnPlaceOrder {
background-color: #6DA0ED;
}
.title {
display: block;
text-align: center;
color: #1D0F73;
font-size: 22px;
font-weight: bold;
margin: 5px;
}
<div id="newOrderControl">
<label class="title">New order</label>
<div id="newOrderInputFields">
<div class="inputField">
<label>Action:</label>
<select id="txtOrderAction">
<option value="">-</option>
<option value="Buy">Buy</option>
<option value="Sell">Sell</option>
</select>
</div>
<div class="inputField">
<label>Quantity:</label>
<input type="text" id="txtOrderQuantity">
<button class="btnAll" onclick="setAllQuantity()">All</button>
</div>
<div class="inputField">
<label>Target price:</label>
<input type="text" id="txtOrderTargetPrice">
</div>
<div class="inputField">
<label>Target perc:</label>
<input type="text" id="txtOrderTargetPerc">
</div>
<div class="inputField">
<label>Coin:</label>
<select id="txtOrderCoin">
<option value="">-</option>
</select>
</div>
<div class="inputField">
<label>Amount:</label>
<input type="text" id="txtOrderAmount">
<button class="btnAll" onclick="setAllAmount()">All</button>
</div>
<div class="inputField">
<label>Limit price:</label>
<input type="text" id="txtOrderLimitPrice">
</div>
<div class="inputField">
<label>Limit perc:</label>
<input type="text" id="txtOrderLimitPerc">
</div>
</div>
<div id="newOrderButtons">
<button id="btnTakeProfit">Take profit</button>
<button id="btnPlaceOrder">Place order</button>
</div>
</div>
Комментарии:
1. Да, теперь кнопки находятся рядом друг с другом! Как я могу запретить метке переходить в следующую строку? И действие и ввод монет не выровнены друг под другом. Они начинаются/останавливаются в разных точках
2. @A. Вресвейк
flex-shrink: 0;
3. Но тогда последние входные файлы выходят за пределы границы div?
4. @A. Vreeswijk просто не хватает места для всего, вы хотите увеличить размер контейнера или уменьшить размер чего-то еще, например входных данных?
5. Ладно, подожди. Я обновлю свой код тем, что у меня есть сейчас!