You could add a fixed
positioned div with 100%
width
and height
as a parent of the vertical and horizontal centered div to leave the document flow and then use the display: table
trick to actually align your child div vertically.
But that will lead to the situation where the height of the centered div will no longer push down the footer
.
Take a look at the following example.
@import url('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css');
html {
position: relative;
min-height: 100%;
}
body {
/* Margin bottom by footer height */
margin-bottom: 60px;
}
.fixed-container {
display: table;
position: fixed;
top: 0;
bottom: 0;
height: 100%;
width: 100%;
}
center {
display: table-cell;
vertical-align: middle;
}
.jumbotron {
width: 400px;
float: none;
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
/* Set the fixed height of the footer here */
height: 60px;
background-color: #f5f5f5;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<!-- Begin page content -->
<!-- Begin page content -->
<div class="container fixed-container">
<center>
<div class="jumbotron">
Requires CSS coding to center it, height is fluid.
</div>
</center>
</div><!-- /jumbotron -->
<footer class="footer">
<div class="container">
<p class="text-muted">Place sticky footer content here.</p>
</div>
</footer>
To make this a bit more flexible i would suggest to add a max-height
with overflow-y: auto
to the centered div like in the following example.
@import url('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css');
html {
position: relative;
min-height: 100%;
}
body {
/* Margin bottom by footer height */
margin-bottom: 60px;
}
.fixed-container {
display: table;
position: fixed;
top: 0;
bottom: 0;
height: 100%;
width: 100%;
}
center {
display: table-cell;
vertical-align: middle;
}
.jumbotron {
width: 720px;
max-height: 300px;
overflow-y: auto
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
/* Set the fixed height of the footer here */
height: 60px;
background-color: #f5f5f5;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<!-- Begin page content -->
<!-- Begin page content -->
<div class="container fixed-container">
<center>
<div class="jumbotron">
Requires CSS coding to center it, height is fluid.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ducimus eius minima nihil voluptatem earum, itaque maxime, accusamus sed doloribus culpa harum, minus sapiente. Vel voluptas molestias officia, quod dolorem natus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nulla consectetur quo libero ducimus, quod labore nesciunt veniam quisquam corporis. Molestiae ea quaerat itaque temporibus earum. Similique tempora officiis nobis labore! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro deserunt, autem ut asperiores fugiat eaque aperiam aliquam dicta delectus repellendus blanditiis odit nobis, unde sunt accusamus nesciunt temporibus esse labore. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sit aliquid exercitationem nesciunt rerum cumque, dolorem voluptatibus sed culpa harum inventore. Reiciendis distinctio dolorem voluptatem suscipit ut molestiae perferendis id illum! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Molestias consequuntur cupiditate, culpa consequatur excepturi, tenetur doloribus libero reprehenderit modi laboriosam quo eligendi quaerat fugiat incidunt repudiandae cumque unde ipsam officiis! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Delectus modi animi porro nisi officiis explicabo doloremque ipsum saepe non fugit. Dolor molestias deleniti animi mollitia consequuntur cumque vitae dicta accusamus.
</div>
</center>
</div><!-- /jumbotron -->
<footer class="footer">
<div class="container">
<p class="text-muted">Place sticky footer content here.</p>
</div>
</footer>
If you would want to keep the overflow of the document to be able to scroll whenever the content is bigger than the actual height, you could use a different approach, by adding the footer
as a fixed
positioned element to a container which will center the .jumbotron
by setting it's position to absolute
and adding padding
, but this will still not push the footer
down.
Here is what this would look like.
@import url('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css');
html, body {
height: 100%;
}
.holder {
position: relative;
height: 100%;
width: 100%;
padding: 5% 0;
}
center {
width: 100%;
height: 100%;
position: absolute;
left: 25%;
margin: -7.5% 0 0 -25%;
padding: 10% 0;
}
.jumbotron {
max-width: 520px;
}
.footer {
position: fixed;
bottom: 0;
width: 100%;
z-index: 10;
/* Set the fixed height of the footer here */
height: 60px;
background-color: #f5f5f5;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<!-- Begin page content -->
<!-- Begin page content -->
<div class="holder">
<center>
<div class="jumbotron">
Requires CSS coding to center it, height is fluid.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ducimus eius minima nihil voluptatem earum, itaque maxime, accusamus sed doloribus culpa harum, minus sapiente. Vel voluptas molestias officia, quod dolorem natus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nulla consectetur quo libero ducimus, quod labore nesciunt veniam quisquam corporis. Molestiae ea quaerat itaque temporibus earum. Similique tempora officiis nobis labore! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro deserunt, autem ut asperiores fugiat eaque aperiam aliquam dicta delectus repellendus blanditiis odit nobis, unde sunt accusamus nesciunt temporibus esse labore. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Sit aliquid exercitationem nesciunt rerum cumque, dolorem voluptatibus sed culpa harum inventore. Reiciendis distinctio dolorem voluptatem suscipit ut molestiae perferendis id illum! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Molestias consequuntur cupiditate, culpa consequatur excepturi, tenetur doloribus libero reprehenderit modi laboriosam quo eligendi quaerat fugiat incidunt repudiandae cumque unde ipsam officiis! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Delectus modi animi porro nisi officiis explicabo doloremque ipsum saepe non fugit. Dolor molestias deleniti animi mollitia consequuntur cumque vitae dicta accusamus. Requires CSS coding to center it, height is fluid.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ducimus eius minima nihil voluptatem earum, itaque maxime, accusamus sed doloribus culpa harum, minus sapiente. Vel voluptas molestias officia, quod dolorem natus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nulla consectetur quo libero ducimus, quod labore nesciunt veniam quisquam corporis. Molestiae ea quaerat itaque temporibus earum. Similique tempora officiis nobis labore! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro deserunt, autem ut asperiores fugiat eaque aperiam aliquam dicta delectus repellendus blanditiis odit nobis, unde sunt accusamus nesciunt temporibus esse labore. Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</div>
</center>
<footer class="footer">
<div class="container">
<p class="text-muted">Place sticky footer content here.</p>
</div>
</footer>
</div><!-- /jumbotron -->
The last thing i can think of is to add a bit of flex
to the bootstrap sticky footer template, which will ensure that the footer will get pushed down while the content of the centered div is getting too tall. That way you can keep the layout as is, but make sure to checkout flexbox browser support.
Here is how that goes.
@import url('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css');
html {
position: relative;
min-height: 100%;
}
body {
/* Margin bottom by footer height */
margin-bottom: 60px;
}
.center {
display: flex;
align-items: center;
min-height: 100vh;
justify-content: center;
margin: 0 0 -60px;
padding: 60px 0 70px;
}
.flex-item {
flex: 1;
max-width: 400px;
}
.jumbotron {
margin-bottom: 0;
padding: 15px;
}
.footer {
position: absolute;
bottom: 0;
width: 100%;
/* Set the fixed height of the footer here */
height: 60px;
background-color: #f5f5f5;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
<nav class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="navbar-brand" href="#">Project name</a>
</div>
<div id="navbar" class="collapse navbar-collapse">
<ul class="nav navbar-nav">
<li class="active"><a href="#">Home</a></li>
<li><a href="#about">About</a></li>
<li><a href="#contact">Contact</a></li>
</ul>
</div><!--/.nav-collapse -->
</div>
</nav>
<!-- Begin page content -->
<div class="container">
<div class="center">
<div class="jumbotron flex-item">
Requires CSS coding to center it, height is fluid.
Lorem ipsum dolor sit amet, consectetur adipisicing elit. Ducimus eius minima nihil voluptatem earum, itaque maxime, accusamus sed doloribus culpa harum, minus sapiente. Vel voluptas molestias officia, quod dolorem natus. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Nulla consectetur quo libero ducimus, quod labore nesciunt veniam quisquam corporis. Molestiae ea quaerat itaque temporibus earum. Similique tempora officiis nobis labore! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro deserunt, autem ut asperiores fugiat eaque aperiam aliquam dicta delectus repellendus blanditiis odit nobis, unde sunt accusamus nesciunt temporibus esse labore. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Similique tempora officiis nobis labore! Lorem ipsum dolor sit amet, consectetur adipisicing elit. Porro deserunt, autem ut asperiores fugiat eaque aperiam aliquam dicta delectus repellendus blanditiis odit nobis, unde sunt accusamus nesciunt temporibus esse labore. Lorem ipsum dolor sit amet, consectetur adipisicing elit.
</div>
</div>
</div><!-- /jumbotron -->
<footer class="footer">
<div class="container">
<p class="text-muted">Place sticky footer content here.</p>
</div>
</footer>