Mixins sind einer der nützlichsten und überzeugendsten Gründe für die Verwendung eines CSS-Präprozessors. Die typische Art und Weise, wie sie präsentiert werden, ist, um bei CSS3-Herstellervorsilben-Problemen zu helfen. Tatsächlich ist dies ein überzeugender Anwendungsfall. Kein mühsames Schreiben all der Vorsilben mehr und noch mühsamer das Aktualisieren im Laufe der Zeit.
Wenn Sie jedoch Sass verwenden, können Sie Compass verwenden, und Compass hat bereits alle diese CSS3-Mixins für Sie bereit. Möchten Sie die neuen CSS-Filter verwenden, aber zukunftssicher sein? Kein Problem.
img {
@include filter(grayscale(100%));
&:hover {
@include filter(grayscale(0));
}
}
Und Sie sind bereit.
Aber handgefertigte @mixins können auch nützlich sein! Das heißt, @mixins, die Sie selbst erstellen, um Ihrem spezifischen Projekt zugute zu kommen. Ich habe einen Beitrag von Sacha Greif genossen, in dem er einige @mixins aufgeführt hat, die er manchmal für bestimmte Projekte verwendet.
Zum Beispiel hat er einige für Präge- & Letterpress-Effekte, die auf einigen Websites zu finden sind.
@mixin box-emboss($outerOpacity, $innerOpacity) {
box-shadow:
rgba(white, $outerOpacity) 0 1px 0,
rgba(black, $innerOpacity) 0 1px 0 inset;
}
Und dann könnten Sie das auf jedem Selektor aufrufen, auf den Sie diesen Effekt anwenden möchten.
.module, header[role="banner"] {
@include box-emboss(0.3, 0.6);
}
Wenn Sie hier besonders raffiniert vorgehen möchten, könnten Sie auch einen Platzhalterselektor erstellen, auf den Sie @extend anwenden. Auf diese Weise wiederholen Sie keinen Code in der kompilierten CSS, aber Sie können Ihre Selektoren trennen und sie so organisieren, wie Sie möchten.
%box-emboss {
@include box-emboss(0.3, 0.6);
}
header[role="banner"] {
@extend %box-emboss;
}
...
.module {
@extend %box-emboss;
}
Hier ist ein Beispiel dafür auf CodePen.
Ich dachte, ich teile andere benutzerdefinierte @mixins, die ich in einigen meiner eigenen Projekte verwendet habe.
Schriftartenstapel
Auf dieser Website habe ich vier Schriftartenstapel
- Marke
- Überschriften
- Text
- Code
Wenn Sie bei Schriftarten richtig vorsichtig sind, setzen Sie wahrscheinlich font-family nicht zu oft in Ihrem Stylesheet. Wenn Sie denselben Stapel mehrmals setzen, läuft etwas schief. Aber Sie müssen es vielleicht mehr als einmal tun. Zum Beispiel haben Sie vielleicht eine Standard-Schriftart für den Text, die buchstäblich auf dem <body> gesetzt ist, aber das wird nicht in Formelemente übernommen, also wenn Sie dieselbe Schriftart dort verwenden möchten, müssen Sie sie erneut auf diese Elemente anwenden. Da Sie es jetzt an zwei Stellen setzen, ist ein @mixin bereits nützlich.
Ich verwende dafür lieber @mixins statt einer String-Variable, die auf die Schriftfamilien selbst gesetzt ist, da das @mixin es Ihnen ermöglicht, auch andere Eigenschaften zu setzen, wenn Sie möchten. Zum Beispiel verwenden Sie vielleicht eine @font-face-Schriftart, bei der Sie nur ein bestimmtes Gewicht laden und daher dieses Gewicht setzen möchten, wann immer Sie diese font-family setzen.
Hier sind die aktuellen @mixins für diese Website
@mixin font-stack-brand {
font-family: 'Gotham Rounded A', 'Gotham Rounded B', "proxima-nova-soft", sans-serif;
}
@mixin font-stack-headers {
font-family: 'Whitney Cond A', 'Whitney Cond B', "ronnia-condensed", sans-serif;
font-weight: 700;
font-style: normal;
}
@mixin font-stack-body {
font-family: 'Whitney SSm A', 'Whitney SSm B', "ff-meta-web-pro", sans-serif;
}
@mixin font-stack-code {
font-family: Menlo, "inconsolata", Monaco, "Courier New", Courier, monospace;
}
Media Query Mixin
Sie können Mixins erstellen, die den Inhalt ausgeben, den Sie nach ihnen in geschweiften Klammern übergeben. Dies ermöglicht einige nette Möglichkeiten. Zum Beispiel können Sie eine Media-Query "benennen" und sie dann überall verwenden. Das bedeutet, dass Sie diese Media-Query nur an einer Stelle aktualisieren müssen. Zum Beispiel
@mixin breakpoint($point) {
@if $point == mama-bear {
@media (max-width: 1250px) { @content; }
}
@if $point == baby-bear {
@media (max-width: 800px) { @content; }
}
@if $point == reverso-baby-bear {
@media (min-width: 800px) { @content; }
}
@if $point == reverso-mama-bear {
@media (min-width: 1250px) { @content; }
}
}
Und ein einfaches Anwendungsbeispiel
.page-wrap {
width: 80%;
@include breakpoint(baby-bear) {
width: 100%;
}
}
.footer {
a {
display: inline-block;
@include breakpoint(baby-bear) {
display: block;
}
}
}
Mehr über diese Idee erfahren Sie hier.
Animation Mixin
Compass hat noch kein @mixin für Keyframe-Animationen, aber es ist sehr einfach, dies selbst hinzuzufügen. Es verwendet die gleiche @content-Idee wie das Media-Query-Mixin oben.
@mixin keyframes($name) {
@-webkit-keyframes #{$name} {
@content
}
@-moz-keyframes #{$name} {
@content
}
@-ms-keyframes #{$name} {
@content
}
@-o-keyframes #{$name} {
@content
}
@keyframes #{$name} {
@content
}
}
Und eines, um die Animation einzustellen...
@mixin animation($value) {
-webkit-animation: $value;
-moz-animation: $value;
-ms-animation: $value;
-o-animation: $value;
animation: $value;
}
Die Verwendung wird dann einfach.
@include keyframes(move) {
0% { left: 0; }
100% { left: 100px; }
}
.box {
@include animation(move 0.5s ease infinite alternate);
}
Mehr über CSS-Animationen erfahren Sie hier.
Toolbox Mixins
Es gibt einige einfache Hilfsklassen, die ich im Laufe der Jahre in unzähligen Projekten verwendet habe. Dinge wie eine barrierefreie Klasse zum Ausblenden und typografische Hilfsklassen. Wenn Sie dafür ein Mixin erstellen, können Sie doppelt so viel Nutzen daraus ziehen.
// Accessible hiding
@mixin screen-reader-text() {
position: absolute;
top: -9999px;
left: -9999px;
}
.screen-reader-text {
@include screen-reader-text;
}
// Overflow Ellipsis
@mixin ellipsis() {
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
}
.ellipsis {
@include ellipsis;
}
// Word Wrapping
@mixin word-wrap() {
-ms-word-break: break-all;
word-break: break-all;
word-break: break-word;
-webkit-hyphens: auto;
-moz-hyphens: auto;
hyphens: auto;
}
.word-wrap {
@include mixin word-wrap;
}
Jetzt haben Sie einen Klassennamen, den Sie im Markup verwenden können, wenn Sie diese Eigenschaften anwenden müssen. Aber Sie haben **auch** ein Mixin, das Sie verwenden können, um diese Eigenschaften auf andere Deklarationen anzuwenden, wenn Sie das Markup nicht berühren können oder wollen.
Beachten Sie, dass ich im Allgemeinen nicht empfehle, Ihre Mixins und Klassen direkt nebeneinander zu platzieren. Ich bevorzuge es, wenn Mixins in einer separaten Datei wie _bits.scss liegen, die nichts kompiliert und daher in jeder anderen Sass-Datei enthalten sein kann.
Ihre?
Es macht immer Spaß zu teilen.
Ich habe eine Reihe von Beiträgen auf meinem Blog mit einigen Mixins begonnen, die nicht in Compass enthalten sind und die ich hilfreich fand.
Eines für CSS-Dreiecke ist wahrscheinlich mein Favorit: blackbe.lt/useful-sass-mixins-css-trangle/
Obwohl Dreiecke nicht in Compass integriert sind, sind sie in Zurb Foundations Compass-Erweiterung integriert. Obwohl ich kein großer Fan von Foundation für große Websites bin (es wird umständlich), verwende ich es häufig für kleine Websites, die ein- oder zweiseitig sind, und das Dreiecks-Mixin ist sehr hilfreich.
Ich liebe es, SASS zum Stylen von Websites zu verwenden, ich könnte mir nie vorstellen, zurück zu reinem CSS zu gehen! Ich verwende Mixins am häufigsten für Media Queries, Schriftartenstapel und Hintergründe. Mein letztes ist, wenn ich ein übergeordnetes Styling für ein Div löschen muss, was bei der Arbeit mit Drupal oft vorkommt. Also verwende ich gerne dieses
Ich benutze Sass erst seit einer Woche und es gefällt mir! Ich habe ein kleines Gradienten-Mixin zusammengestellt, mit dem ich angeben kann, auf welcher Eigenschaft es verwendet werden soll.
Ich baue eine Sammlung von Dienstprogrammen auf, einige größtenteils basierend auf Bourbon, in einem Styleguide, den ich langsam aufbaue und bereinige.
Ausgezeichnet, ich wollte das auf meiner Website posten – http://www.alwaystwisted.com und das werde ich vielleicht immer noch tun… Ein Paar benutzerdefinierte Mixins für vertikale Rhythmen – mit REMs/PX – http://jsfiddle.net/sturobson/vYYn5/ mit Ems – http://jsfiddle.net/sturobson/3KfUL/
Oh, und da ist das lt-IE-Mixin, bei dessen Erstellung mir geholfen wurde und über das ich hier gesprochen habe – http://alwaystwisted.com/post.php?s=2012-08-06-a-sass-mixin-for-media-queries-and-ie
Media Query + Retina Mixin (Vielmals Dank an Chris' Tweet von gestern.)
SCSS Media Queries mit HiDpi (Retina) Unterstützung – Gist
Ich benutze diese Mixins auch, aber ich habe sie nicht selbst erstellt. Ich benutze ein Gem, das SASS erweitert, genannt Bourbon (für Styling) und Neat (für Positionierung), und sie haben diese großartigen Funktionen. Ich empfehle wirklich, diese Gems zu verwenden, da sie alle präfixiert sind, sodass alles, was Sie wollen (wie diese Beispiele), in diesen Gems enthalten ist! Und weil sie großartig sind :)
Habe ein Mixin zum Erstellen von Richtungs-Pfeilen (Dreiecken) auf Boxen mit Rändern erstellt. Nichts revolutionär CSS-mäßig, aber schön, in ein Mixin zu packen. Bin immer noch ein Neuling, daher ist jedes Feedback willkommen.
Bordered Box Arrow (Gist) »
Das ist großartig, Fitz! Danke fürs Teilen.
Ich verwende reines CSS und liebe es, und ich könnte mir nie vorstellen, so viel abstrakten Ballast ernsthaft in meine Projekte zu laden.
Reines CSS durch und durch!
1) SCSS wird zu reinem CSS kompiliert
2) Die Abstraktion ist das Gegenteil von Ballast: Sie ermöglicht es Ihnen, Ihren Code modular zu halten und **reduziert** somit die Wiederholung.
Nachdem ich viele CSS-Tricks gesammelt habe, habe ich beschlossen, all diese Mixins (mit Sass & Compass) unter diesem Projekt zu veröffentlichen: Compass Recipes. Dies ist noch in Arbeit, aber es gibt viele interessante Dinge.
Ich hoffe, es gefällt Ihnen.
Und ich habe gerade ein Sass/SCSS-Mixin für die Retina/Nicht-Retina-Media-Queries erstellt, die Sie gestern in einem Gist hatten –
http://codepen.io/sturobson/pen/plcks
Schreiben Sie den Gradienten in neuer Syntax und erhalten Sie den alten.
Denn das Mixin sollte neuen Code mit altem Code kompatibel machen.
Ach, zum Teufel, das Linear-Gradienten-Mixin wurde doppelt gepostet, Chris, kannst du das bitte entfernen.
Ich kann eine Sache nicht verstehen, die ich bei Compass gesehen habe.
Ich habe diese SASS/SCSS-Mixins sehr nützlich gefunden, wenn Sie Compass nicht installieren können/dürfen.
https://github.com/matthieua/sass-css3-mixins
Viele CSS3-Leckerbissen darin.
Ich steige immer noch auf SASS um, aber dies sind einige LESS-Mixins, die ich derzeit in einem Projekt verwende. Den besten Einsatz für Mixins, den ich gefunden habe, ist die Möglichkeit, Fallbacks für IE und ältere Browser festzulegen sowie Ihre Werte für Browser-Präfixe zu übergeben.
Ich habe immer einen Innenabstand für die Erstellung doppelter Ränder verwendet, anstatt eines verschachtelten Spans oder Divs. Mixins waren daher das perfekte Vehikel.
@mixin box-shadow-inset ($horizontal, $vertical, $spread, $color) { -webkit-box-shadow: $horizontal $vertical $spread $color inset; -moz-box-shadow: $horizontal $vertical $spread $color inset; -ms-box-shadow: $horizontal $vertical $spread $color inset; -o-box-shadow: $horizontal $vertical $spread $color inset; box-shadow: $horizontal $vertical $spread $color inset; }Könnte nützlich sein (@siehe http://snipplr.com/view.php?codeview&id=66966)
Warum verwenden Sie die
-ms--Präfixe für die Animationen?Da keine stabile Version von IE diese Präfixe jemals ausgeliefert hat, wird allgemein davon ausgegangen, dass sie nicht benötigt werden.
Während
compasssie immer noch herausbringt (hoffentlich ändert sich das bald), sollten wir sie nicht in unseren eigenen Mixins verwenden.Ich habe ein Mixin zur Behandlung von Rem erweitert. Ich habe es auf Deutsch aufgeschrieben.
http://typo3-wuppertal.de/post/33835337756/sass-plugin-fur-die-nutzung-von-rem
Hier ist ein Anwendungsbeispiel
Dies wird zu
Wenn Sie nur den Code wollen, können Sie hier nachschauen.
https://github.com/SimonWpt/rem
Ich habe das gestern in der Lodge gepostet, aber ich werde es auch hier posten.
Hier ist ein
@mixinfür Schriftartenstapel, das eine!important-Option hat. Das ist super praktisch für hartnäckige eingefügte Divs, ich schaue dich an, Google Custom Search Engine.