Media Queries sind bereits genial. Media Queries in Sass sind bereits genial. Media Queries in Sass 3.2 werden wirklich genial sein. So können Sie CodeKit dazu bringen, sie zu verwenden.
Das ist keine brandneue Idee. Ben Schwarz hat vor 7 Monaten ein exzellentes 7-minütiges Video gezeigt, das erklärt, wie es funktioniert. Jeff Croft schrieb vor 4 Monaten darüber. Mason Wendell schrieb vor 3 Monaten darüber.
Der Zauber liegt also darin
Das können Sie bereits in der stabilen Version von Sass (3.1.2) tun
.column-1-3 {
width: 33.3333%;
@media (max-width: 600px) {
width: 100%;
}
}
Sass wird es wie folgt in gültiges CSS umwandeln
.column-1-3 {
width: 33.3333%;
}
@media (max-width: 600px) {
.column-1-3 {
width: 100%;
}
}
Aber Sie möchten das vielleicht **zigtausendmal** in Ihrem CSS tun, weil es so unglaublich praktisch ist und so viel Sinn ergibt, wenn Sie es schreiben (anstatt alles am Ende zusammenzufassen, was kognitive Verbindungen unterbricht).
Jetzt stecken Sie in der Wiederholung fest, was genau Sass uns ersparen will. In Sass 3.2 (das sich im Alpha-Stadium befindet und das schon lange) gibt es eine Lösung. Wir können ein @mixin schreiben, das uns erlaubt, Media Queries zu "benennen".
I
- Wie das Benennen von Media Queries nach "Breakpoints"
- Sie mögen die Idee nicht, sie nach etwas Spezifischem zu benennen, wie z.B. "iPad"
- Wie Märchenanalogien
Also schreibe ich meinen Mixin so
@mixin breakpoint($point) {
@if $point == papa-bear {
@media (max-width: 1600px) { @content; }
}
@else if $point == mama-bear {
@media (max-width: 1250px) { @content; }
}
@else if $point == baby-bear {
@media (max-width: 650px) { @content; }
}
}
Jetzt kann ich Code schreiben wie
.page-wrap {
width: 75%;
@include breakpoint(papa-bear) { width: 60%; }
@include breakpoint(mama-bear) { width: 80%; }
@include breakpoint(baby-bear) { width: 95%; }
}
Und es wird genau so funktionieren, wie ich es will. Cool, oder? (Hinweis: Das ist rein willkürlicher Code zur Veranschaulichung, die Verwendung hängt vom Projekt ab)
Aber was ist, wenn Sie CodeKit verwenden?
CodeKit liefert, zu Recht, nur die stabile Version von Sass mit, die dies noch nicht unterstützt. Ich habe keine Ahnung, wann Sass 3.2 stabil wird. Es ist mindestens 7 Monate her und ich war persönlich darauf bedacht, das in Gang zu bringen. Glücklicherweise liefert CodeKit kürzlich eine neue Funktion, die dies ermöglicht.
Ab CodeKit Version 1.2 (6449) können Sie CodeKit nun anweisen, einen externen Compiler zu verwenden

