I have this project that's using Bootstrap. Instead of importing the CSS and expanding the styles with my own, I'm importing the Sass styles and compiling to a single CSS file. It was upon doing so that I noticed something strange.
Bootstrap defines a button class like so (code snipped for brevity, because my focus is on the selectors):
.btn {
// styles
}
Some of my own styles were using the Sass directive @extend
for a form input button:
.search-form .search-submit {
@extend .btn;
@extend .btn-secondary;
}
Elsewhere, I had some link-specific styles that I wanted to make sure didn't get applied to the .btn
class:
a:not(.btn) {
// styles
}
Once I compiled to CSS, however, I wasn't seeing those link-specific styles being applied. Instead, this is what was output to my stylesheet:
a:not(.btn):not(.search-form .search-submit) {
/* styles */
}
This was due to my use of @extend
in on the submit button. So I copied Bootstrap's button class definitions into a mixin in my own stylesheet, and changed the input button's styles to this:
.search-form .search-submit {
@include button;
@include button-variant($secondary, $secondary);
}
Once I made that change, the output to my stylesheet was as I expected:
a:not(.btn) {
/* styles */
}
Note: the button
mixin is mine. The button-variant
mixin already exists within Bootstrap's code.
This was originally published on eichefam.net.
Top comments (0)