#html #css #reactjs
#HTML #css #reactjs
Вопрос:
У меня есть простая форма в React с двумя входами и кнопкой отправки. Я бы хотел, чтобы кнопка была централизована под двумя входами, но не могу заставить это работать вообще. Может кто-нибудь, пожалуйста, помочь?
HTML
.SearchBar-fields {
display: flex;
justify-content: center;
margin-bottom: 2.88rem;
flex-direction: row;
flex-wrap: wrap;
}
.SearchBar-fields input {
width: 21rem;
padding: .66rem 1rem;
margin-right: 2.22rem;
border: 1px solid #fff;
border-radius: 4px;
font-size: .77rem;
font-weight: 500;
align-self: stretch;
}
.SearchBar-fields input:last-child {
margin-right: 0;
}
.SearchBar-submit button {
border-radius: 4px;
padding: .72rem 1.7rem;
background-color: #cca353;
color: #ffffff;
font-weight: 600;
transition: background-color .5s;
border-radius: 20px;
flex-direction: column;
min-width: 100%;
}
<form className="SearchBar-fields" onSubmit = {handleSearch}>
<input placeholder="Search Businesses" onChange = {handleTermChange} required/>
<input placeholder="Where?" onChange = {hanldeLocationChange} required />
<div className="SearchBar-submit">
<button >Let's Go</button>
</div>
</form>
Ответ №1:
ОБНОВИТЬ ДВА СПОСОБА СДЕЛАТЬ ЭТО:
Основная проблема, с которой вы сталкиваетесь, заключается в том, что элемент формы, который занимает всю ширину контейнера, является block-level element
.
1. Используйте дополнительную оболочку div
вокруг ваших входных данных и установите display:flex; в вашей оболочке.
.SearchBar-fields{
display: inline-flex;
}
.SearchBar-fields input {
width: 21rem;
padding: .66rem 1rem;
border: 1px solid #fff;
border-radius: 4px;
font-size: .77rem;
font-weight: 500;
}
.SearchBar-submit {
text-align:center;
}
.SearchBar-submit button {
border-radius: 4px;
padding: .72rem 1.7rem;
background-color: #cca353;
color: #ffffff;
font-weight: 600;
transition: background-color .5s;
border-radius: 20px;
margin-top:1rem;
}
<form class="SearchBar-fields" onSubmit = {handleSearch}>
<div class="inner-wrapper">
<input placeholder="Search Businesses" onChange = {handleTermChange} required/>
<input placeholder="Where?" onChange = {hanldeLocationChange} required />
<div>
<div class="SearchBar-submit">
<button >Let's Go</button>
</div>
</form>
Я исправил эту проблему, используя display:flex;
on form
и используя оболочку вокруг входных данных.
2. Второй метод:
Попробуйте сделать свою .SearchBar-fields
форму as display:inline-block
, чтобы форма увеличивала ширину ввода только в длину.
И после этого у вас есть .SearchBar-submit
div, который содержит вашу кнопку, которую вы можете просто использовать text-align:center
, кнопка div
и переместится в центр. Есть много других способов, но это просто и прямолинейно.
form.SearchBar-fields {
margin-bottom: 2.88rem;
}
.SearchBar-fields input {
width: 21rem;
padding: .66rem 1rem;
margin-right: 2.22rem;
border: 1px solid #fff;
border-radius: 4px;
font-size: .77rem;
font-weight: 500;
align-self: stretch;
}
.SearchBar-fields input:last-child {
margin-right: 0;
}
.SearchBar-submit {
border-radius: 4px;
padding: .72rem 1.7rem;
background-color: #cca353;
color: #ffffff;
font-weight: 600;
transition: background-color .5s;
border-radius: 20px;
}
<form className="SearchBar-fields" onSubmit = {handleSearch} style="display:inline-block">
<input placeholder="Search Businesses" onChange = {handleTermChange} required/>
<input placeholder="Where?" onChange = {hanldeLocationChange} required />
<div className="SearchBar-submit" style="text-align:center">
<button >Let's Go</button>
</div>
</form>
Комментарии:
1. Спасибо! Небольшая «ошибка» с полями ввода, и это сработало отлично, еще раз спасибо
Ответ №2:
Используйте display: flex
свойство. Если вы измените следующие фрагменты, это должно работать.
HTML
<form className="SearchBar-fields flex flex-c " onSubmit = {handleSearch}>
<input placeholder="Search Businesses" onChange = {handleTermChange} required/>
<input placeholder="Where?" onChange = {hanldeLocationChange} required />
<div className="SearchBar-submit flex content-centered">
<button >Let's Go</button>
</div>
</form>
css
.SearchBar-fields {
display: flex;
justify-content: center;
margin-bottom: 2.88rem;
flex-direction: row;
flex-wrap: wrap;
width: 21rem;
}
.SearchBar-fields input {
padding: .66rem 1rem;
margin-right: 2.22rem;
border: 1px solid #fff;
border-radius: 4px;
font-size: .77rem;
font-weight: 500;
align-self: stretch;
}
.flex {
display: flex;
}
.flex-c {
flex-direction: column;
}
.content-centered {
justify-content: space-around;
}
Ответ №3:
Я бы предложил что-то вроде этого (протестировано и работает):
<div className="fullDiv">
<form className="SearchBar-fields">
<div className="inputDiv">
<input placeholder="Search Businesses" />
<input placeholder="Where?" />
</div>
<div className="SearchBar-submit">
<button>Let's Go</button>
</div>
</form>
</div>
Многие проблемы с CSS, с которыми вы столкнетесь, можно легко устранить, добавив более конкретные разделы вокруг каждого уникального блока html. Это также считается правильной практикой (совет на будущее)
Ответ №4:
Оберните кнопку внутри div и передайте ее
display: flex; justigy-content: center; min-width: 100%