The Bootstrap Blog

News and announcements for all things Bootstrap, including new releases, Bootstrap Themes, and Bootstrap Icons.

Now powered by Jekyll and GitHub Pages

@mdo August 11, 2012

Sorry about the database connection issues some of you may have seen in the last 24 hours. We’ve moved off WordPress for our blog and are now using GitHub pages and Jekyll. Jekyll is an amazingly lightweight and simple site generator from Tom Preston-Werner, cofounder of GitHub. Here’s why:

  • Instead of a database, we have flat Markdown files.
  • Instead of hosting code on servers from Media Temple or another hosting provider, everything is on GitHub.
  • The posting process is as simple as writing a post and pushing the gh-pages branch.

It’s simple, fast, and pain free. We love it and encourage you to check it out in the future. Stay tuned in the next two weeks or so for more information on our next release. Until then, enjoy the updated blog.

Bootstrap 2.0.4 released

@mdo June 01, 2012

Following up on the large 2.0.3 release a few weeks ago, we have a fresh update to address some documentation issues and basic CSS bugs. 2.0.4 includes around thirty closed issues and is our first version under our updated release approach (shorter, more concise releases).

As always, here’s a quick overview of some of the top changes.


  • Added type="button" to all dismiss buttons in alerts and modals to avoid a bug in which they prevent their parent’s form from properly submitting.
  • Added simple documentation to Base CSS for .lead.
  • Added new CSS test to illustrate how the navbar, static and fixed, behaves.
  • Clarified grid sizing copy to include mention of responsive variations.
  • Reformatted the LESS docs page to prevent terrible table displays at smaller grid sizes.
  • Miscellaneous typos and tweaks.


  • Refactored forms.less to make our selectors more specific for fewer overrides and less code. Instead of a generic input selector and various resets, we target each type of input like input[type="text"], input[type="password"], etc.
  • Form field state (e.g., success or error) now applies to checkbox and radio labels.
  • Removed redundant CSS on <p> for font-family, font-size, and line-height.
  • Removed redundant color declaration from the <label> element.
  • Added variables for dropdown dividers border colors.
  • legend and .form-actions share the same border-color, #e5e5e5.
  • Fixed some responsive issues with input-prepend and -append, notably with the fluid grid.
  • Added special CSS to prevent max-width: 100%; on images from messing up Google Maps rendering.
  • Scope opened dropdowns to only immediate children to avoid unintended cascade.
  • Similarly, scope floated-right dropdowns to immediate children with .pull-right > .dropdown-menu.
  • Updated .placeholder() mixin to use & operator in Less for proper output when compiling.
  • Added -ms-input-placeholder to .placeholder() mixin.
  • Added CSS3 hyphens mixin.
  • Fixed a bug in IE7/8 where certain form controls would not show text if the parent had a filter opacity set.

For a full changelog, visit the now complete 2.0.4 milestone on GitHub.

New release strategy

@mdo April 30, 2012

After three large point releases focusing on massive amounts of bugfixes and documentation changes, we’re going to change up our release strategy to push out smaller, more frequent updates.


Releases with a hundred bugfixes are difficult to test, take much longer to ship, make changelogs super long and verbose, and have a tendency to introduce additional unforeseen bugs. In hindsight, our 2.0.3 release should have been a 2.1 given its sheer scope and the time it took to ship. Going forward, we’ll try to improve the frequency of the patches to get you better code faster.

So what’s next?

At the Twitter UK Open House in London last week, we said 2.1 was our next priority. While that’s still true, we’re backing up and rethinking it’s scope. Bootstrap 2.1 may end up much narrower in focus to help us ship it earlier. We’ll still tackle all the same issues and new features we originally planned for, but across more releases. In addition, 2.1 might not be our very next release as some of those unforeseen bugs have already cropped up.


To keep up with the community and improve code quality, we’ll be shipping more releases more frequently.

Questions? Mention us on Twitter.

Talking about Bootstrap

@mdo April 27, 2012

There is a thread on the mailing list about how to describe Bootstrap and instead of isolating our response to just one email, I’ll just blog about it. As it stands, some folks are unsure how to describe Bootstrap to those unfamiliar with it. So here it is, straight from the official horse’s mouth.


Casually, it’s just Bootstrap. That’s noun and verb, for those wondering—Bootstrap the project and “to Bootstrap a project”, respectively. Formally, we call it Twitter Bootstrap, a change that came with v2.0.0. Previously we called it “Bootstrap, from Twitter” to emphasize the project over our employer, but it just became too verbose and awkward to say.

