2017-01-13 5 views
2

パラメータを受け入れるmixinを使い、そのパラメータを使用して別のmixinを呼び出すとします。LESS - 補間 - 動的に生成されたクラス名をMIXIN自体として使用しますか?

.text-right { 
    text-align: right 
} 

.text-center { 
    text-align: center; 
} 

.text-left { 
    text-align: left; 
} 


// mixin to call one of the above selectors 
.text-align(@direction) { 
    [email protected]{direction}; 
} 

body { 
    .text-align(right); 
} 

// Unrecognized input on this line 
// [email protected]{direction}; 

これを試みると、パラメータを補間しようとする行に認識できない入力が表示されます。

どのようにパラメータを受け入れ、[(パラメータ名は、ミックスインの名前の一部である)別のミックスインを呼び出すようにそのパラメータを使用できますか?

+0

これは不可能のようですが、逆は可能です:http://codepen.io/mtbottens/pen/rjLJaX #dinklage – bottens

+1

によって異なります。あなたの例が抽象的なものであれば(単に「左揃え」よりもはるかに簡単にコーディングできる)、つまり実際は再利用可能なミックスインについてのことです。ミックスインのパラメータをミックスイン名にエンコードしません。パラメータをパラメータとして保存してください。これを念頭に置いて、実際にはすべてのストーリーを正反対に書かなければなりません(例:https://gist.github.com/seven-phases-max/3d95a06e3acd89dbc8916d733f00cb3d)。 –

+1

賞金といえば、そこには本当の意味はありません。答えは簡単です:「あなたはできません」。 (したがって、たとえLessがそのような特徴を持っていても、あなたのアプローチを修正するために推奨されるコメントは、とにかく欠陥があります)。 –

答えて

1

できません。そうではありません。 LESSソースコード内の該当する行はparser.jsmixin.callである - ミックスインコールのパーサ:

e = parserInput.$re(/^[#.](?:[\w-]|\\(?:[A-Fa-f0-9]{1,6} ?|[^A-Fa-f0-9]))+/) 

有効なミックスインコールが唯一の有効なCSSの.classファイルまたは#ID識別子として命名することができる、です。他のすべては解析不能であり、変数補間段階に至らない。

ソリューションの要件を緩和すれば、方法があります。ここで、クラス名の一部を取り、そのクラス名でミックスインを呼び出す関数が必要です。それは完全にダイナミックされていないと一緒に暮らすことができれば、我々は単にwhen句の数とその機能を実装できます。

.text-align(@direction) when (@direction=left) { 
    .text-left; 
} 
.text-align(@direction) when (@direction=center) { 
    .text-center; 
} 
.text-align(@direction) when (@direction=right) { 
    .text-right; 
} 
+0

ありがとう、これも私が来た結論でした。 –

関連する問題