2016-09-11 2 views

Antwort

4

Nicht in der genau wie Sie denken, aber Sie können dieses Ergebnis erzielen. Abhängig von Ihren Stilen müssen Sie möglicherweise die Einstellungen an dieses Modell anpassen. (LESS hat eine große Aufgabe auf Referenzen unabhängig von der Reihenfolge der Lösung Dinge in einer Datei erscheinen, aber Abhängigkeiten über die Dinge setzen, die sie rufen eine hilfreiche Organisation Gewohnheit.)

.class(@x) { 
    z-index: @x; 
} 
.method() { 
    @variable: 100; 
    .class(@variable); 
} 

Beachten Sie, dass, wenn Sie don 't müssen @variable irgendwo sonst innerhalb .method() verwenden Sie können die Deklaration überspringen. Das heißt, eine Variable deklarieren, wenn Sie so etwas wie

.method() { 
    @variable: 100; 
    .class(@variable); 
    padding-right: unit(@variable,px); 
} 

tun wollen, und wenn Sie brauchen nicht auf die Variable speichern Sie sich diese Zeile:

.method() { 
    .class(100); 
    color: red; 
} 

Edit:

  1. Wenn Sie in der Lage sein möchten, einen Wert an .method zu übergeben, lassen Sie das Mixin ein Argument rathe r als die Variable innerhalb des Mixins zu definieren. Damit können Sie sowohl .example {method(100)} als auch .example{method(200)} ausführen.
.class(@x) { 
    z-index: @x; 
} 
.method(@x) { 
    .class(@x); 
} 
  1. Wenn .class muss in der Lage sein, ohne zu arbeiten, um ein Argument übergeben wird, können Sie es mit einem Standardwert bieten können. Angesichts
.class(@x:100) { 
    z-index: @x 
} 

.example{.class} wird auf die gleiche Sache wie .example{.class(100)} würde kompilieren.

+0

Nun, nicht genau das Gleiche. .class ist keine Methode, es ist eine Klasse. Auch diese Art bricht das Verantwortungsprinzip. .class sollte sich selbst darum kümmern, und wird auch nicht funktionieren, wenn Sie beispielsweise auf .method2. @ anothervariable zugreifen müssen. – momomo

+0

Hört sich an, als gäbe es hier eine semantische Diskrepanz: WENIGER hat kein Ding namens "Methode".Können Sie den Unterschied beschreiben, den Sie zwischen "Methode" und "Klasse" ziehen? (Ich kann das im Keim ersticken, indem ich sage, dass Leute es manchmal komisch finden, dass in LESS jeder Selektor definitionsgemäß ein Mixin ist.) – henry

+0

Wieder vielleicht Semantik, weil '.class' in dem Sinne auf sich selbst aufpasst '.example {.class (10)}' funktioniert. Aber vielleicht meinst du ".example {.class}" sollte etwas kompilieren? Ich habe ein Beispiel hinzugefügt, wie man einen Standardwert bereitstellt, so dass '.class' verwendet werden kann, ohne ein Argument zu übergeben. Beachten Sie, dass es Fälle gibt, in denen Sie kein Mixin brauchen oder wollen, dass es zu etwas kompiliert, ohne von etwas anderem aufgerufen zu werden (grundlegendes Beispiel: wenn '.class' immer von' .method' aufgerufen wird, würden Sie unnötiges hinzufügen Gewichten Sie Ihre CSS, indem Sie Styles für eine eigenständige '.class' hinzufügen. – henry

0

Ich bin nicht sicher, ob ich recht verstehe Ihre Frage, aber ich habe eine Lösung, ich hoffe, dass Sie es nützlich finden:

In Abzüglich:

.method(){ 
    @variable:100; 
} 

.method2(){ 
    @variable:200; 
} 

.class { 
    .method(); 
    z-index:@variable; 
} 

.class2 { 
    .method2(); 
    z-index:@variable; 
} 

In SASS

@function method() { 
    $variable: 100; 
    @return $variable; 
} 
@function method2() { 
    $variable: 200; 
    @return $variable; 
} 

.class { 
    z-index: method(); 
} 

.class2 { 
    z-index: method2(); 
} 

CSS-Ausgang für SASS/LESS:

.class { 
    z-index: 100; 
} 

.class2 { 
    z-index: 200; 
} 
+0

Denken Sie an method-1, method-2 als Klassen und .class muss auf statische Eigenschaften innerhalb dieser Klassen zugreifen. Das ist genau dasselbe. Die zu Methode 1 gehörende Logik sollte in dieser Methode-1-Klasse und die Logik zu Methode-2 in Methode 2 enthalten sein. Die Sache ist, dass man in weniger auf innere Methoden zugreifen kann, aber nicht auf Eigenschaften, was ein Wermutstropfen ist. – momomo

+0

Ich denke, es gibt keine Möglichkeit, auf eine bestimmte Eigenschaft einer Klasse zuzugreifen. Mit Maps in SASS oder Hashes in Stylus ist es mir am nächsten, etwas Ähnliches zu erreichen, in Less ist es schwieriger das gleiche Feature zu bekommen. Offensichtlich ist nicht was du willst. – blonfu