質問

カスタム _theme.less で以下のメディアクエリを使用します。

& when (@media-common = true) { }

しかし、このコマンドを実行すると bin/magento setup:static-content:deploy 変数を取得します @media-common is undefined in file この場合何が間違っているのでしょうか?grunt を使用すると、エラーは発生せずにコンパイルされます。

役に立ちましたか?

解決

@fefe @media-common 変数は、最初は次のいずれかに設定されます。

  • vendor/magento/theme-frontend-blank/web/css/styles-m.less

  • vendor/magento/theme-frontend-blank/web/css/styles-l.less

これは もし 空白テーマまたは Luma テーマのいずれかを親として使用しています。もしそうなら、これはあなたにも当てはまります。そうでない場合は、親テーマが何であれ、この変数の宣言と初期化が必要です...または、使用している親テーマがその親に対して別のテーマを呼び出している場合も、同じことが当てはまります。

を見てください。 styles-m.less そして styles-l.less ファイルを参照して、インポートされるファイルの順序を確認します。次の場所に何らかの形式のログを追加することもできます。 \Less_Parser::parseFile().

これを回避する方法は、Less 参照インポートを使用することです。 ドキュメントの削減:参照インポート オプション, 、それは ない 上記 Less ファイル内のコードを取り込むと、インポートを要求しているファイルのスコープ内でファイルが利用可能になるだけです。

カスタム Less ファイルの先頭にインポートしたものの例:

@import (reference) "../source/lib/variables/_responsive.less"; @import (reference) "../source/lib/_responsive.less";

*ここで使用しているパスは、最終的なカスタム テーマのカスタム Less ファイル パスとの相対パスであることに注意してください。 var/view_preprocessed/css/frontend/<Vendor>/<theme>/<locale>/css/ パス。

私のカスタムテーマのディレクトリ階層は次のようになります。 app/design/frontend/<Vendor>/<theme>/web/css/custom/custom.less.

インポートしたいファイルは次のとおりです。

  • var/view_preprocessed/css/frontend/<Vendor>/<theme>/<locale>/css/source/lib/_responsive.less

  • var/view_preprocessed/css/frontend/<Vendor>/<theme>/<locale>/css/source/lib/variables/_responsive.less

インポートを実行するカスタム ファイルは、最終的にここに存在します。

  • var/view_preprocessed/css/frontend/<Vendor>/<theme>/<locale>/css/custom/custom.less

さて、以上を述べましたが、ここがキッカーです。実際にこれを行う必要はありません。なぜ?そうですね、CSS スタイルは CSS ガード, 、 この場合 @media-common = true で呼び出すことだけが意図されています styles-m.less ファイル?はい、M2 はモバイルファーストであると想定されているため、 styles-m.less ファイルは、実際に含まれている唯一のファイルです(電子メールのファイルをいくつか保存し、他にもいくつかのファイルがあると思います)。 @media-common に設定 true (そして、この変数、ピリオドを設定するファイルはほんの少数しかありません)。

したがって、次の条件を持つ CSS ガード内にあるものはすべて、 @media-common = true は、次の場合を除いて常に実行されることを意図しています。 styles-l.less ファイルが呼び出されます。 styles-l.less セット @media-commonfalse として styles-m.less ファイルにはこれらの「共通」スタイルがすでに読み込まれているはずです...そして、あなたが調べてみると vendor/magento/theme-frontend-blank/Magento_Theme/layout/default_head_blocks.xml あなたはそれを見るでしょう styles-m.css (これはから生成されます styles-m.less まだ生成されていない場合 開発ドキュメント:.less 検索への .css リクエスト - もっと ここ) がロードされる前に styles-l.css.

これは、次のように定義することで文字通りそのエラーを回避できることを意味します。 @media-common: true; カスタム Less ファイルの先頭にあり、上で説明したこととこれまでのコードの理解に基づいて、エラーは解決されるはずです。

問題は次のとおりです。 を含めるかどうか source/lib/_responsive.less & source/lib/variables/_responsive.less ファイルまたは独自の定義 @media-common: true; カスタム ファイルの先頭にある @media-common: false; での割り当て styles-l.less, したがって、両方でコードの重複が発生します。 styles-m.less そして styles-l.less. 。現時点ではそれを回避する方法は見当たりません。この根本的な問題は、カスタム Less ファイルがロードされていないことです。 両方 styles-m.less そして styles-l.less あるいは、 @media-common 変数の値がカスタム Less ファイルのスコープに取り込まれていません。カスタム Less を経由してインポートしている場合、これは当てはまりません。 _extend.less 両方のファイルの最後に次のものがあるため、ドキュメントが推奨するファイルです。 styles-m.less そして styles-l.less:

//@magento_import 'source/_extend.less';

これにより、問題に対する洞察と即時の解決策が得られたことを願っています。

あなたや他の誰かがより良い解決策を思い付いたら、私は大歓迎です。

アップデート したがって、コードの重複に関して上で述べたことは無視してください。私の場合、ページにカスタムCSSの明示的なインクルードを追加していました そして カスタムのlessファイルもテーマに追加しました _extend.less.

改造していた app/design/frontend/<Vendor>/<theme>/Magento_Cms/layout/cms_index_index.xml 以下を含めます。

<head> <!-- ADD PAGE-SPECIFIC STYLES SHEETS HERE --> <css src="css/pages/homepage.css" /> </head>

そして私もエントリーしてました app/design/frontend/<Vendor>/<theme>/web/css/source/_extend.less の:

@import "../pages/homepage.less";

私が発見したのは、両方ではなく、どちらかであるということです。したがって、この場合、M2 が次のリクエストを処理しようとしたとき、 http://vappey.dev/static/frontend/<Vendor>/<theme>/<locale>/css/pages/homepage.css 適切なファイルをロードします homepage.less このファイルには存在しません @media-common スコープ内にあるため、エラーがそれを示していました。これを回避するには、上で述べたようにインポート参照を追加すると、コードの重複がなくなります。さらに、エントリを削除すると、 _extend.less 私の styles-m.less そして styles-l.less 探さないでしょう homepage.less ファイルに含まれており、コードの重複はありません。

  • ここでの例はホームページ固有のスタイルのものです...しかし、これはシステムを正しく使用していない状況を示しており、それがエラーが発生した理由です。これがお役に立てば幸いです
ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top