【问题标题】:Override Spree Commerce's Bootstrap Variables覆盖 Spree Commerce 的引导变量
【发布时间】:2015-08-23 19:06:02
【问题描述】:

我在将自定义 _variables.scss 作为编译资产部署到我的生产服务器时遇到问题。

在我的开发环境中一切都很好,在生产环境中我的变量被覆盖了。

我正在使用带有 Spree 3.0 Stable 分支的 Rails 4.2.1。

我有以下结构:

vendor/assets/stylesheets/frontend中创建的文件

  • _variables.scss(我的自定义应用变量)
  • all.css(由 Spree 生成)
  • frontend_bootstrap.css.scss(覆盖 Spree)
  • navbar.scss(我的自定义)

_variables.scss 包含以下内容:

// Place all Sass variables here.

// Colors
$brand-primary: green;
$gray: #aaa;

// Navbar
$navbar-default-bg: #fff;
$navbar-height: 100px;
$navbar-border-radius: 0;
$navbar-default-border: none;
$navbar-default-toggle-hover-bg: $navbar-default-bg;
$navbar-default-toggle-icon-bar-bg: lighten($gray, 60%);
$navbar-default-toggle-border-color: $navbar-default-bg;
$navbar-default-link-active-bg: $brand-primary;

frontend_boostrap.css.scss 包含以下内容:

// Spree Bootstrap Override

// Core
@import "variables";
@import "bootstrap-sprockets";
@import "bootstrap";

// Custom Overrides
@import "navbar";

navbar.scss 包含以下内容:

// Navbar Customization

.navbar-myapp {
  margin-bottom: 40px;
  border-top: none;
  border-bottom: 1px solid $navbar-default-toggle-icon-bar-bg;

  .navbar-brand {
    padding: 15px;
  }
}

Rails 标准 app/assets/stylesheets/application.css 清单没有被使用/我没有在其中声明任何具体内容。

生成的 HTML 头代码显示 all.css 和前端。

<link rel="stylesheet" media="screen" href="/assets/spree/frontend/all.self-33fc4a513acb9a5f3fd4ba26b89c94184e5d028c4bd40eee6736d3ccfea5c140.css?body=1">

<link rel="stylesheet" media="screen" href="/assets/spree/frontend/frontend_bootstrap.self-88eb7ced3e4d78d298a33264c3cfc65af6cef8ac32ae56a7dd7a3e321ba97378.css?body=1">

一切都在开发中,但是当我将它部署到我的测试服务器时,一些变量被默认覆盖,这包括导航栏配置和颜色。

我不确定这是否是因为资产编译顺序;或者如果是 bootstrap-sass 的导入方式。

关于如何在不被覆盖的情况下使用_variables.scss 有什么建议吗?我不想要任何重复,这就是为什么我想更改变量 sass 文件中的导航栏和颜色。

【问题讨论】:

标签: ruby-on-rails twitter-bootstrap spree


【解决方案1】:

看来我已经解决了这个问题。

Bootstrap Sass gem 状态:

不要在 Sass 中使用 //= 否则你的其他样式表将不会 能够访问 Bootstrap mixin 或变量。

为了让它在生产/编译资产中工作。我不得不:

  1. 将 all.css 更改为 all.scss
  2. 将 //= 要求语句更改为 @import

vendor/assets/stylesheets/spree/frontend/all.scss:

// Sass Application Manifest

@import "frontend_bootstrap";

vendor/assets/stylesheets/spree/frontend/frontend_bootstrap.css.scss:

// Spree Bootstrap Override

// Core
@import "bootstrap-sprockets";
@import "variables";
@import "bootstrap";

我希望这可以帮助像我一样跌倒的人。

【讨论】:

  • 你用这个修复真的救了我的命。我欠你很多时间,像魅力一样工作(我有完全相同的环境)。赞一个!
猜你喜欢
  • 2020-12-19
  • 2021-05-07
  • 2014-06-18
  • 2017-06-26
  • 2013-04-27
  • 1970-01-01
  • 2014-03-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多