Dynamisch definieren Sie eine variable in CSS WENIGER
Ich versuche zum erstellen eines Mixins, die dynamisch definiert Variablen, die in WENIGER CSS, tatsächlich die Zuordnung zu einer zusammengesetzten Namen.
Vereinfachtes use-case (nicht das echte):
.define(@var){
@foo{var}: 0;
}
Dann würde man rufen Mixins als solche:
.define('Bar'){
@fooBar: 0;
}
Da diese Art der string-interpolation ist möglich, während mit Selektoren-Namen, ich Frage mich, ob das dasselbe wäre möglich für Variablennamen; bisher hatte ich kein Glück mit verschiedenen Schreibweisen, die ich ausprobiert (andere als die oben genannten, ich habe versucht, zu entkommen, zu zitieren, mit der ~
Präfix und so weiter).
Bearbeiten
Habe ich gerade versucht, eine weitere Sache, und ich fühle, könnte ich schließen; aber ich bin mit einer kuriosität, der WENIGER syntax. Wenn ich dies Schreibe:
.define(@var){
#namespace {
@foo: @var;
}
}
Und dann rufen Sie es so auf:
.define(0)
Kann ich dann verwenden @foo
im üblichen haben Mode:
.test {
#namespace;
property: @foo; /* returns 0 */
}
Aber das gleiche gilt nicht im Falle einer string-Interpolation-Auswahl:
.define(@var, @ns){
#@{ns} {
@foo: @var;
}
}
.define(0, namespace);
.test {
#namespace;
property: @foo;
}
Den obigen code gibt mir die folgende Fehlermeldung:
Name-Fehler: #namespace nicht definiert ist
Jedoch die string-interpolation war erfolgreich und gültig. Als eine Angelegenheit von Tatsache, wenn ich nehmen die .test
Teil, und ändern Sie die oben, um die Ausgabe eines test-Eigenschaft, ich kann sehen, dass die CSS korrekt analysiert. Ich meine:
.define(@var, @ns){
#@{ns} {
@foo: @var;
prop: @foo;
}
}
.define(0, namespace);
Ausgänge die folgende CSS:
#namespace {
prop: 0;
}
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies Nicht Geschehen Kann,
Was Sie Lust zu tun, ist derzeit nicht möglich, in WENIGER. Ich denke, der kann zwei mögliche "workarounds" , wenn Sie frühzeitig wissen, welche Variablen-Namen, die Sie möchten, um zu ermöglichen, verwendet werden (in anderen Worten, nicht vollständig dynamisch). Dann so etwas wie eine der folgenden getan werden könnte:
Idee #1 (Variable Variablen)
Idee #2 (Parametric Mixins In Verbindung)
WENIGER
CSS-Ausgabe (für Ideen)
Abschluss
Aber ich bin mir nicht sicher, wie nützlich die beiden würden wirklich sein, noch weiß ich, ob es hätte jeder realen Anwendung in Ihrem konkreten Anwendungsfall (da Sie erwähnen, die oben ist nicht die realen Anwendungsfall). Wenn Sie möchten, eine voll dynamische variable in WENIGER, dann kann es nicht getan werden, durch WENIGER selbst.
.define(0);
in einem block von code, den Sie genommen haben#namespace
. Beide ermöglichen die Verwendung der@foo
variable an diesem Punkt. Möglicherweise müssen Sie näher zu beschreiben, was Sie tatsächlich versuchen zu tun und warum Sie versuchen, es zu tun.prop: #namespace > @fooBar
aber in der Tat ist dies nicht der Fall. Vielen Dank für Ihre Hilfe.Ich bin mir nicht wirklich sicher, was Sie wollen zu verwenden, aber einer der meinen Vorschlag bezieht sich auf @ScottS Antwort. Auf meine realen Welt, ich brauche zum erstellen einer web-app, wo wäre es für mehrere Marken und jede Marke Ihren eigenen text, Farbe, hintergrund und so weiter... also fing ich an zu jagen einen Weg, dies zu erreichen in WENIGER, was könnte ich leicht tun, auf SASS und das Ergebnis unter:
WENIGER
Te Ergebnis:
CSS
Dies ist sehr schwierig und ich hatte auch mehrere Elemente zu bekommen, was ich brauchte, zum ersten mal eine Reihe von Mixins in Verbindung zur Verfügung gestellt von Sieben Phase-Max und können Sie finden es hier und als die @ScottS Antwort wurde das Stück, das fehlte, war die her-mein puzzle... hoffe, das hilft Ihnen und anderen, die brauchen zu erstellen eine Reihe von Variablen, zum Teil von anderen Variablen und erstellen Sie ein dynamischeres, weniger Datei.
Können Sie kopieren meinen gesamten code und test bei http://lesstester.com/
@dodge-color
es überhaupt (d.h. schreibendodge
an einem Ort einfach zu machen, selbst zu schreibendodge
andere?). Für mich sieht es aus wie diese Art von Zeug ist perfekt lösbar mit so etwas wie dieser oder dieser (+ beliebiger geeigneter Kombinationen dieser Methoden).@colors: dodge #fff, ford #000;
oder ähnliches können nicht verwendet werden, anstelle von@dodge-color: #fff; @color-ford: #000;
. Nehmen Sie beliebiger andere Programmiersprache design patterns: wenn wir brauchen, einige wiederholbare Sachen, die wir definieren, diese Daten über arrays von Strukturen (oder Strukturen von arrays usw.), wir deklarieren Sie nicht jeden einzelnen Wert, den wir brauchen, als eine Globale variable mit einem eindeutigen Namen (noch einmal, was für?). OK, never mind (es scheint offtopic geht schon), ich wollte nur erwähnen, dass für mich diese ganze Idee sieht aus wie grundlegend falsche Ansatz.Folgen bis auf die akzeptierte Antwort, die Sie können auch definieren Sie einen Wert für die variable durch die Verlängerung der .define() mixin wie folgt. Dies ermöglicht die Verwendung einer temporären Variablen innerhalb einer Regel.
CSS-Ausgabe
Hier ist ein komplizierter gist, wie ich diese in ein mixin für die Erzeugung von responsive Hintergrundbilder mit background-size: cover; (und ein IE8-fallback).
Ich habe keine Zeit zum erstellen der Beispiele, aber keines der oben genannten sind so schnell und einfach wie die Definition einer Variablen und dann die Montage der import basiert auf es. Dann einfach mehrere Dokumente, in denen die gleichen Variablen definiert sind.