Center Form using Twitter Bootstrap

css, forms, html, twitter-bootstrap

Solution

You need to include your form inside a container, the bootstrap already comes with a container class that is `width:940px` so you can wrap everything inside and it'll center automatically, like so:

<div class="container">
    <div class="row">
        <div class="span12">
            <form class="form-horizontal" method="post" action="/form/">
                <fieldset>
                    <legend>Please login</legend>
                    <div class="control-group">
                        <label class="control-label" for="id_username">Username</label>
                        <div class="controls">
                            <input name="username" maxlength="100" placeholder="Enter your username..." type="text" class="input-large" id="id_username" />
                        </div>
                    </div>
                    <div class="control-group">
                        <label class="control-label" for="id_password">Password</label>
                        <div class="controls">
                            <input name="password" maxlength="100" placeholder="Enter your password..." type="password" class="input-large" id="id_password" />
                        </div>
                    </div>
                </fieldset>
            </form>
        </div>
    </div>
</div>

Problem

I am using Twitter's Bootstrap to build a form (served by django). I want to have the form centered on the page but I'm running into some problems. Here is my HTML: ``` <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>My Form</title> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="description" content=""> <meta name="author" content=""> <!-- Le styles --> <link href="/bootstrap/css/bootstrap.css" rel="stylesheet"> <style> body { padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */ } </style> <link href="/bootstrap/css/bootstrap-responsive.css" rel="stylesheet"> <!-- Le HTML5 shim, for IE6-8 support of HTML5 elements --> <!--[if lt IE 9]> <script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> <![endif]--> </head> <body> <div class="container"> <div class="row"> <div class="span12" style="text-align:center; margin: 0 auto;"> <form class="form-horizontal" method="post" action="/form/"> <fieldset> <legend>Please login</legend> <div class="control-group"> <label class="control-label" for="id_username">Username</label> <div class="controls"> <input name="username" maxlength="100" placeholder="Enter your username..." type="text" class="input-large" id="id_username" /> </div> </div> <div class="control-group"> <label class="control-label" for="id_password">Password</label> <div class="controls"> <input name="password" maxlength="100" placeholder="Enter your password..." type="password" class="input-large" id="id_password" /> </div> </div> </fieldset> </form> </div> </div> </div> <!-- Le javascript ================================================== --> <!-- Placed at the end of the document so the pages load faster --> <script src="/bootstrap/js/jquery.js"></script> <script src="/bootstrap/js/bootstrap-transition.js"></script> <script src="/bootstrap/js/bootstrap-alert.js"></script> <script src="/bootstrap/js/bootstrap-modal.js"></script> </body> </html> ``` I've excluded some additional django logic ({% csrf_token %}, some if statements, etc), but this should recreate the problem. The actual input elements (username and password textboxes) are centering like I expected, but the labels remain to the far left of the page. Am I missing markup somewhere or do I have to override some of the control-label CSS?

Original source