.cssファイルを.lessファイルにインポートする


228

.cssファイルを.lessファイルにインポートできますか?

lessにはかなり慣れているので、すべての開発に使用しています。私は次のような構造を定期的に使用しています。

@import "normalize";

//styles here

@import "mixins";
@import "media-queries";
@import "print";

すべてのインポートは他の.lessファイルであり、すべて正常に機能します。

私の現在の問題は次のとおりです。次のように、.cssファイルで使用されるスタイルを参照する.lessに.cssファイルをインポートします。

@import "../style.css";

.small {
    font-size:60%;
    .type;
}
// other styles here

.cssファイルには呼び出されるクラス.typeが含まれていますが、.lessファイルをコンパイルしようとするとエラーが発生しますNameError: .type is undefined

.lessファイルは.cssファイルをインポートせず、他の.lessファイルのみをインポートしますか?それとも私はそれを間違って参照していますか...?!


5
LESSはCSSにフォールバックするので、style.cssの名前をstyle.lessに変更し、通常どおりインポートできます。もちろん、style.cssの名前を変更することはできません
jackwanders

3
ええ、残念ながら.cssファイルの名前を変更することは実際には不可能です。
ジョニーウッド氏

1
同じ問題があります。github.com/cloudhead/less.js/issues/303
Yaroslav

5
.cssを外部で参照する必要がなく、同時に.cssファイルを変更(名前の変更)してはならない場合は、.less拡張子が付いたファイルへのシンボリックリンクを作成できます。次に、それを.lessファイルます。シンボリックリンクであるため、.cssの変更がインポートされる.lessファイルにすぐに影響を与えるため、シンボリックリンクは同期の負担を取り除きます。欠点は、その後の変更後に最終的なCSSを再コンパイルする必要があることです。Windowsでシンボリックリンクを作成する方法についてMKLINK /?は、コマンドウィンドウに入力してください
Ivaylo Slavov

@ jackwanders、LESSはCSSにフォールバックするため、名前を変更する必要はありません(正しく指摘したとおり)。.cssインライン(less)ディレクティブを使用してファイルをインポートし、.css構文が有効な.less構文であるという事実を利用できます
ira

回答:


316

オプションを指定することにより、ファイルを特定のタイプとして解釈させることができます。例えば:

@import (css) "lib";

出力されます

@import "lib";

そして

@import (less) "lib.css";

lib.cssファイルをインポートし、それを少ないものとして扱います。ファイルが小さいことを指定し、拡張子を含まない場合、何も追加されません。


1
これが正解です。3つ目は、CSSコードを少ないコードとしてインポート+コンパイルし、ディレクティブをそのまま残しません。
CMCDragonkai 2013

1
@import(include)の「lib.css」を使うべきだと思います。コンパイラーに嘘をつくセマンティクスは好きではありません。確かに、ファイルにLESSコードがないことがわかっている場合。

16
これにより、foo.cssに対する追加のhttp-requestが作成されるため、(inline)ディレクティブ(stackoverflow.com/a/22594082/160968を参照)が優先されるようになります
Urs

1
(inline)フォントや他の@import「編集済み」CSSファイルへの外部参照を変換しないため、機能しません。多くの404 HTTPリクエストを引き起こすより大きなcssファイルになってしまうだけです...
user3338098

それは単に間違っていたので、最新の編集をロールバックしていなかった Q.答える
7相-MAX

246

CSSを処理せずに出力にコピーする場合は、(inline)ディレクティブを使用できます。例えば、

@import (inline) '../timepicker/jquery.ui.timepicker.css';

7
完璧です。これは、いくつかのCSSファイル(ie7.lessなど)を連結したいが、必ずしもそれらを処理したくない場合(たとえば、bootstrap-ie7が式を使用するため、LESSがうまく処理できない場合)にうまく機能します。
Joe

4
非常に役立ちます。@import (css) "styles.css";うまくいきませんでした。
ivkremer 2014

10
どちらも異なるユースケースに対応しています。を使用する(css)と、@importディレクティブはそのまま残り、その結果、CSSファイルは実行時にブラウザによってロードされます。を使用する(inline)と、CSSファイルのコンテンツは実際にはコンパイル済みのスタイルシートにインポートされます。これは、たとえば、ファイルがWebルート外にある場合に必要です。ファイルを@importingするときのデフォルトの動作.css(css)フラグの場合と同じであることに注意してください- 詳細についてはドキュメントをお読みください:)
neemzy

したがって、CSSファイルに@import「処理」が必要なディレクティブがある場合、これは明らかに機能しません。
user3338098 2015

「インライン」とは、すべてのインポートもインライン化されることを意味しますか?再帰的にインライン化する方法はありますか?
街灯

29

バージョン1.7.4では次を使用する必要がありました

@import (less) "foo.css"