Related, the shorthand abbreviation we use is BS—not TB, TBS, or TwBs. I don’t know why, but this feels better than TB since that’s the name of an infectious disease and all that.


We worked at this for a good bit before setting on our current tagline, “Simple and flexible HTML, CSS, and JavaScript for popular user interface components and interactions.” Previously, it was much more descriptive to the framework’s contents, and thus quite long and wordy. We wanted to convey the technical details properly heading into 2.0.0 (when we changed the tagline), but without the bulk. Instead, we focus on the roles Bootstrap can assist folks with: HTML, CSS, and JavaScript. Any other description is fine, but I wanted to share some insight into the official tagline just for context.


Another focal point in the email thread was the question of referring to Bootstrap as a framework. That’s accurate enough for sure, but also somewhat limiting depending on how you want to use it. Holistically, Bootstrap certainly is a framework (or toolkit or whatever) for prototyping and building production ready stuff on the web. That said, on an individual component level, Bootstrap is a tool for performing common web development tasks faster and easier.

So there you have it, a quick low-down on how we’re thinking and talking about Bootstrap. When it comes right down to it, Bootstrap is whatever you want to make of it, so dive in and see where it can help you out the most.

Bootstrap 2.0.3 released

@mdo April 24, 2012

Today we’re releasing Bootstrap 2.0.3, another bugfix release that aims to squash as many regressions and documentation inaccuracies as possible. There are almost 100 closed issues in the 2.0.3 milestone on GitHub, but below is a comprehensive list of the most important fixes with clear explanations of what’s changed.


In the spirit of always improving the LESS functionality and build tools, we’ve updated our makefile to utilize JSHint and Recess, linters for JavaScript and CSS. To continue to run make via Terminal, do the following:

npm install -g recess jshint

We’ve also removed the file from the repository, so make runs much faster as it has no need to compress any files. For more info, see the updated readme.


  • Overhauled the responsive utility classes to simplify required CSS, add !important to all declarations, and use display: inherit in place of display: block to account for different types of elements.
  • Removed > from fluid grid column selectors, meaning every element with a .span* class within a .row-fluid will use percentage widths instead of fixed-pixels.
  • Fixed regression in responsive images support as of 2.0.1. We’ve re-added max-width: 100%; to images by default. We removed it in our last release since we had folks complaining about Google Maps integration and other projects, but we’re taking a different stance now on these things and will require developers to make these tweaks on their end.
  • Added variable @navbarBrandColor for the brand element in navbars, which defaults to @navbarLinkColor.
  • Font-family mixins now use variables for their stacks.
  • Fixed an unescaped filter on the .reset-filter() mixin that was causing some errors depending on your compiler.
  • Fixed regression in .form-actions background, which was too dark, by adding a new variable @formActionsBackground and changing the color to #f5f5f5 instead of #eee.
  • Fixed an issue on button group dropdowns where the background color was not using the button’s darker color when the dropdown is open.
  • Generalized and simplified the open dropdown classes while adding smarter defaults. Instead of, we now use just .open. On the defaults side, all dropdown menus now have rounded corners to start.
  • Improved active .dropdown-toggle styles (for dropdown buttons) by darkening the background and sharpening the inset shadow to match the active state of buttons.
  • Direction of animation on progress bars reversed.
  • Fixed input-prepend/append issue with uneditable inputs: .uneditable-input was being floated and a missing comma meant its border-radius for the append option wasn’t being applied properly.
  • Removed height: auto; from img since it was overriding dimensions set via HTML attributes.
  • Fixed an issue of double borders on the top of tables with captions or colgroups.
  • Fixed issue with anchor buttons in the .navbar-text. Instead of a general styling on all anchors within an element with that class, we now have a new class to specifically apply appropriate link color.
  • Added support for @navbarHeight on the brand/project name and nav links for complete navbar height customization.
  • Fixed the black borders on buttons problem in IE7 by removing the border, increasing the line-height, and providing darker background colors.
  • Removed excess padding on .search-query inputs in IE7 since it doesn’t have border-radius.
  • Updated alert messages in Components to use button elements as close icons instead of a. Both can be used, but an a will require href="#" for dismissal on iOS devices.
  • Fixed an issue with prepended/appended inputs in Firefox where select elements required two clicks to toggle the dropdown. Resolved by moving the position: relative to the select by default instead of on :focus.
  • Added a new mixin, .backface-visibility, to help refine CSS 3D tranforms. Examples and explanation of usage can be found on CSS Tricks.
  • Changed specificity of grid classes in responsive layouts under 767px to accurately target input, select, and textarea elements that use .span* classes.
  • Horizontal description lists, .dl-horizontal, now truncate terms that are too long to fit in their fixed-width column. In the < 767px responsive layout, they change to their default stacked layout.
  • Changed tabbable tabs to prevent issues in left and right aligned tabs. .tab-content would not growing to its parent’s full width due to display: table. We removed that and the width: 100% and instead just set overflow: auto to clear the left and right aligned tabs.
  • Updated thumbnails to support fluid grid column sizing.
  • Added > to most of the button group selectors
  • Added new variable, @inputBorderRadius, to all form controls that previously made use of the static 3px value everywhere.
  • Changed the way we do border-radius for tables. Instead of the regular mixin that zeros out all other corners, we specify one corner only so they can be combined for use on single column table headers.
  • Updated Glyphicons Halflings from 1.5 to 1.6, introducing 20 new icons.
  • Added an offset paramater to the .makeColumn.
  • Increased the specificity of all tabbable nav selectors to include .nav-collapse to appropriately scope the responsive navbar behavior.
  • Fixed uneditable inputs: text now cuts off and does not wrap, making it behave just like a default input.
  • Labels and badges are now vertical-align: baseline; so they line up with surrounding text.


  • Add jshint support
  • Add travis-ci support w/ headless phantom integration
  • Replace UA sniffing in bootstrap-transitions.js
  • Add MSTransitionEnd event to transition plugin
  • Fix pause method in carousel (shouldn’t restart when hovering over controls)
  • Fix crazy opera bug #1776
  • Don’t open dropdown if target element is disabled
  • Always select last item in scrollspy if you’ve reached the bottom of the document or element
  • Typeahead should escape regexp special chars
  • If interval is false on carousel, do not auto-cycle
  • Add preventDefault support for all initial event types (show, close, hide, etc.)
  • Fix collapse bug in ie7+ for initial collapse in
  • Fix nested collapse bug
  • If transitioning collapse, don’t start new transition
  • Try to autodetect when to use html/text method in tooltip/popovers to help prevent xss
  • Add bootstrap + bootstrap.min.js to gh-pages for @remy and jsbin support

