Wenn es eine Kurzschreibweise gibt, die CSS dramatisch vermisst, dann ist es diejenige, die es ermöglicht, die `position`-Eigenschaft sowie die vier Offset-Eigenschaften (`top`, `right`, `bottom`, `left`) zu definieren.
Glücklicherweise ist dies typischerweise etwas, das mit einem CSS-Präprozessor wie Sass gelöst werden kann. Wir müssen nur ein einfaches Mixin erstellen, das uns davor bewahrt, die 5 Eigenschaften manuell zu deklarieren.
/// Shorthand mixin for offset positioning
/// @param {String} $position - Either `relative`, `absolute` or `fixed`
/// @param {Length} $top [null] - Top offset
/// @param {Length} $right [null] - Right offset
/// @param {Length} $bottom [null] - Bottom offset
/// @param {Length} $left [null] - Left offset
@mixin position($position, $top: null, $right: null, $bottom: null, $left: null) {
position: $position;
top: $top;
right: $right;
bottom: $bottom;
left: $left;
}
Nun ist die Sache, dass wir uns bei der Verwendung dieses Mixins auf benannte Argumente verlassen, um zu vermeiden, dass wir sie alle setzen müssen, wenn nur ein oder zwei gewünscht sind. Betrachten Sie den folgenden Code
.foo {
@include position(absolute, $top: 1em, $left: 50%);
}
… was kompiliert zu
.foo {
position: absolute;
top: 1em;
left: 50%;
}
Tatsächlich gibt Sass niemals eine Eigenschaft aus, die einen Wert von `null` hat.
Vereinfachung der API
Wir könnten den Typ der Position in den Mixin-Namen verschieben, anstatt ihn als erstes Argument definieren zu müssen. Dazu benötigen wir drei zusätzliche Mixins, die als Aliase für das gerade definierte `position`-Mixin dienen.
/// Shorthand mixin for absolute positioning
/// Serves as an alias for `position(absolute, ...)`
/// @param {Arglist} $args - Offsets
/// @require {mixin} position
@mixin absolute($args...) {
@include position(absolute, $args...);
}
/// Shorthand mixin for relative positioning
/// Serves as an alias for `position(relative, ...)`
/// @param {Arglist} $args - Offsets
/// @require {mixin} position
@mixin relative($args...) {
@include position(relative, $args...);
}
/// Shorthand mixin for fixed positioning
/// Serves as an alias for `position(fixed, ...)`
/// @param {Arglist} $args - Offsets
/// @require {mixin} position
@mixin fixed($args...) {
@include position(fixed, $args...);
}
Umschreiben unseres vorherigen Beispiels
.foo {
@include absolute($top: 1em, $left: 50%);
}
Welches Problem versuchen wir zu lösen? Tippgeschwindigkeit zählt? Benutzen Sie Hayaku oder Emmet.io
wird durch Eingabe von
Die Ausgabe ist reines CSS und Sie haben es mit 12 *einfachen* Tastendrücken erreicht und müssen kein Mixin pflegen.
Meiner Meinung nach ist die Wartung von Mixins kein Argument – da sie es Ihnen ermöglicht, in Zukunft flexibler zu sein.
Fall
Es könnte sein, dass es eine neue CSS-Eigenschaft oder ähnliches gibt, die sich auf diese spezielle Situation bezieht.
Wenn Sie ein Mixin verwenden, müssten Sie diese Zeile nur zum Mixin hinzufügen, in einigen Fällen Instanzen dieses Mixins hinzufügen
Meiner Meinung nach ist das Obige sicherlich einfacher, alle Stellen zu finden, an denen ein bestimmtes Mixin verwendet wird, als alle Stellen in Ihrem Code zurückzuverfolgen, an denen Sie die Technik ohne Mixin verwenden.
Also eigentlich ein Wartungsvorteil – ich denke, Sie könnten immer Emmet oder etwas Ähnliches verwenden, aber das widerspricht dem Zweck eines Mixins. Ich stimme zu, dass wir nicht für alles ein Mixin brauchen, und ich sehe, dass dieses hier für manche vielleicht zu einfach ist, um ein Mixin dafür zu verwenden. Aber ich sehe auch, dass die Benutzerfreundlichkeit für die meisten Leute ein ausreichender Anwendungsfall ist :)
Wow, danke, dass Sie mich von Hayaku oder Emmet.io ablenken! Ich meine, ernsthaft, diese Syntax nähert sich dem Wahnsinn von RegEx.
Larry… benutzen Sie keine Autovervollständigungen in Ihrem Texteditor? Wirklich?
Das ist keine *Syntax*… das ist eine Tastenfolge. Sie tippen das und erhalten reines CSS
Fühlen Sie sich frei, keine Zeit zu sparen, indem Sie das von Chris selbst empfohlene Emmet nicht verwenden