受け入れられた答えは知っていますが@import (css) "foo.css"、うまくいきませんでした。あなたは新しい少ないファイルであなたのCSSクラスを再利用したい場合は、使用する必要は(less)ありません(css)

ドキュメントを確認してください。


2
受け入れられた回答には最初は正しいオプションがありました(はい、cssファイルの一部のスタイルを再利用したい場合(less)唯一のオプションです)が、何らかの理由で@Fractalfは最新の編集で正しい部分を削除しました。
最大7フェーズ

1
:あなたは、「参照」と「少ない」組み合わせることができます@import (less, reference) "foo.css"
Skarllot

28

cssファイルのファイル拡張子をに変更します.less。LESSを記述する必要はありません。すべてのCSSは有効です(エスケープする必要があるMSのものを除きますが、これは別の問題です)。

パーFractalfの答えこれは1.4.0で修正されています


4
技術的には、CSSファイルのインポートではありません。
nilskp

@nilskpあなたは正しいです。ただし、別のファイルでクラスを使用する場合は、CSSではなくLESSファイルが必要です。
Mathletics 2012

1
@nilskpは、ファイルをLESSとして解析するために拡張子を変更するのは多すぎると言っていますか?
Mathletics 2012

23
はい、もちろんです。すべてのファイルを所有しているいくつかの小さなホームプロジェクトの外側で考えるようにしてください。誰もがLESSを使用しているわけではない、より大規模な複数人プロジェクトを考えてください。ファイル名の変更ができないユースケースはたくさんあります。
nilskp 2012

1
あなたのCSSが次のようなものを含んでいるかどうか気にする必要があります:calc(100%-45px); そして、あなたはそれをブラウザで望んでいます。lessがファイルをlessとして処理する場合、最終的な出力は次のようになります。calc(55%); 計算が少ないからです。
Christof Aenderl 2014年

8

LESSウェブサイトから:

CSSファイルをインポートし、LESSで処理したくない場合は、.css拡張子を使用します。

@import "lib.css"; ディレクティブはそのまま残され、CSS出力に表示されます。

jitbitが以下のコメントで指摘しているように、不要な@importsが貴重な帯域幅を消費することを望まないため、これは実際には開発目的でのみ役立ちます。


14
これはファイルをインポートせず、@ importディレクティブをそのまま残します。引き続き機能しますが、css-importは避けてください-このdeveloper.google.com/speed/docs/best-practices/…を
Alex

5
情報@jitbitをありがとう。個人的には、@import開発中に使用する方が簡単だと思います。その後、本番環境に移行するときに、インポートしたファイルを1つのスタイルシートにまとめて縮小します。
webdevkit

1
質問を注意深く読むと(ヘッダー行だけでなく)、OPがcssファイル内のクラスをミックスインとして参照することを望んでいることがわかります。これは、単純なcssインポートとして解析されただけでは不可能です。
畏敬の念2014年

7

これを試して :

@import "lib.css";

公式ドキュメントから:

cssファイルとlessファイルの両方をインポートできます。処理されるファイルインポートステートメントは少なく、CSSファイルインポートステートメントはそのまま保持されます。CSSファイルをインポートし、LESSで処理したくない場合は、.css拡張子を使用します。


出典: http : //lesscss.org/


2
質問を(ヘッダー行だけでなく)注意深く読むと、OPがcssファイル内のクラスをミックスインとして参照することを望んでいることがわかります。これは、単純なcssインポートとして解析されただけでは不可能です。
畏敬の念

6

CSSファイルを参照としてインポートしたいだけ(たとえば、Mixinsでクラスを使用したい)場合 CSSファイル全体を結果に含めは、次を使用できます@import (less,reference) "reference.css";

私の少ない

 @import (less,reference) "reference.css";
 .my-class{
     background-color:black;
     .reference-class;
     color:blue;
 }

reference.css

.reference-class{
    border: 1px solid red;
}

*結果(my.css)とlessc my.less out/my.css*

.my-class {
  background-color: black;
  border: 1px solid red;
  color: blue;
}

私は使っています lessc 2.5.3


これは私が必要としたものでした。ただし、私は拡張構文を使用する必要がありました&:extend(.reference-class all);。クラスを直接参照すると、コンパイルエラーが発生しました。
Jens Neubauer 2017年

4

lessとして扱う必要があるcssファイルをインポートする場合は、次の行を使用します。

.ie {
  @import (less) 'ie.css';
}

3

1.5.0以降、uは 'inline'キーワードを使用できます。

例:@import(インライン) "not-less-compatible.css";

これは、CSSファイルの互換性が低い場合に使用します。Lessはほとんどの既知の標準CSSをサポートしていますが、一部の場所ではコメントをサポートしておらず、CSSを変更せずにすべての既知のCSSハックをサポートしていないためです。したがって、これを使用してファイルを出力に含めることができるため、すべてのCSSが1つのファイルに含まれます。

(ソース:http : //lesscss.org/features/#import-directives-feature

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.