Documentation and repo

  • Combined badges and labels into a single LESS file, badges-labels.less, to reduce repeated CSS.
  • Separated responsive features into multiple files. We now have a file for each grouping of media queries (tablets and down, tablets to desktops, and large desktops). Additionally, the visible/hidden utility classes and the responsive navbar are in their own files. The output is the same in the compiled CSS, but this should give folks a bit more flexibility.
  • Added a new CSS Tests page in the docs (not in the top nav) for better testing of edge cases and extending the use of standard components.
  • Removed the file from the repo and the make process for faster building and a lighter repo. From now on, the zip will only be in the documentation branch.
  • Fixed incorrect use of class instead of ID for tabs example and added documentation for multiple ways of toggling tabs.
  • Fixed required markup listed for the specialized navbar search field.
  • Removed all mention of @siteWidth, a variable no longer in use.
  • Removed mentions of unused @buttonPrimaryBackground variable, which is no longer in use.
  • Updated LESS docs page to include all the new variables we added in previous releases.
  • Removed broken “dropup” menus from tabs and pills examples (shouldn’t have been there in the first place).
  • Replaced .badge-error with .badge-important. The error option is not a valid class and was a typo in the docs.
  • Fixed mention of how to add plain text to the navbar. Previously the docs stated you only needed a p tag, but the required HTML is any element with class .navbar-text.
  • Clarified the use of .tabbable for tabs. The wrapping class is only required for left and right tabs to clear their floats. Also added mention of .fade to fade in tabs.
  • Updated forms documentation:
    • Remove unnecessary duplicate help text in first example
    • Added mention of required input class, .search-query, for the search form variation
    • Removed incorrect mention of form fields being display: block; to start as fields are inline-block to start.
  • Added mention of data-target attribute for the dropdowns JavaScript plugin to show how to keep custom URLs intact on links with .dropdown-toggle class.
  • Updated the Kippt screenshot on the homepage to reflect their recent responsive redesign and upgrade to 2.0.2.

We’re continually updating issues and tracking them for our next release in the 2.1 milestone, which will focus on adding a few new features and tackle the inevitable bugs and edge cases from this release.