This post could sound like a duplicate but it isn't, please read first.
I want the main container ( <main role="main" class="container">
) to be full-height between header and footer using Bootstrap 4. Here is my html code :
// Initialize tooltip component $(function () { $('[data-toggle="tooltip"]').tooltip() }) // Initialize popover component $(function () { $('[data-toggle="popover"]').popover() })
.container{ width: 100%; min-height: 100% !important; min-height:calc(100% - 110px); !important; margin: 0 auto -33px; border: solid blue; }
<!DOCTYPE html> <title>My Example</title> <!-- Latest compiled and minified Bootstrap CSS --> <head> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous"> </head> <body> <header> <nav class="navbar navbar-toggleable-md navbar-inverse bg-inverse fixed-top"> <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <a class="navbar-brand" href="#" data-placement="right" data-animation="false" data-toggle="tooltip" title="Aller à Mes Summaries"> My Logo</a> </nav> </header> <!-- Begin page content --> <main role="main" class="container"> <div class="row mt-3" style="border: solid green"> <div class="col-sm-12 col-md-3" style="border: solid red; height: 200%;">col</div> <div class="col-sm-12 col-md-5">col</div> <div class="col-sm-12 col-md-4">col</div> </div> </main> <footer> <nav class="navbar navbar-toggleable-md navbar-inverse fixed-bottom bg-inverse" style="height: 10%;"> </nav> </footer> <!-- jQuery library --> <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
I already googled, and I've applied the methods of the following posts:
And a lot more… But nothing work in my situation.
Please help!
Revisiting this question using the newer Bootstrap 4.4.x class ( no extra CSS needed )
<div class="d-flex flex-column overflow-hidden min-vh-100 vh-100">
<header>
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
...
</nav>
</header>
<main role="main" class="flex-grow-1 overflow-auto">
<div class="container">
<div class="row mt-3">
<div class="col-sm-12 col-md-3">
Aside
</div>
<div class="col">
Main
</div>
</div>
</div>
</main>
<footer class="container-fluid flex-grow-0 flex-shrink-1">
...
</footer>
</div>
The result is a full-height layout header/nav, footer, and scrolling main content area in the middle. The footer is always at the bottom regardless of page height.
Flexbox is your friend here too.
However, before you read any further: you should not use the
alpha
version of Bootstrap 4 any more asbeta 2
is out!
.container { border: solid blue; } html { height: 100%; } body { display: flex; flex-direction: column; min-height: 100vh; } main { flex: 1; margin-top: 56px; } footer { height: 10vh; }
<header> <nav class="navbar navbar-toggleable-md navbar-inverse bg-inverse fixed-top"> <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <a class="navbar-brand" href="#" data-placement="right" data-animation="false" data-toggle="tooltip" title="Aller à Mes Summaries">My Logo</a> </nav> </header> <!-- Begin page content --> <main role="main" class="container"> <div class="row mt-3" style="border: solid green"> <div class="col-sm-12 col-md-3" style="border: solid red; height: 200%;">col</div> <div class="col-sm-12 col-md-5">col</div> <div class="col-sm-12 col-md-4">col</div> </div> </main> <footer> <nav class="navbar navbar-toggleable-md navbar-inverse bg-inverse h-100"></nav> </footer> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" rel="stylesheet"/>
Basically this solution makes body
a flex container with it's items stacked in columns. With that in place, flex: 1;
on <main>
stretches <main>
to fill the available height and pushing <footer>
into the bottom. With that .fixed-bottom
is not needed any more.
Update: I've updated the markup above to conform Bootstrap 4 beta 2
. This is as follows:
html { height: 100vh; } body { display: flex; flex-direction: column; min-height: 100vh; } main { flex: 1; margin-top: 56px; } footer { height: 10vh; } .container { border: solid blue; }
<header> <nav class="navbar navbar-expand-md navbar-dark bg-dark fixed-top"> <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <a class="navbar-brand" href="#" data-placement="right" data-animation="false" data-toggle="tooltip" title="Aller à Mes Summaries">My Logo</a> </nav> </header> <!-- Begin page content --> <main role="main" class="container"> <div class="row mt-3" style="border: solid green"> <div class="col-sm-12 col-md-3" style="border: solid red; height: 200%;">col</div> <div class="col-sm-12 col-md-5">col</div> <div class="col-sm-12 col-md-4">col</div> </div> </main> <footer> <nav class="navbar navbar-toggleable-md navbar-inverse bg-dark h-100"></nav> </footer> <link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" rel="stylesheet"/>
To update your markup from alpha 6
to beta 2
you have to make the following changes: rename .navbar-expand-md
to .navbar-expand-md
, .navbar-inverse
to .navbar-dark
and .bg-inverse
to .bg-dark
.
Check the snippet . I fix your code
and I change html
. At this point main content should be fixed position
and footer
should be fixed height
.
// Initialize tooltip component $(function () { $('[data-toggle="tooltip"]').tooltip() }) // Initialize popover component $(function () { $('[data-toggle="popover"]').popover() })
main{ height: calc(100% - 54px - 30px); /* Height should 100% - header height - footer height */ left: 0; overflow-x: hidden; /* If you need scrollbar */ overflow-y: auto;/* If you need scrollbar */ position: fixed; top: 54px; /* Header height */ width: 100%; z-index: 1; background-color: #f5f5f5; border: 5px solid #ff0000; }
<!DOCTYPE html> <title>My Example</title> <!-- Latest compiled and minified Bootstrap CSS --> <head> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css" integrity="sha384-rwoIResjU2yc3z8GV/NPeZWAv56rSmLldC3R/AZzGRnGxQQKnKkoFVhFQhNUwEyJ" crossorigin="anonymous"> </head> <body> <header> <nav class="navbar navbar-toggleable-md navbar-inverse bg-inverse fixed-top"> <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation"> <span class="navbar-toggler-icon"></span> </button> <a class="navbar-brand" href="#" data-placement="right" data-animation="false" data-toggle="tooltip" title="Aller à Mes Summaries"> My Logo</a> </nav> </header> <!-- Begin page content --> <main role="main"> <div class="container"> <div class="row mt-3" style="border: solid green"> <div class="col-sm-12 col-md-3" style="border: solid red; height: 200%;">col</div> <div class="col-sm-12 col-md-5">col</div> <div class="col-sm-12 col-md-4">col</div> </div> </div> </main> <footer> <nav class="navbar navbar-toggleable-md navbar-inverse fixed-bottom bg-inverse" style="height: 30px;"> </nav> </footer> <!-- jQuery library --> <script src="https://code.jquery.com/jquery-3.1.1.slim.min.js" integrity="sha384-A7FZj7v+d/sdmMqp/nOQwliLvUsJfDHW+k9Omg/a/EheAdgtzNs3hpfag6Ed950n" crossorigin="anonymous"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.min.js" integrity="sha384-DztdAPBWPRXSA/3eYEEUWrWCy7G5KFbe8fFjk5JAIxUYHKkDx6Qin1DkWx51bBrb" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/js/bootstrap.min.js" integrity="sha384-vBWWzlZJ8ea9aCX4pEW3rVHjgjt7zpkNpZk+02D9phzyeVkE+jo0ieGizqPLForn" crossorigin="anonymous"></script>
Note: This is not bulletproof solution. You need to try more for good solution. I just showing you how to overcome this type of issue. Now you on your own.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.