So bringen Sie es zum Laufen
- Stellen Sie sicher, dass Sie mindestens diese Version von CodeKit haben
- Öffnen Sie das Terminal
- Geben Sie
rvm systemein. Ich weiß nicht genau, was das tut, aber CodeKit kann mit Sass, das in rvm-Verzeichnissen installiert ist, nicht umgehen. - Installieren Sie dann Sass 3.2 mit dem Befehl
sudo gem install sass --pre– Sie müssen möglicherweise Ihr Passwort eingeben. - Sass sollte jetzt im Verzeichnis /usr/bin/ installiert sein
- Öffnen Sie die CodeKit-Einstellungen und gehen Sie zu Sprachen und Sass/Scss
- Klicken Sie unter Erweiterte Compiler-Einstellungen auf Auswählen...
- Wählen Sie die Sass-Datei in diesem Verzeichnis aus
Und fertig. Beachten Sie, dass Sie nun für die Aktualisierung von Sass verantwortlich sind. Aber letztendlich wird Sass mit 3.2 final und CodeKit wird sich damit aktualisieren und wir können wieder den internen Compiler verwenden.
Viel Spaß! Es ist wirklich ein Vergnügen, auf diese Weise mit Media Queries zu arbeiten. Danke an Christopher Eppstein, der mir dabei geholfen hat. Das erinnert mich daran, dass Sie genau dasselbe mit Compass tun können, einfach sudo gem install compass und CodeKit darauf verweisen.
Und deshalb übertrifft Sass Less. Mehr muss nicht gesagt werden.
Zustimmung. Ich benutze immer noch LESS (und werde das auch tun, bis die neue SASS-Version erscheint), weil es ein besseres Tutorial und eine bessere Website hat. Dann werde ich wechseln, aber ich hoffe immer noch, dass SASS eine bessere Website/Tutorial bekommt.
Ich stimme Sam zu. Die Dokumentation von SASS ist nicht so gut entwickelt wie die von LESS, was die Lernkurve schwieriger macht. Bis dahin wird es hinter LESS bleiben.
Ich wollte die neue Foundation-Version von Zurb mit needs-3.2-SASS verwenden, aber ich musste auch Compass in CodeKit aktualisieren, genauso wie SASS, bevor diese neuen Media Queries funktionieren würden.
Ich hoffe, das hilft jemand anderem, der dasselbe mit Foundation, SASS 3.2, Compass und CodeKit tut.
Less hat @media-Bubbling in 1.3 hinzugefügt, funktioniert genauso, die gleiche Syntax. https://github.com/cloudhead/less.js/blob/master/CHANGELOG
FYI: Less macht das auch. Ich benutze es seit Monaten mit CodeKit. Es ist wirklich praktisch, besonders wenn Sie die Breakpoints zu einer Variablen machen, die Sie sich leicht merken können.
Das Problem bei dieser Technik ist, dass Sie am Ende eine CSS-Datei haben, in der Dutzende von Media-Query-Breakpoints immer wieder wiederholt werden. Zu viele davon verlangsamen das Rendering.
Ich warte darauf, dass ein Compiler alle verschiedenen Media-Query-Breakpoints zu einer einzigen Anweisung kompiliert. Ich bin nicht sicher, ob das jemals passieren wird.
Das Problem bei der Konsolidierung der Media Queries ist, dass die Reihenfolge Ihrer Deklarationen geändert wird, und Sie könnten am Ende Ihre Stile überschreiben, da sie in der falschen Reihenfolge sind.
Es ist schon schlimm genug, wenn es beim
@extendmanchmal passiert. Das wird das Problem auf ein ganz neues Niveau heben.Ich habe Code geschrieben, den Sie nach der Kompilierung nach CSS ausführen können, um dieses Problem zu lösen. Sie finden das Repository auf GitHub. Ich arbeite noch daran, sicherzustellen, dass alle Breakpoints in der richtigen Reihenfolge angewendet werden, aber es könnte Ihnen von Nutzen sein. Ich habe dies so eingerichtet, dass es nach der Kompilierung mit Live Reload automatisch ausgeführt wird.
Anhand dieser Beispiele von Jeremy Worboys ist dies in {LESS} möglich mit
Tun Sie dies: (fügt beide Media Queries am Ende der kompilierten .css-Datei ein)
Denn wenn ich versuche, den {LESS}-Compiler zu verwenden, ist das der finale Code
Sie duplizieren min-width 40em.
Tolle Sache. Ich fange gerade erst an, mich mit SASS zu beschäftigen und sehe wirklich gerne so etwas. Danke Chris, ich kann es kaum erwarten, dass die Kickstarter-Screencasts starten.
Probieren Sie das von dem großartigen Eric Meyer: http://susy.oddbird.net/
Sie werden mir später danken.
Ich finde, dass insbesondere bei responsiven Designs Gitterstrukturen das einschränken, was Sie tun können, und Ihre Freiheit. Außerdem macht die Erstellung Ihres eigenen Basisgitters mit Mixins für verschiedene Bildschirmgrößen über Sass es noch einfacher!
Ich neige dazu, Terence in dieser Angelegenheit zuzustimmen – Susy scheint ein fantastisches System zu sein, wenn Sie nach einem responsiven Gitter suchen… aber ich denke, wenn man das Gitter komplett aufgibt, kann das zu einigen ernsthaft kreativen Lösungen für die Erweiterung von Inhalten führen, wenn die Breite Ihrer Seite zunimmt.
Dieser Artikel inspiriert mich, SASS zu verwenden. Ich schätze SASS schon lange nicht. Aber nachdem ich diesen Artikel gelesen habe, überlege ich jetzt SASS. Ich hätte nie erwartet, was SASS leisten kann. Danke für diesen Beitrag!
-ikay
Tolle Inputs.. Ich werde das selbst in Betracht ziehen.
Großartiger Beitrag, Chris! Ich freue mich darauf, das jetzt auszuprobieren.
Ein Hinweis zu "rvm system": Mac OS X wird mit Ruby vorinstalliert geliefert, Version 1.8 (.x?). rvm ist der Ruby-Versionsmanager, den Sie möglicherweise zu einem beliebigen Zeitpunkt installiert haben, um eine neuere Version, z. B. 1.9.1, zu verwenden. Aus irgendeinem Grund spielen weder sass 3.2 noch codekit gut mit rvm-installierten Ruby-Versionen zusammen. Wenn Sie "rvm system" eingeben, weisen Sie Ihren Computer/rvm an, die vorinstallierte Ruby-Version des Systems zu verwenden, im Gegensatz zu den neueren Paketen von rvm. Beachten Sie, dass dies andere Dinge beeinträchtigen kann, für die Sie 1.9 und andere neuere Versionen installiert haben. Sie müssen also möglicherweise irgendwann zurückwechseln. Jeder, der dies tut, sollte herausfinden, was er sonst noch benötigt, das rvm erfordert, damit er weiß, wann er zu welcher Version wechseln muss.
Ich beginne gerade meine Reise in Sass, Compass & Susy, nachdem ich eine Weile Less verwendet habe. Wie andere sehe ich die Macht von Sass. Großartige Funktionen. Ich hoffe, es lohnt sich!
Leser von .net magazine werden vielleicht wissen wollen, dass ich vor ein paar Monaten auch Sass 3.2 Media Queries behandelt habe (mit Input von dem ehrwürdigen Herrn Eppstein). Aufgrund von Veröffentlichungszeiten (Druckläufe usw.) ist es gerade in der aktuellen Printausgabe erschienen. Es ist das, das derzeit auf der Website netmagazine.com beworben wird. Außerdem kann Sass 3.2 auch gut mit LiveReload (beta 3.16 glaube ich?) zusammenspielen.
Eines ist sicher: Wenn Sie erst einmal ein paar responsive Websites mit den 3.2 Media-Query-Mixins erstellt haben, werden Sie nie mehr zurückgehen wollen.
In SCSS können Sie Ihre Breakpoints auch so einrichten
Und dann...
Etwas einfacher? Macht wahrscheinlich keinen Unterschied... es sei denn, jemand kann einen aufzeigen?
Ich mache das schon eine Weile und es scheint zu funktionieren.
Ich warte jedoch gespannt auf die Möglichkeit, alle Elemente usw. unter einer Breakpoint-Variable zu einer einzigen Stelle im finalen CSS-Sheet zu kompilieren.
Das ist cool, aber was ist, wenn Ihre Media Queries komplizierter sind?
Nur eine Variable reicht da nicht mehr aus, es ist am besten, die gesamte Media Query als Variable zu haben. Ich denke, Tutorials wie das obige sollten den Punkt mit Beispielen wie diesem deutlicher machen.
Ja – das ist ziemlich genau das Feedback, das ich gesucht habe. Guter Punkt.
Chris, die Antwort auf die Frage "was ist, wenn Ihre Media Queries komplizierter sind" ist Breakpoint
http://github.com/canarymason/breakpoint
Compass-Erweiterung für extrem einfache Media Queries, im Grunde der Variablenansatz, wie oben erwähnt, aber mit der Fähigkeit, super komplexe Media Queries zu erstellen. Schauen Sie es sich an.
Interessant. Ich war kürzlich auf einer Präsentation über eine andere Breakpoint-Bibliothek — https://github.com/lesjames/breakpoint.
Es mag dem von Ihnen erwähnten Breakpoint-Ansatz ähneln, hat aber den Vorteil, dass es gitterbasiert ist – anstatt Breiten zu ermitteln und Variablen zu verwenden, bestimmen Sie einfach, wie viele Spalten Sie für ein bestimmtes Layout erwarten, und es erledigt die Berechnung für Sie. Zum Beispiel
Ich habe es noch nicht ausprobiert (habe SASS 3.2 nicht, unter Windows), aber die Demo des Autors war ziemlich beeindruckend.
Ich versuche, diese Technik zu integrieren (danke Chris, sie ist großartig!), aber ich habe Schwierigkeiten mit der Retina-Target-Media-Query.
Das kompiliert nicht. Wenn jemand eine Idee hat. Oder ob das mit Sass überhaupt möglich ist.
Schon gut, ich habe es endlich behoben
Wenn Sie dies tun, werden für jeden Selektor mehrere @media-Abfragen ausgegeben. Haben Sie Leistungstests durchgeführt, um zu sehen, ob mehrere Media Queries für denselben Breakpoint besser sind als eine einzige Media Query für jeden?
Zum Beispiel
.container { width:1140px; @media (min-width:320px) { width: 100%; } } .heading { font-size:24px; @media (min-width:320px) { font-size:20px; } } /* Formats into */ .container { width:1140px; } @media (min-width:320px) {width: 100%; } .heading { font-size:24px; } @media (min-width:320px) { font-size:20px; }Wenn Sie das für JEDEN Selektor in Ihrer CSS haben, würde das nicht Ihre Leistung beeinträchtigen? Ich ging davon aus, dass 1 Media Query pro Breakpoint aus gutem Grund der De-facto-Standard ist.
Ich glaube, ich habe Jeremys Beitrag über seinen Sassy Media Compiler irgendwie verpasst. Sieht großartig aus! Wenn er das in ein Sublime Text-Plugin einbauen könnte, wäre das super genial!
Hi Brian, ich habe ein neues Issue auf GitHub für ein Sublime Text 2 Plugin eröffnet. Ich würde Ihre Meinung dazu schätzen, wie Sie mit dem Plugin interagieren möchten.
Ich freue mich sehr auf dieses Sublime Text Plugin (vorausgesetzt, jemand anderes weiß, wie man es implementiert).
Hi David, ich werde das Plugin schreiben. Wenn Sie sich das Issue auf GitHub ansehen, sehen Sie die Diskussion, die Brian und ich darüber hatten, wie Sie es ausführen würden. Fügen Sie Ihre Meinung gerne hinzu.
„Das erinnert mich daran, dass Sie genau dasselbe mit Compass tun können, einfach sudo gem install compass und CodeKit darauf verweisen.“
DAS HAT MIR GERADE DAS LEBEN GERETTET.
Ich konnte Compass-Plugins nie zum Laufen bringen. Die gesamte Welt der Compass-Plugins hat sich wieder geöffnet. WOOOO.
Codekit + Adobe Shadow + Dev Tools + Sublime Text.
Die Werkzeuge sind heutzutage einfach erstaunlich.
Jeff, die Werkzeuge, die Sie erwähnen, sind wirklich erstaunlich, da stimme ich zu. Ich kenne Codekit, Adobe Shadow und Sublime Text, aber was sind Dev Tools?
Sie meinen wahrscheinlich die WebKit Dev Tools, oder?
Kann dies auf den Mobile-First-Ansatz angewendet werden, ich meine, dass die Media Queries in einer speziellen CSS-Datei platziert werden, nur für Browser mit fähigen Media Queries, und gleichzeitig eine feste Breite für IE erstellen? Wenn irgendetwas von dem, was ich gesagt habe, Sinn ergibt.
Übrigens, wenn Sie Foundation 3 verwenden, benötigen Sie Version 0.13.alpha.x von Compass, wenn Sie CodeKit auf einen externen Compass-Compiler verweisen möchten. Wenn Compass diese Version offiziell veröffentlicht und CodeKit diesen Compiler integriert, können Sie einfach den Compiler von CodeKit verwenden.
Führen Sie
sudo gem install compass --preaus, um die neueste Version zu erhalten.Und bei mir waren Sass und Compass nicht im Verzeichnis /usr/bin/ installiert, sondern stattdessen im Verzeichnis /Library/Ruby/Gems/1.8/gems/[sass/compass version]/bin
Ich habe die obigen Anweisungen befolgt, um Sass 3.2 in Codekit zum Laufen zu bringen (danke Chris), was gut zu funktionieren schien… außer, dass ich nicht glaube, dass Codekit wirklich Sass 3.2 verwendet. Die Platzhalterselektorfunktion funktioniert nicht, d.h. %classname kann nicht mit @extend erweitert werden.
Codekit schien den neuen Sass-Pfad zu übernehmen und zeigt an, dass es /usr/bin/sass verwendet, was beim Test mit sass –version tatsächlich 3.2.0.alpha.277 ist.
Kann jemand erraten, was ich falsch mache? Vielen Dank im Voraus!
Um meine Dummheit für die Nachwelt festzuhalten: Ich habe @extend .placeholder anstelle von @extend %placeholder verwendet. Das Aktualisieren von Sass und Compass hat tatsächlich funktioniert.
Anstatt Breakpoints nenne ich es respond-to und es gibt eine Standardoption und eine Tablet-Option
Funktioniert bei mir nicht… Ich bekomme die folgende Fehlermeldung
Ungültiges CSS nach “…ond-to(tablet) ": erwartet "}", war "{width:60%;}"
Hier ist meines
Und weiter unten rufe ich es hier auf
Ähm, respond-to(tablet)
Es ist in meinem CSS richtig geschrieben, ich habe es nur im Kommentar falsch geschrieben
Verstanden. Ich war auf SASS 3.1 und musste upgraden, damit es funktioniert.
Gibt es eine Möglichkeit, all diese Breakpoints beim Kompilieren zu einem einzigen, sehr großen Abschnitt in der CSS zusammenzufassen? Ich meine, gibt es eine Möglichkeit, den Speicherort in meinem Stylesheet festzulegen, um all diese zusammenzufügen, wie z.B. einen "Responsiven" Abschnitt? Gibt es auch eine Möglichkeit, sie unter einer einzigen Abfrage zu kompilieren, wenn mehrere Klassen dieselben Breakpoints verwenden?
Hallo Daniel, ich würde das auch gerne wissen. Habe gerade den Code-Snippet auf dieser Seite verwendet, aber er spuckt immer wieder mehrere Media Queries hintereinander aus, obwohl es dieselben Breakpoints sind.
$small:480;
$med:720;
$large:1280;
@mixin breakpoint($point, $dir: min) {
@media (#{$dir}-width: $point) {
@content;
}
}