英文:
How do I override bootstrap 5.0 info color and make it like bootstrap 3's info color?
问题
在Bootstrap 3中,info颜色是#d9edf7
。当使用bg-info
或alert-info
时,背景颜色始终是#d9edf7
。我尝试覆盖Bootstrap 5.0以获得相同的info颜色效果。
我有一个自定义的SCSS文件来覆盖Bootstrap:
如果我将info或cyan变量设置为#d9edf7
,那么我的.bg-info
元素看起来正确,但我的.alert-info
元素会变亮60%。
$info: #d9edf7;
@import "../scss/bootstrap.scss";
如果我将info或cyan变量设置为#40a4d7
,那么我的.alert-info
元素看起来正确,但我的.bg-info
元素比#d9edf7
要暗40%。
$info: #40a4d7;
@import "../scss/bootstrap.scss";
如何覆盖Bootstrap以获得所需的效果?基本上,使用info颜色的任何元素都应该具有背景颜色#d9edf7
。
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet">
<div class="alert alert-info" role="alert">
A simple info alert—check it out!
</div>
<div class="bg-info" style="width:100%; height:60px;">
This should have the same background color because they're both using the 'info' color
</div>
英文:
In bootstrap 3, the info color was #d9edf7
. When using bg-info or alert-info, the background color was always #d9edf7
. I'm trying to override bootstrap 5.0 to have the same effect on the info color.
I have a cutom scss file to override bootstrap:
If I set the info or cyan variable to #d9edf7
, then my .bg-info elements look correct but my .alert-info elements are getting lightened by 60%.
$info: #d9edf7;
@import "../scss/bootstrap.scss";
If I set the info or cyan variable to #40a4d7
then my .alert-info elements look correct but my .bg-info elements are 40% darker than #d9edf7
.
$info: #40a4d7;
@import "../scss/bootstrap.scss";
How can I override bootstrap to get the desired effect? Basically, anything using the info color should have a background color of #d9edf7
.
<!-- begin snippet: js hide: false console: true babel: false -->
<!-- language: lang-html -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"/>
<div class="alert alert-info" role="alert">
A simple info alert—check it out!
</div>
<div class="bg-info" style="width:100%; height:60px;">
This should have the same background color because they're both using the 'info' color
</div>
<!-- end snippet -->
答案1
得分: 1
Bootstrap 5.0.2
由于在5.0版本中使用了颜色“scaling”,您需要通过将适当的颜色传递到alert-variant
混合器中来重新生成alert-info类...
@import "functions";
@import "mixins";
$info: #d9edf7;
@import "variables";
@import "bootstrap";
.alert-info {
@include alert-variant($info, $info, shift-color($info, $alert-color-scale));
}
在这个示例中,我仍然使用了颜色缩放来设置(前景)颜色,但您可以使用$body-color
代替...
@include alert-variant($info, $info, $body-color);
Bootstrap 5.3.0
正如您在文档中所读到的...
> "Sass mixin is deprecated. Alert variants now have their CSS variables
> overridden in a Sass
> loop"
因此,警报文本颜色、背景颜色、链接等都有不同的颜色变量... 在您的情况下,您将希望覆盖$info-bg-subtle
以更改背景颜色:
$info: #d9edf7;
$info-bg-subtle: #d9edf7;
@import "bootstrap";
英文:
Bootstrap 5.0.2
Because of the color "scaling" used in 5.0 you'd need to regenerated the alert-info class by passing the appropriate colors into the alert-variant
mixin...
@import "functions";
@import "mixins";
$info: #d9edf7;
@import "variables";
@import "bootstrap";
.alert-info {
@include alert-variant($info, $info, shift-color($info, $alert-color-scale));
}
In this example I still used the scaling for the (foreground) color, but you could just use $body-color
instead...
@include alert-variant($info, $info, $body-color);
https://codeply.com/p/k0MPD65ezI
Bootstrap 5.3.0
As you will read in the docs...
> "Sass mixin is deprecated. Alert variants now have their CSS variables
> overridden in a Sass
> loop"
So there are different color vars for the alert text color, bg color, links, etc... In your case, you'd want to override $info-bg-subtle
for the background color:
$info: #d9edf7;
$info-bg-subtle: #d9edf7;
@import "bootstrap";
答案2
得分: 0
经过彻底调查,似乎导致您在 Bootstrap 5.0 中出现问题的 SASS 变量是 $alert-bg-scale
。此变量在 _variables.scss
文件中声明,初始值为 -80%
。
$alert-bg-scale: 0%;
$info: #d9edf7;
@import "bootstrap.scss";
不幸的是,要获得您期望的行为似乎不会像您希望的那么简单。如果您修改此值,将会使所有警报的背景颜色变暗。看起来他们在后续版本中解决了这个问题,详见 Carol Skelly 的回答。
我可以想到的一些解决方法如下:
在您当前使用 .bg-info
的地方使用 .alert-info
类
此类仅在背景颜色之外应用边框和文本颜色。
为 .bg-info
类创建覆盖
如果您绝对不同意前面的建议设置边框和文本颜色,这个方法也可以。但是,我建议不要这样做,因为这会修改 Bootstrap 的预期行为。或者,您可以创建自己的自定义类来实现此效果。
$info: #d9edf7;
@import "bootstrap.scss";
/*
通过在 Bootstrap 导入之后调用此类,您可以访问所有的
SASS 函数,特别是 `shift-color()`
*/
.bg-info {
background-color: shift-color($info, $alert-bg-scale) !important;
}
英文:
After thorough investigation, it appears the SASS variable causing your issue for Bootstrap 5.0 is $alert-bg-scale
. This variable is declared in the _variables.scss
file with an initial value of -80%
.
$alert-bg-scale: 0%;
$info: #d9edf7;
@import "bootstrap.scss";
Unfortunately, it looks like getting the behavior you desire won't be as simple as you had hoped. If you modify this value, it will make the background color for ALL alerts darker. It appears that they did solve this problem in later versions, per Carol Skelly's answer.
A couple of workarounds I can think of off the top of my head:
Use the .alert-info
class wherever you currently are using .bg-info
This class only applies a border and text color in addition to the background-color.
Create an override for the .bg-info
class
If you're absolutely against the idea of having the border and text color set by the previous suggestion, this would work. However, I would recommend against this as it would be modifying the expected behavior of Bootstrap. Alternatively, you could create your own custom class that does this.
$info: #d9edf7;
@import "bootstrap.scss";
/*
By calling this after the Bootstrap import, you get access to all the
SASS functions, namely `shift-color()`
*/
.bg-info {
background-color: shift-color($info, $alert-bg-scale) !important;
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论