使用 bootstrap-sass gem 覆盖 Rails 中的 Bootstrap 变量

Posted

技术标签:

【中文标题】使用 bootstrap-sass gem 覆盖 Rails 中的 Bootstrap 变量【英文标题】:Overriding Bootstrap variables in Rails with bootstrap-sass gem 【发布时间】:2013-12-24 11:53:49 【问题描述】:

我正在使用 Thomas McDonald 的 bootstrap-sass gem (Bootstrap 3.0)。我遵循了 Bootstrap and Rails Daniel Kehoe 的教程。

我有application.css.scss,顶部有以下内容:

 /*
 *= require_self
 *= require_tree .
 */

我有framework_and_overrides.css.scss,里面有这行:

@import "bootstrap";

现在我尝试覆盖引导变量 ($body-bg: #f00;) 我找到了 here 并将它们放在这两个文件中的任何一个中,但没有任何变化。我做错了什么?

【问题讨论】:

【参考方案1】:

您可以通过简单地在@import 指令之前重新定义变量 来覆盖变量。

例如:

$navbar-default-bg: #312312;
$light-orange: #ff8c00;
$navbar-default-color: $light-orange;

@import "bootstrap";

【讨论】:

这行得通,除非我尝试在 @import "bootstrap" 指令之前使用引导变量时,我得到一个未定义的变量错误。即$text-color: $gray-light; 但是如果我在@import 之后重新定义它们,为什么它不起作用? sass 不应该像其他语言一样简单地采用最后一个变量定义吗? 在使用 Sass 变量之前需要先定义它们 - 在这种情况下,如果你想重新定义一个变量,它需要在 @import 指令之前完成,这样 Bootstrap scss 文件才能使用其中。它们没有被默认值覆盖的唯一原因是因为the default values all use the !default flag,这意味着它们只会在尚未定义变量的情况下使用该值。 只是想补充一点,如果你使用 Less 会有所不同,因为它使用 variable scope 的概念(而在 Sass 中所有变量都是全局的),这允许你重新定义变量 在@import 之后 因为它们在任何内部范围之前被加载,而这些只是覆盖默认值(不需要!default)。 这是一个特殊情况.. 这是因为引导变量具有!default 限定符.. 如果您尝试使用另一个没有!default 的变量来执行此操作,它将再次被覆盖最新定义【参考方案2】:

查看执行周期。在引导文件中,以这种方式呈现的文件,例如“获取变量>并在导航栏中应用”,这在开始执行引导文件时确实会发生。它存在于引导程序内部,查看导入的顺序流程。 , 变量从 bootstrap/variables 获取并在 bootstrap/navbar 中设置 vavbar 颜色,这将在 navbar 中使用变量 navbar-default-bg 应用颜色。

实际上程序员正在做的是在导航栏中设置颜色后尝试设置变量值。 (在“@importing bootstrap”语句之前或之后,变量变化不会改变导航栏颜色,需要在bootstrap文件中编辑)

如果要更改颜色,请查看下面的代码。

在引导文件中

// 核心变量和mixins

@import "引导程序/变量";

// 组件

@import "引导/导航";

$navbar-default-bg:red; //初始化$navbar-default-bg(导入引导/变量后)

@import "引导/导航栏";这里颜色设置正在执行”

这样就好了,分析执行周期。

但我建议使用其他手动类来应用 bg-color 而不是覆盖引导变量。

参考:https://github.com/RailsApps/rails-bootstrap/issues/12

【讨论】:

以上是关于使用 bootstrap-sass gem 覆盖 Rails 中的 Bootstrap 变量的主要内容,如果未能解决你的问题,请参考以下文章

使用带有 bootstrap-sass gem 的 Rails 4 无法让 CSS 在 Heroku 上工作

Bootstrap-sass 在 Rails 应用程序中不起作用

scss 具有自定义变量和样式覆盖的Bootstrap-Sass项目导入结构。

scss 具有自定义变量和样式覆盖的Bootstrap-Sass项目导入结构。

安装gem“设计”时如何修复错误?

引导宝石不起作用