Meteor 如何使用多个 .less 文件

Posted

技术标签:

【中文标题】Meteor 如何使用多个 .less 文件【英文标题】:Meteor how to use multiple .less files 【发布时间】:2012-05-13 14:33:53 【问题描述】:

我正在尝试在 Meteor 应用程序中使用两个 .less 文件。所有文件都在一个 Meteor 应用程序文件夹中。我有一个定义通用 UI 外观的 .less 文件

在 ui.less 中:

.ui-gradient-topdown(@from, @to)   
   background-color: @from; 

   /* Safari 4+, Chrome 1-9 */
   background-image: -webkit-gradient(linear, 0% 0% 0% 100%, from(@from), to(@to));

   /* Safari 5.1+, Mobile Safari, Chrome 10+ */
   background-image: -webkit-linear-gradient(top, @from, @to); 

   /* Firefox 3.6+ */
   background-image: -moz-linear-gradient(top, @from, @to);

   /* IE 10+ */
   background-image: -ms-linear-gradient(top, @from, @to);

   /* Opera 11.10+ */
   background-image: -o-linear-gradient(top, @from, @to);

在 myapp.less 中

@import "ui";

html 
    min-height: 100%;
    min-width: 320px;


body 
  .ui-gradient-topdown(#000, #FFF);


#new_message_input 
  background: #F00; 
  overflow: scroll;

但是,在 Meteor 提供的页面中,我得到:

<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="/ui.less.css">

  ... more stuff below ...

myapp.less 样式表没有被导入?

我想要一个可以@import 各种 mixin .less 文件的 app .less 文件。做这个的最好方式是什么?

【问题讨论】:

我不知道为什么你的第二个 less 文件不会被加载。但我在这里看到了关于如何导入 raw 的其他讨论 -> ***.com/questions/10152515/…. 【参考方案1】:

我来了:

将所有less文件放在“client”文件夹中。

Meteor 会编译它们,因此不需要 import 语句。

导入函数效果很好!变量会破坏事物。

【讨论】:

您能否阐明“变量破坏事物”的含义。 这里不起作用,我不能使用来自另一个文件的mixin,这些文件似乎相互隔离。 myapp.less: Less compiler error: .ui-gradient-topdown is undefined 这在 Meteor 1.1 中不起作用。改用“mymixins.import.less”文件,并明确地@import 它,例如@import ../relative/path/mymixins.import.less.【参考方案2】:

来自Meteor Docs:

如果你想@import 一个文件,给它扩展名 .lessimport 到 防止 Meteor 独立处理它。

【讨论】:

似乎是一个已知的错误,很快就会修复github.com/meteor/meteor/issues/203 很高兴看到他们把它修好了。 之后做import "lessfile.lessimport"; 更正:“lessimport”已被弃用,取而代之的是“import.less”【参考方案3】:

因为这个问题似乎仍然是最新的,所以我尝试回答它。

在较新版本的流星(从 v0.7.1.1 开始)中,.lessimport 已弃用。新方法是.import.less。方法是:

// client/mixins.import.less

.opacity(@opacity) 
  opacity: @opacity;
  // IE8 filter
  @opacity-ie: (@opacity * 100);
  filter: ~"alpha(opacity=@opacity-ie)";

然后在你想要使用你的 mixins 的样式表中 @import 它:

// client/main.less

@import "mixins.import.less";
// relative to the current file
// if absolute it will be relative to your project root

.some-div 
  .opacity(0.5);

【讨论】:

【参考方案4】:

我没有足够的声誉为@EzRaM 发表评论,作为 Meteor 初学者,我有点挣扎,我希望这对其他人有所帮助。

在 Meteor 1.6 中,我想包含 myOwnMixins.less 文件以 @import 来自 node_module 的另一个 .less 文件,这就是我所做的:

1) /client/myOwnMixins.less(无需重命名*.import.less)

    @import '/node_modules/antd/lib/style/themes/default.less';

    .right 
      float: right;
      height: 100%;
    

    ... more less code ...

2) /imports/ui/layout/MyHeader.js,不需要导入 /client/myOwnMixins.less 文件,因为 .less 是由流星编译并默认包含的,只需使用 className。

    <div className="right">Right Aligned</div>

【讨论】:

以上是关于Meteor 如何使用多个 .less 文件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Meteor 中使用多个 CSS 文件

如何使 Meteor 方法同步?

如何在 Meteor 模板文件中添加图像?

如何使 Meteor React 内联 svg 元素单击页面链接而不刷新整个页面

Meteor i18n - 如何拥有多个模板,每种语言一个?

如何将less编译成css文件__less自动编译成css的方法总结