【问题标题】:Less bootstrap theme更少的引导主题
【发布时间】:2015-05-13 18:42:34
【问题描述】:

我们在项目中使用引导程序。我们为 bootstrap 购买了一个定制的主题,围绕它创建了一个很好的自定义样式,并添加了许多我们在项目中使用的有用样式。此主题使用 LESS。

现在,我们的每个客户都希望为他们的网站定制配色方案。通过简单地更改一些 LESS 变量,我们可以生成完全不同的外观。

例如:

@import "../../theme/style.less";
@import "../../shared.less";

// Basic Colors
@navy: #781d7e;       // Primary color
@dark-gray: #c2c2c2;  // Default color
@blue: #8dc63f;       // Success color
@lazur: #00aedb;      // Info color
@yellow: #f7941e;     // Warrning color
@red: #ed1c24;        // Danger color

这会生成一个包含所有样式的完整 css 文件。每个客户端都有自己的一组生成 .css 文件。我们的问题是每次我们进行更改时都需要很长时间来编译它们。

我们如何才能使用 LESS 拥有一个基本主题并仅生成在使用修改后的变量时修改值所需的类覆盖?

例如,如果 btn-primary 背景色是 @navy,那么对于新的配色方案,我只需要一个包含 .btn-primary 的类覆盖的 css 文件,将背景色更改为 @navy 的新值。这甚至可以用LESS吗?

谢谢,

【问题讨论】:

  • 你用什么来编译LESS
  • 现在,Visual Studio 中的 Web Essentials 会在保存时重新编译所有内容。我们的站点特定的 css 不会随主题而改变,它位于另一个文件中,不需要很多时间来重新编译。但是每次我们添加一个可能会根据主题发生变化的元素时,都需要很长时间。
  • 你能不能不使用一些旨在预编译 LESS/SASS 的东西,比如 compass 和 grunt……它们超级快
  • Web Essentials 使用无节点最新版本进行编译。
  • 嗯,简而言之:不,没有自动方法可以仅“提取”那些依赖于变量的类(即使是这样,它也不会有更好的时机,因为它仍然需要解析并评估所有内容以确定更改的内容和使用位置)。您可以手动执行此操作,例如对于.btn-primary,您可以编译buttons.less 只是为了获得相应的按钮样式,但这几乎不是一个解决方案,因为很快您将有太多文件需要单独编译并且需要甚至更多的时间来编译(不算它也变得不可维护)。

标签: twitter-bootstrap twitter-bootstrap-3 less


【解决方案1】:

查看我对类似问题的回答,这可能有助于解决您的问题。 https://stackoverflow.com/a/25055203/138029

如果您使用的是 MVC 4 或更高版本,您可以使用 BundleTransformer 来编译您的 LESS 服务器端。

这取决于您希望如何提供文件。如果您在运行时知道所有客户端 url,那么只需将每个客户端的捆绑 url 添加到捆绑配置中。如果您不这样做,并且客户端是灵活/动态的,就像我们的情况一样,那么添加一个控制器操作来处理动态主题。

我扩展了我们最初的用例,并创建了一种更可重用的方式来包含主题。

这里的演示站点:http://bundletransformer-theme-builder.azurewebsites.net/

这里的 GitHub 存储库:https://github.com/benembery/bundle-transformer-theme-builder

【讨论】:

  • 有趣,服务器端生成更少的主题可以解决这个问题!谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 2012-01-14
相关资源
最近更新 更多