Reputation: 9288
I have a page where only a form exists and I want the form to be placed in the center of the screen.
<div class="container">
<div class="row justify-content-center align-items-center">
<form>
<div class="form-group">
<label for="formGroupExampleInput">Example label</label>
<input type="text" class="form-control" id="formGroupExampleInput" placeholder="Example input">
</div>
<div class="form-group">
<label for="formGroupExampleInput2">Another label</label>
<input type="text" class="form-control" id="formGroupExampleInput2" placeholder="Another input">
</div>
</form>
</div>
</div>
The justify-content-center
aligns the form horizontally, but I can't figure out how to align it vertically. I have tried using both align-items-center
and align-self-center
, but neither seems to work.
A minimal reproducible example can be found here.
Upvotes: 285
Views: 773071
Reputation: 3705
None has worked for me, but this one did.
Since the Bootstrap 4 .row
class is now display: flex
, you can simply use the new align-self-center
flexbox utility on any column to vertically center it.
<div class="row">
<div class="col-6 align-self-center">
<div class="card card-block">
Center
</div>
</div>
<div class="col-6">
<div class="card card-inverse card-danger">
Taller
</div>
</div>
</div>
I learned about it from this Medium article.
Upvotes: 12
Reputation: 4198
There are several suggestions involving bad practices, such as using pure CSS, a combination of Bootstrap classes with custom CSS, or even unnecessary Bootstrap classes.
Below, you can find the minimum required code to achieve the desired result natively, with an in-depth analysis for those seeking a better understanding.
<!DOCTYPE html>
<html lang="en">
<head>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"
rel="stylesheet"/>
</head>
<body>
<div class="vh-100 d-flex justify-content-center align-items-center">
<p>This content is centered vertically and horizontally.</p>
</div>
</body>
</html>
vh-100:
height: 100vh;
CSS property, making the container take up the entire height of the viewport.<!DOCTYPE html>
<html lang="en">
<head>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"/>
<style>
.outer-container {
border: 2px solid red;
}
.inner-content {
border: 2px solid blue;
}
</style>
</head>
<body>
<div class="vh-100 outer-container">
<p class="inner-content">vh-100 applied.</p>
</div>
</body>
</html>
d-flex:
display: flex;
CSS property to the element, making it a flex container. This allows you to use properties like justify-content and align-items to control the alignment of its children.display
property can be found here.<!DOCTYPE html>
<html lang="en">
<head>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"/>
<style>
.outer-container {
border: 2px solid red;
}
.inner-content {
border: 2px solid blue;
}
</style>
</head>
<body>
<div class="vh-100 d-flex outer-container">
<p class="inner-content">vh-100 and d-flex applied.</p>
</div>
</body>
</html>
justify-content-center:
justify-content: center;
CSS property to the flex container, ensuring its children are horizontally centered.<!DOCTYPE html>
<html lang="en">
<head>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"/>
<style>
.outer-container {
border: 2px solid red;
}
.inner-content {
border: 2px solid blue;
}
</style>
</head>
<body>
<div class="vh-100 d-flex justify-content-center outer-container">
<p class="inner-content">vh-100 and d-flex and justify-content-center applied.</p>
</div>
</body>
</html>
align-items-center:
align-items: center;
CSS property to the flex container, ensuring its children are vertically centered.<!DOCTYPE html>
<html lang="en">
<head>
<link href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" rel="stylesheet"/>
<style>
.outer-container {
border: 2px solid red;
}
.inner-content {
border: 2px solid blue;
}
</style>
</head>
<body>
<div class="vh-100 d-flex justify-content-center align-items-center outer-container">
<p class="inner-content">vh-100 and d-flex and justify-content-center and align-items-center applied.</p>
</div>
</body>
</html>
Upvotes: 13
Reputation: 19
been going thru a lot of posts on getting a form centered in the page and none of them worked. code below is from a react component using bootstrap 4.1. height should be 100vh and not 100%
<div className="container">
<div className="d-flex justify-content-center align-items-center" style={height}>
<form>
<div className="form-group">
<input className="form-control form-control-lg" placeholder="Email" type="email"/>
</div>
<div className="form-group">
<input className="form-control form-control-lg" placeholder="Password" type="password"/>
</div>
<div className="form-group">
<button className="btn btn-info btn-lg btn-block">Sign In</button>
</div>
</form>
</div>
</div>
where height in style is:
const height = {
height: '100vh'
}
Upvotes: 1
Reputation: 853
Bootstrap way
HTML
<div class="row top-row">
<div class="col center-text">
<H1>Center Text Horizantally and vertically</H1>
</div>
</div>
Custom CSS
.top-row{
height: 300px; //It's important to set height
}
.center-text{
display: flex;
align-items: center;
justify-content: center;
}
Upvotes: 2
Reputation: 3087
Bootstrap's m-auto
is your friend!
If you have some parent container you want to suspend your content in the middle of, all you need are h-100
, d-flex
, and m-auto
:
<div class="h-100 d-flex">
<div class="m-auto">
Content
</div>
</div>
The outer container will inflate to the size of whatever container it itself exists in, and the inner container will have auto
margins set on each of its sides to center it within the parent.
div > div { border: 1px solid red; }
div { border: 1px solid blue; }
body { border: 1px dashed orange; }
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@5/dist/css/bootstrap.min.css">
<body class="m-2" style="width: 600px; height: 150px;">
<div class="h-100 d-flex">
<div class="m-auto">
This content is centered<br>
both vertically and horizontally<br>
in its container
</div>
</div>
</body>
(Where the document body is dashed in orange, the inner <div>
container is in blue, and the child container in red.)
Upvotes: 2
Reputation: 262
Try the code given below while using v4
or v5
.
<div class="d-flex align-items-center justify-content-center" style="height:100vh;">
Vertically and Horizontally Aligned :)
</div>
...OR... You can use these classes if using v5
.
<div class="position-absolute top-50 start-50 translate-middle">
Vertically and Horizontally Aligned :)
</div>
Do this, and that's it :)
Upvotes: 11
Reputation: 1
bootstrap 5
body {
display: flex;
align-items: center;
}
https://getbootstrap.com/docs/5.1/examples/sign-in/
Upvotes: 0
Reputation: 177
From bootstrap v5.0 just:
<div class="position-absolute top-50 start-50 translate-middle">
centred
</div>
Upvotes: 2
Reputation: 362780
Bootstrap 5 (Updated 2021)
Bootstrap 5 is still flexbox based so vertical centering works the same way as it did in Bootstrap 4. For example, align-items-center
(flex-direction: row) and justify-content-center
(flex-direction: column) can used on the flexbox parent (row or d-flex).
Centering examples in Bootstrap 5
Vertical center (don't forget the parent must have a defined height!):
my-auto
for centering inside flex (.d-flex
) elementsmy-auto
can be used to center columns (.col-
) inside row
align-items-center
to center columns (col-*
) inside row
Horizontal center:
text-center
to center display:inline
elements & column contentmx-auto
for centering inside flex elementsmx-auto
can be used to center columns (.col-
) inside row
justify-content-center
to center columns (col-*
) inside row
Bootstrap 4.3+ (Update 2019)
There's no need for extra CSS. What's already included in Bootstrap will work. Make sure the container(s) of the form are full height. Bootstrap 4 now has a h-100
class for 100% height...
Vertical center:
<div class="container h-100">
<div class="row h-100 justify-content-center align-items-center">
<form class="col-12">
<div class="form-group">
<label for="formGroupExampleInput">Example label</label>
<input type="text" class="form-control" id="formGroupExampleInput" placeholder="Example input">
</div>
<div class="form-group">
<label for="formGroupExampleInput2">Another label</label>
<input type="text" class="form-control" id="formGroupExampleInput2" placeholder="Another input">
</div>
</form>
</div>
</div>
https://codeply.com/go/raCutAGHre
the height of the container with the item(s) to center should be 100% (or whatever the desired height is relative to the centered item)
Note: When using height:100%
(percentage height) on any element, the element takes in the height of it's container. In modern browsers vh units height:100vh;
can be used instead of %
to get the desired height.
Therefore, you can set html, body {height: 100%}, or use the new min-vh-100
class on container instead of h-100
.
Horizontal center:
text-center
to center display:inline
elements & column contentmx-auto
for centering inside flex elementsoffset-*
or mx-auto
can be used to center columns (.col-
)justify-content-center
to center columns (col-*
) inside row
Vertical Align Center in Bootstrap
Bootstrap 4 full-screen centered form
Bootstrap 4 center input group
Bootstrap 4 horizontal + vertical center full screen
Upvotes: 534
Reputation: 927
I am required to show form vertically center inside container-fluid so I developed my own code for the same.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<link rel="stylesheet" type="text/css" href="css/bootstrap.min.css">
<style>
.container-fluid
{
display: table-cell;
height: 100vh;
width: 100vw !important;
vertical-align: middle;
border:1px solid black;
}
</style>
</head>
<body>
<div class="container-fluid">
<div class="row">
<div class="col-8 offset-2">
<div class="card shadow">
<div class="card-header bg-danger text-white">
<h2>Login</h2>
</div>
<div class="card-body">
<form action="">
<div class="form-group row">
<label for="txtemail" class="col-form-label col-sm-2">Email</label>
<div class="col-sm-10">
<input type="email" name="txtemail" id="txtemail" class="form-control" required />
</div>
</div>
<div class="form-group row">
<label for="txtpassword" class="col-form-label col-sm-2">Password</label>
<div class="col-sm-10">
<input type="password" name="txtpassword" id="txtpassword" class="form-control"
required />
</div>
</div>
<div class="form-group">
<button class="btn btn-danger btn-block">Login</button>
<button class="btn btn-warning btn-block">clear all</button>
</div>
</form>
</div>
</div>
</div>
</div>
<script src="js/jquery.js"></script>
<script src="js/popper.min.js"></script>
<script src="js/bootstrap.min.js"></script>
</body>
</html>
Upvotes: 1
Reputation: 20930
From the doc (bootsrap 4):
https://getbootstrap.com/docs/4.0/utilities/flex/#justify-content
.justify-content-start
.justify-content-end
.justify-content-center
.justify-content-between
.justify-content-around
.justify-content-sm-start
.justify-content-sm-end
.justify-content-sm-center
.justify-content-sm-between
.justify-content-sm-around
.justify-content-md-start
.justify-content-md-end
.justify-content-md-center
.justify-content-md-between
.justify-content-md-around
.justify-content-lg-start
.justify-content-lg-end
.justify-content-lg-center
.justify-content-lg-between
.justify-content-lg-around
.justify-content-xl-start
.justify-content-xl-end
.justify-content-xl-center
.justify-content-xl-between
.justify-content-xl-around
Upvotes: -1
Reputation: 917
I ended up here because I was having an issue with Bootstrap 4 grid system and an Angular *ngFor loop. I fixed it by applying a col justify-content-center class to the div implementing the ngFor:
<div class="row" style="border:1px solid red;">
<div class="col d-flex justify-content-center">
<button mat-raised-button>text</button>
</div>
<div *ngFor="let text of buttonText" class="col d-flex justify-content-center">
<button mat-raised-button>text</button>
</div>
</div>
Upvotes: 1
Reputation: 69
Use This Code In CSS :
.container {
width: 600px;
height: 350px;
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
display: inline-flex;
}
Upvotes: -1
Reputation: 307
<link href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="col-12 border border-info">
<div class="d-flex justify-content-center align-items-center" style="height: 100px">
<a href="#" class="btn btn-dark">Transfer</a>
<a href="#" class="btn btn-dark mr-2 ml-2">Replenish</a>
<a href="#" class="btn btn-dark mr-3">Account Details</a>
</div>
</div>
Upvotes: 1
Reputation: 5340
This is working in IE 11 with Bootstrap 4.3. While the other answers were not working in IE11 in my case.
<div class="row mx-auto justify-content-center align-items-center flex-column ">
<div class="col-6">Something </div>
</div>
Upvotes: 4
Reputation: 201
Bootstrap has text-center to center a text. For example
<div class="container text-center">
You change the following
<div class="row justify-content-center align-items-center">
to the following
<div class="row text-center">
Upvotes: 19
Reputation: 1001
flexbox can help you. info here
<div class="d-flex flex-row justify-content-center align-items-center" style="height: 100px;">
<div class="p-2">
1
</div>
<div class="p-2">
2
</div>
</div>
Upvotes: 24
Reputation: 441
This work for me:
<section class="h-100">
<header class="container h-100">
<div class="d-flex align-items-center justify-content-center h-100">
<div class="d-flex flex-column">
<h1 class="text align-self-center p-2">item 1</h1>
<h4 class="text align-self-center p-2">item 2</h4>
<button class="btn btn-danger align-self-center p-2" type="button" name="button">item 3</button>
</div>
</div>
</header>
</section>
Upvotes: 37
Reputation: 28554
You need something to center your form into. But because you didn't specify a height for your html and body, it would just wrap content - and not the viewport. In other words, there was no room where to center the item in.
html, body {
height: 100%;
}
.container, .row.justify-content-center.align-items-center {
height: 100%;
min-height: 100%;
}
Upvotes: 12