Creating breakpoint classes for classes that don't have media query ranges
Let's say you wanted a button full width on mobile and regular width (auto) on desktop.
You think you would do :
<form>
<div class="mb-3">
<label for="exampleFormControlInput1" class="form-label">Enter your email address</label>
<input type="email" class="form-control" id="exampleFormControlInput1" placeholder="name@example.com">
</div>
<div class="d-none d-md-block">
<button type="button" class="btn btn-primary text-white px-5 d-block ms-auto me-auto ms-md-auto me-md-0">Subscribe me to the Newsletter</button>
</div>
<div class="d-block d-sm-none">
<button type="button" class="btn btn-warning text-white px-5 d-block ms-auto me-auto ms-md-auto me-md-0 w-100">Subscribe me to the Newsletter</button>
</div>
</form>
But this is duplicating HTML code just for the sake of responsiveness.
The regular CSS way is to define CSS for media queries for max-width:576px etc.
Bootstrap has a way to extend classes with custom attributes like color and style like the way I showed in this blog post where I also showed that certain bootstrap classes like text-center
for all screens and text-md-start
for left-alignment on medium sized screens and above thereby making it text-center
for mobile devices only.
Now, you can also define breakpoints to existing classes which don't have breakpoint names in bootstrap.
For example : what if you want a button on a form with full width (w-100
) on mobile screens and not full width (w-auto
) on desktops ? There is no way we can do w-100 w-md-auto
because there isn't a breakpoint for width to do w-md-auto
. But we can create them and it's relatively simple.
We add this SASS code after @import "utilities";
$utilities: map-merge(
$utilities, (
"width": map-merge(
map-get($utilities, "width"),
( responsive: true ),
),
)
);
So the final instajobs.scss file will look like this :
$primary: #ff8200;
$instajobs-colors: (
"ij-main": #00ac9f,
);
@import "functions";
@import "variables";
$theme-colors: map-merge($theme-colors, $instajobs-colors);
@import "maps";
@import "mixins";
@import "utilities";
$utilities: map-merge(
$utilities, (
"width": map-merge(
map-get($utilities, "width"),
( responsive: true ),
),
)
);
$utilities: map-merge(
$utilities, (
"height": map-merge(
map-get($utilities, "height"),
( responsive: true ),
),
)
);
@import "bootstrap";
Build it : sass scss/instajobs.scss css/instajobs.css
Now you can add it like :
<button type="button" class="btn btn-primary text-white px-5 d-block ms-auto me-auto ms-md-auto me-md-0 w-100 w-md-auto">Subscribe me to the Newsletter</button>
Reference : https://getbootstrap.com/docs/5.2/layout/breakpoints/
Subscribe to my newsletter
Read articles from Anjanesh Lekshminarayanan directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
Anjanesh Lekshminarayanan
Anjanesh Lekshminarayanan
I am a web developer from Navi Mumbai working as a consultant for cloudxchange.io. Mainly dealt with LAMP stack, now into Django and trying to learn Laravel and Google Cloud. TensorFlow in the near future. Founder of nerul.in