#html #css #flexbox
#HTML #css #flexbox
Вопрос:
Мне нужно поместить кнопку в мой ввод
Я попытался установить относительное положение для формы и абсолютное для кнопки и изменил левое / верхнее. Но в этих полях я должен указывать большие значения для хорошо выполненного результата (я установил левое значение 600 пикселей для кнопки размещения при вводе, поэтому это меня смущает)
Я хочу вот так:
Есть ли способ сделать это для гибкого отображения?
form {
padding: 4rem 0;
position: relative;
}
input[type=text] {
background: #fff;
width: 500px;
padding: 0.7rem;
border: 1px solid #cbcbce;
border-radius: 50px;
color: #3a3d4b;
}
button {
position: absolute;
background: #6fc754;
padding: 0.6rem 1rem;
border: none;
color: #fff;
border-radius: 25px;
left: 600px;
top:5px;
}
<form>
<input type="text" placeholder="Enter text">
<button>Send Invite</button>
</form>
Комментарии:
1. Скорее всего, это хак:
div
инкапсулировать форму (input
иbutton
). Ввод имеет невидимую границу, а граница, которую вы видите, является границей переносаdiv
2. вы хотите сказать, что мне нужно инкапсулировать форму в блоке div?
3. Я едва понял ответ, я предполагаю, что вы хотите иметь кнопку внутри ввода, вы должны указать позицию: относительно того, что вы вводите вместо формы для лучшей обработки позиции, чем установить прямо на кнопке.
4. Вы могли бы попробовать что-то вроде inputgroup из Bootstrap с кнопкой. Я могу привести вам пример, если хотите.
Ответ №1:
Попробуйте следующий код. Ошибки нет:
form {
padding: 4rem 0;
position: relative;
display: table;
}
input[type=text] {
box-sizing: border-box;
background: #fff;
width: 500px;
padding: 0.7rem 115px 0.7rem 0.7rem;
border: 1px solid #cbcbce;
border-radius: 50px;
color: #3a3d4b;
}
button {
position: absolute;
background: #6fc754;
padding: 0.6rem 1rem;
border: none;
color: #fff;
border-radius: 25px;
right: 4px;
transform: translateY(2.5px);
}
<form>
<input type="text" placeholder="Enter text">
<button>Send Invite</button>
</form>
Ответ №2:
Если вы НЕ можете изменить структуру HTML, то у вас фиксированная ширина 500 пикселей, поэтому, конечно, вам придется выполнить некоторые неприятные вычисления, чтобы расположить ее.
Если бы вы использовали проценты, было бы проще
Кроме того , у вас есть отступы ( которые отличаются от ввода на кнопку ) .
Итак, во-первых, left
of кнопка должна быть, calc(500px 1.4rem);
где 500px
— ширина ввода и 1.4rem
находится от left/right padding
того, 0.7rem
из input
которого у ,, есть. Теперь кнопка расположена сразу после ввода. Теперь переместите его влево на 100% от его ширины.
Во-вторых, нижняя часть должна быть bottom: 4.2rem
из-за form
заполнения top/bottom
4rem
, а затем 0.2rem
потому что заполнение ввода 0.7rem
, а заполнение кнопки 0.6rem
настолько 0.1 *2
меньше ( по оси Y ) .
form {
padding: 4rem 0;
position: relative;
}
input[type=text] {
background: #fff;
width: 500px;
padding: 0.7rem;
border: 1px solid #cbcbce;
border-radius: 50px;
color: #3a3d4b;
}
button {
position: absolute;
background: #6fc754;
padding: 0.6rem 1rem;
border: none;
color: #fff;
border-radius: 25px;
left: calc(500px 1.4rem);
bottom: 4.2rem;
transform: translateX(-100%)
}
<form>
<input type="text" placeholder="Enter text">
<button>Send Invite</button>
</form>
Комментарии:
1. @Nick ты уверен? jsfiddle.net/omqyedp5 нужны некоторые разрывы слов, но позиция все та же
2. ДА. Если текст кнопки переносится, позиционирование также нарушается.
3. @Nick снова. Вы уверены? jsfiddle.net/omqyedp5/2 добавлено
white-space: nowrap;
4. Ну, конечно, ввод будет меньше на мобильных экранах. Но это не то, что спросил OP. Мы не можем ответить на вопрос и охватить все возможные сценарии, в которых OP будет использовать код. Особенно когда есть простой пример кода без какого-либо конкретного контекста
Ответ №3:
Чтобы заставить это работать, вам нужно обернуть их в div
который имеет position: relative;
свойство CSS для этого.
form {
padding: 4rem 0;
position: relative;
}
.relative {
position: relative;
}
input[type=text] {
background: #fff;
width: 500px;
padding: 0.7rem;
border: 1px solid #cbcbce;
border-radius: 50px;
color: #3a3d4b;
}
button {
position: absolute;
background: #6fc754;
padding: 0.7rem 1rem;
border: none;
color: #fff;
border-radius: 25px;
right: 141px;
top:1px;
}
<form>
<div class="relative">
<input type="text" placeholder="Enter text">
<button>Send Invite</button>
</div>
</form>
Комментарии:
1. Здесь вам нужно будет использовать МЕДИА-запросы CSS , чтобы все выглядело так, как вы хотите. Или используйте процент вместо
px
для определения размера и размещения.