Reputation: 75
I am using bootstrap form elements and I want to center all the form elements in the middle. I've tried adding margin: 0 auto !important to the form-control class, but there are still issues with padding/margins. The input fields still have uneven left and right padding/margins. Plus, the text area and button are stuck to the left. Keeping responsive design in mind, what is the best way to approach this problem?
HTML:
<form class="form">
<h4 class="form-contactme">Contact Me</h4>
<div class="form-row">
<div class="form-group col-sm-6">
<label for="firstName" class="form-inputlabel">First Name</label>
<input type="text" class="form-control" id="firstName" placeholder="First Name">
</div>
<div class="form-group col-sm-6">
<label for="lastName" class="form-inputlabel">Last Name</label>
<input type="text" class="form-control" id="lastName" placeholder="Last Name">
</div>
</div>
<div class="form-row">
<div class="form-group col-sm-6">
<label for="email" class="form-inputlabel">Email</label>
<input type="email" class="form-control" id="email" placeholder="[email protected]">
</div>
<div class="form-group col-sm-6">
<label for="phone" class="form-inputlabel">Phone</label>
<input type="number" class="form-control" id="phone" placeholder="xxx-xxx-xxxx">
</div>
<div class="form-row">
<div class="form-group">
<label for="messageBox">Send me a message <i class="far fa-smile-beam"></i></label>
<textarea type="text" class="form-control" id="messageBox"></textarea>
</div>
</div>
<div class="form-row">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
Scss:
.form{
padding:3% !important;
background-color:#9fd199;
margin-bottom:5%;
&-contactme{
font-size:1.8rem;
font-weight:900;
text-align:center;
margin-bottom:15%;
}
&-row{
width:100%;
}
&-inputlabel{
display:none;
}
&-control{
margin-left:0 auto !important;
}
}
Upvotes: 1
Views: 1932
Reputation: 10834
Add display flex to the container, then you can align all the items to the center using align-items: center
.form-group, .form-row {
display: flex;
flex-direction: column;
align-items: center;
}
.form {
padding: 3% !important;
background-color: #9fd199;
margin-bottom: 5%;
}
.form-group,
.form-row {
display: flex;
flex-direction: column;
align-items: center;
}
.form-contactme {
font-size: 1.8rem;
font-weight: 900;
text-align: center;
margin-bottom: 15%;
}
.form-row {
width: 100%;
}
.form-inputlabel {
display: none;
}
.form-control {
margin-left: 0 auto !important;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
<form class="form">
<h4 class="form-contactme">Contact Me</h4>
<div class="form-row">
<div class="form-group col-sm-6">
<label for="firstName" class="form-inputlabel">First Name</label>
<input type="text" class="form-control" id="firstName" placeholder="First Name">
</div>
<div class="form-group col-sm-6">
<label for="lastName" class="form-inputlabel">Last Name</label>
<input type="text" class="form-control" id="lastName" placeholder="Last Name">
</div>
</div>
<div class="form-row">
<div class="form-group col-sm-6">
<label for="email" class="form-inputlabel">Email</label>
<input type="email" class="form-control" id="email" placeholder="[email protected]">
</div>
<div class="form-group col-sm-6">
<label for="phone" class="form-inputlabel">Phone</label>
<input type="number" class="form-control" id="phone" placeholder="xxx-xxx-xxxx">
</div>
<div class="form-row">
<div class="form-group">
<label for="messageBox">Send me a message <i class="far fa-smile-beam"></i></label>
<textarea type="text" class="form-control" id="messageBox"></textarea>
</div>
</div>
<div class="form-row">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</div>
</form>
Upvotes: 2
Reputation: 445
You missed a closing div. Now check
<form class="form">
<h4 class="form-contactme">Contact Me</h4>
<div class="form-row">
<div class="form-group col-sm-6">
<label for="firstName" class="form-inputlabel">First Name</label>
<input type="text" class="form-control" id="firstName" placeholder="First Name">
</div>
<div class="form-group col-sm-6">
<label for="lastName" class="form-inputlabel">Last Name</label>
<input type="text" class="form-control" id="lastName" placeholder="Last Name">
</div>
</div>
<div class="form-row">
<div class="form-group col-sm-6">
<label for="email" class="form-inputlabel">Email</label>
<input type="email" class="form-control" id="email" placeholder="[email protected]">
</div>
<div class="form-group col-sm-6">
<label for="phone" class="form-inputlabel">Phone</label>
<input type="number" class="form-control" id="phone" placeholder="xxx-xxx-xxxx">
</div>
</div>
<div class="form-row">
<div class="form-group">
<label for="messageBox">Send me a message <i class="far fa-smile-beam"></i></label>
<textarea type="text" class="form-control" id="messageBox"></textarea>
</div>
</div>
<div class="form-row">
<button type="submit" class="btn btn-primary">Submit</button>
</div>
</form>
Upvotes: 1
Reputation: 3911
It's because of default padding and margin of the form classes.
You have to remove the default paddings and margins in order to center the elements and aligned in a same line.
Add the following lines in you css
.form-group, .form-row > .col, .form-row > [class*="col-"] {
padding-left:0;
padding-right:0;
}
.form-row{
margin:0;
}
A working codepen link: https://codepen.io/Ev1tw1n/pen/xmdjeL
Upvotes: 1