Bootstrap provides a .container-<breakpoint> class, which makes the container fluid until the specified breakpoint. At that point, it adopts a fixed max-width based on the breakpoint.
While this is useful, there's another scenario that may often arise: maintaining standard container sizing but preventing it from growing beyond a certain breakpoint. This is where the idea of container max widths comes in. For example, a class like .container-max-md would allow the container to behave normally up to the medium (md) breakpoint, but retain the medium container’s max-width even on larger breakpoints (lg, xl, xxl).
This approach can be especially helpful on text-heavy pages, where overly wide containers (e.g., on ultra-wide monitors) may hurt readability.
@import "node_modules/@ngblaylock/bootstrap-extensions/src/scss/_container-max-widths.scss";
<link
rel="stylesheet"
href="https://cdn.jsdelivr.net/npm/@ngblaylock/bootstrap-extensions@0.2.0/dist/css/container-max-widths.min.css"
/>
Using max widths requires either a .container, .container-fluid, or .container-<breakpoint> class.
| Class | Max Container Width |
|---|---|
.container-max-sm |
540px |
.container-max-md |
720px |
.container-max-lg |
960px |
.container-max-xs |
1140px |
.container-max-xxl |
1320px |
<div class="container">
<div class="text-bg-light p-3">
<code>.container</code><br />
Standard container.
</div>
</div>
<div class="container container-max-md">
<div class="text-bg-light p-3">
<code>.container.container-max-md</code><br />
Container is never larger than it is on the medium breakpoint.
</div>
</div>
<div class="container-lg container-max-lg">
<div class="text-bg-light p-3">
<code>.container-lg.container-max-lg</code><br />
Container is fluid until the large breakpoint and never gets larger after
the large breakpoint.
</div>
</div>
One common workaround is to use rows and columns to simulate a narrow layout:
<div class="container">
<div class="row">
<div class="col-lg-10 offset-lg-1 col-xl-8 offset-xl-2 col-xxl-6 offset-xxl-3">
...
</div>
</div>
</div>
The issue with this method is that the layout shifts significantly across the md, lg, xl, and xxl breakpoints, potentially disrupting the user experience. It is also painful to write and maintain.
Another workaround is to apply an inline style to force a specific max-width. However, this requires hardcoding values and managing breakpoints manually, which can be difficult to maintain.