Susy bietet Ihnen die Werkzeuge, um Ihre eigenen Grid-Layouts zu erstellen, die den Bedürfnissen Ihrer Website entsprechen. Es gibt Ihnen die Freiheit und Flexibilität, jedes Design zu erstellen, das Sie sich vorstellen können. Es spielt keine Rolle, ob Ihr Design 5, 14 oder 48 Spalten hat. Ungleichmäßige Spaltenbreiten? Susy hat Sie abgedeckt.
Warum sollten Sie Susy gegenüber den Millionen anderer Frameworks im Internet wählen? Sie haben vielleicht noch nie davon gehört. Was, wenn seine Schönheit nur oberflächlich ist?
Susy ist eines der besten Dinge, die mir in Bezug auf meinen Front-End-Entwicklungs-Workflow in den letzten Monaten passiert sind. Es hat mir so sehr geholfen, dass ich beschlossen habe, ein Buch darüber zu schreiben, um seine Vorteile mit der Welt zu teilen. Es ist ein detaillierter Leitfaden zu Susy und wie Sie es verwenden können, um jedes gewünschte Website-Design einfach zu erstellen.
Immer noch nicht überzeugt? Nun, dann bitte ich Sie nur, mir die Gelegenheit zu geben, zu versuchen, Ihre Meinung mit diesem Artikel zu ändern. Wir werden sehen, warum Susy so besonders ist und wie es Ihnen helfen kann.
Wie man so schön sagt, gibt es keinen Ersatz für Erfahrung, also werde ich Sie durch die Susy-Erfahrung bei der Erstellung eines Layouts führen. Und Sie können es mit der Erfahrung vergleichen, dasselbe Layout von Hand zu erstellen (was die Berechnung von Pixeln ... selbst beinhaltet).
Wir fangen einfach an und gehen zu ausgefalleneren Layouts über, sobald Sie Susy besser kennengelernt haben.
Bevor wir beginnen, gibt es einige Dinge, die Sie über unseren Freund Susy wissen müssen. Sie MÜSSEN die Sass-Präprozessor-Sprache dafür verwenden, was bedeutet, dass Sie zumindest wissen müssen, wie man Sass in CSS konvertiert. Und nein, Sie können LESS nicht verwenden. Tut mir leid, LESS-Leute!
Ein sehr einfaches Layout erstellen
CSS-Tricks hat ein ziemlich geradliniges Layout, also verwenden wir das für unser erstes Beispiel.
Schauen Sie sich den Blog an, und Sie werden feststellen, dass CSS-Tricks aus zwei Inhaltsbereichen besteht: dem Hauptinhalt und dem Seitenleistenbereich.
Wir gehen davon aus, dass CSS-Tricks ein 12-Spalten-Layout für die gesamte Website verwendet und sein Inhaltsbereich 8 von 12 Spalten einnimmt, während die Seitenleiste 4 von 12 Spalten einnimmt. Ziemlich Standard, wenn Sie schon einmal mit Grids gearbeitet haben.

Wenn Sie Bootstrap oder Foundation zuvor verwendet haben, wäre das Markup für dieses Website-Layout
<div class="wrap">
<div class="content col-md-8"></div>
<div class="content col-md-4"></div>
</div>
Einfach, ja. Aber Bootstrap und Foundation bringen auch viel Ballast mit sich, mit dem wir uns oft nicht auseinandersetzen wollen. Wenn Sie die meiste andere Sache, die mit Bootstrap und Foundation geliefert wird, nicht benötigen, wäre Susy eine viel bessere Wahl für Sie.
Ein stoischer Entwickler, der alle seine Websites von Grund auf handcodiert, ohne Frameworks oder Schnickschnack, würde sein Markup wahrscheinlich so schreiben
<div class="wrap">
<div class="content">Content</div>
<div class="sidebar">Sidebar</div>
</div>
Um einen 8-Spalten-Inhalt und eine 4-Spalten-Seitenleiste zu erstellen, müssen Sie die Breiten des Inhalts, der Lücke und der Seitenleiste messen. Eine Regel der responsiven Webentwicklung ist, diese Breiten in Prozent auszugeben, daher müssen Sie sie entsprechend konvertieren.

Das entsprechende CSS würde also wahrscheinlich etwa so aussehen
/* I tend to use border-box sizing for all my web layouts. */
*, *:before, *:after {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.wrap {
max-width: 1120px;
}
/* Clearfix for floated children */
.wrap:after {
content: " ";
clear: both;
display: block;
}
.content {
float: left;
width: 66.071429%; /* 740px / 1120px */
margin-right: 1.6964286%; /* 19px/1120px */
}
.sidebar {
float: right;
width: 32.2321429%; /* 361px / 1120px */
}
Ein kurzer Hinweis, bevor wir weitermachen: Ich liebe es, die Eigenschaft box-sizing auf border-box für alle meine Web-Elemente zu setzen, und ich empfehle Ihnen dringend, dasselbe zu tun. Chris hat hier ausführlich über box-sizing geschrieben.
Wie auch immer, die Methode des Handcodierens von Grund auf kann mühsam werden, wenn Sie mehrere Layouts bearbeiten müssen. Stellen Sie sich vor, Sie müssten jedes Mal all diese Prozentsätze berechnen!
Genau dabei hilft Ihnen Susy. Sie erledigt die Mathematik für Sie.
Das einfache Layout mit Susy erstellen
Wenn Sie Susy zum Erstellen eines Layouts verwenden, müssen Sie es zuerst wissen lassen, welche Einstellungen Sie verwenden möchten. Es gibt eine ganze Reihe von Standardeinstellungen, die Susy verwendet, um jedes Projekt zu starten.
Ich gehe davon aus, dass dies Ihre erste Erfahrung mit Susy ist, also bleiben wir vorerst bei den meisten Standardeinstellungen. Sie müssen jedoch drei Eigenschaften ändern, und Sie ändern sie, indem Sie sie auf der $susy Map deklarieren.
Gleichzeitig wenden wir auch die border-box Eigenschaft an, wie wir es oben getan haben.
@import "susy"
/* Changing Susy default global settings */
$susy: (
/* Tells Susy to use 12 columns */
columns: 12,
/* Tells Susy that the container has a max-width of 1120px */
container: 1120px,
/* Tells Susy to use border-box */
global-box-sizing: border-box
);
/* Makes border-box properties */
@include border-box-sizing;
Es wird empfohlen, die container Mixin zu verwenden, um den Container für die Website zu erstellen, wann immer Sie Susy verwenden. In unserem Fall ist dieser Container .wrap.
.wrap {
@include container;
}
Dieses Mal werden wir anstatt die exakten Pixel und Prozente für das Layout manuell zu berechnen, Susy bitten, dies für uns zu tun. Um dies zu tun, **müssen Sie Susy nur mitteilen, dass content 8 Spalten und sidebar 4 Spalten sind.**
Wir müssen Susy mitteilen, dass sidebar das letzte Element in der Reihe ist, damit es die notwendigen Anpassungen vornehmen kann.
/* Tells Susy there's 8 columns in the content */
.content {
@include span(8);
}
/* Tells Susy there's 4 columns in the sidebar, and its the last item on the row. */
.sidebar {
@include span(4 last);
}
Dies kompiliert zu
*, *:before, *:after {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}
.wrap {
max-width: 1120px;
margin-left: auto;
margin-right: auto;
}
.wrap:after {
content: " ";
display: block;
clear: both;
}
.content {
width: 66.10169%;
float: left;
margin-right: 1.69492%;
}
.sidebar {
width: 32.20339%;
float: right;
margin-right: 0;
}
**Haben Sie bemerkt, dass die CSS-Ausgabe genau das ist, was wir erstellen mussten?** Susy hat uns sicher viel Zeit gespart.
Wir sind mit dem Layout von CSS-Tricks aber noch nicht fertig. Wenn Sie zum unteren Ende der Website scrollen, finden Sie den Social-Media-Bereich, und Sie können auch sehen, dass sich in diesem Bereich 10 Social-Media-Elemente befinden.

Wenn Sie ein traditionelles Grid-Framework in Ihrem Design verwenden, haben Sie ziemlich schlechte Karten. Soweit ich weiß, gibt es keine einfache Möglichkeit, die Anzahl der Spalten von 12 auf 10 schnell zu manipulieren, wenn man Frameworks wie Bootstrap oder Foundation verwendet, ohne den Rest des Layouts zu beeinträchtigen.
Susy bindet Sie nicht an solche Regeln. Sie können Ihre eigenen Regeln erstellen. Es ist schließlich Ihr Grid.
Ihr Grid, Ihre Regeln
Alles ist möglich, wenn Sie Ihre eigenen Grids erstellen. Bevor wir mit dem CSS beginnen, lassen Sie uns zuerst das Markup richtig machen. Es sollte in etwa so aussehen
<div class="wrap">
<div class="content"></div>
<div class="sidebar"></div>
<div class="social">
<ul>
<li class="social__list-item"></li> <!-- repeat 10x -->
</ul>
</div>
</div>
Nun können wir mit der CSS-Arbeit beginnen. Bei der Handcodierungs-Methode haben Sie vielleicht festgestellt, dass Sie die Breite jedes Elements und der Lücke erneut berechnen müssen.

.social {
padding: 1.6964286% /* 19px / 1120px */
}
/* Adds clearfix to social to prevent the float collapse */
.social:after {
content: " ";
clear: both;
display: block;
}
.social__list-item {
float: left;
width: 9.1497227; /* 99px / 1082px */
margin-right: 1.0166359; /* 11px / 1082px */
}
/* And the last item cannot have any right margins */
/* It is also good to float it right to mitigate subpixel rounding errors */
.social__list-item:last-child {
float: right;
margin-right: 0;
}
Das ist ziemlich mühsam, wenn Sie mich fragen.
Es ist viel einfacher, wenn wir Susy es für uns erledigen lassen. Sie müssen Susy nur sagen, dass es insgesamt 10 Spalten gibt (statt 12) und jedes Social-Element eine Spalte einnimmt.
.social {
/* Adds a padding of 19px to each side of the .social container */
padding: gutter();
/* Adding a clearfix because all children elements are floated */
@include clearfix;
.social__list-item {
/* Telling Susy that there are 10 items, and each takes up 1 row */
@include span(1 of 10);
/* Another way to tell Susy that this is the last item in the row */
&:last-child {
@include last;
}
}
}
Und Susy erzeugt genau die gleichen CSS-Eigenschaften, die wir für das Grid benötigen!
.social {
padding: 1.69492%;
}
.social:after {
content: "";
display: table;
clear: both;
}
.social .social__list-item {
width: 8.16327%;
float: left;
margin-right: 2.04082%;
}
.social .social__list-item:last-child {
float: right;
margin-right: 0;
}
So einfach kann die Nutzung von Susy sein. Keine mathematischen Fähigkeiten erforderlich. **Solange Sie wissen, wie man ein Grid mit reinem CSS erstellt, wissen Sie, wie man Susy verwendet.**
Eine Sache bei der Arbeit mit Prozentangaben ist die unvermeidliche Tatsache, dass Ihre Ausgabe Subpixel enthält, wie z. B. 10,4 Pixel. Dies ist seit sehr langer Zeit ein Hauptproblem bei Layouts, da verschiedene Browser diese Subpixel unterschiedlich behandeln.
Zum Beispiel runden Webkit-Browser diese Pixel nach unten ab, und 10,4 Pixel werden auf 10 Pixel abgerundet. Je größer die Anzahl der Elemente in Ihrem Layout, desto häufiger treten Rundungsfehler auf. Unser 10-Elemente-Fehler zeigt sich also deutlich in Webkit-Browsern.

Solche Fehler sind unschön und wir können sie einfach nicht dulden.
Umgang mit Subpixel-Rundungsfehlern
Eine Methode ist, sicherzustellen, dass die Prozente keine Subpixel erzeugen. Aber
das ist keine gute Idee, weil Sie entweder mit einer nicht-responsiven Website oder einer, die zu verschiedenen Gitterbreiten springt, feststecken werden.
Es gibt eine weitere Methode, die ich die **Isolate Technique** nenne.
Diese Methode ist etwas fortgeschrittener und erfordert, dass Sie mehr über das Layout von Elementen mit der Isolate Technique wissen, die von Jamie Hill entwickelt wurde. Diese Technik wird seit langem in den bewährten Zen Grids verwendet. Wenn Sie mit Zen Grids vertraut sind, wissen Sie, wovon ich hier spreche.
Wenn nicht, untersuchen wir, wie diese Technik angewendet wird.
Die Isolate Technique
Die Prämisse der Isolate Technique ist, die kumulativen Effekte von Rundungsfehlern zu reduzieren, indem sie mit spezifischen Rändern genau dort positioniert werden, wo sie hingehören.
Die Anforderungen für die Verwendung dieser Technik sind:
- Jedes Element muss eine
margin-leftEigenschaft haben, um sich an der richtigen Position zu positionieren. - Jedes Element muss eine
margin-rightEigenschaft von -100% haben, um das nächste Element an den äußersten linken Rand des Containers zu ziehen.
Diese Technik kann ziemlich verwirrend sein, wenn Sie nicht mit negativen Rändern vertraut sind. Gehen wir eine vollständige Schritt-für-Schritt-Erklärung durch, wie sie funktioniert.
Nehmen wir an, Sie müssen ein 3-Spalten-Layout erstellen

Wir gehen die Positionierung jedes Elements nacheinander durch. Element 1 ist ziemlich einfach.
- Es hat einen
margin-leftvon 0, also sitzt es auf der Startlinie. - Dann zieht es das nächste Element (Element 2) mit einem
margin-rightvon -100% zurück zur Startlinie.

Element 2 wurde von Element 1 zur Startlinie gezogen, bevor seine eigenen CSS-Eigenschaften wirksam werden.

Element 2 positioniert sich dann mit einer margin-left Eigenschaft, die dem prozentualen Wert von 2 Spalten und 2 Lücken entspricht, und positioniert es genau in der dritten Spalte.

Element 2 hat auch eine margin-right Eigenschaft, die das nächste Element (Element 3) zur Startlinie zieht.

Element 3 wird von Element 2 zur Startlinie gezogen, bevor seine eigenen CSS-Eigenschaften wirksam werden.

Es wird dann durch seine margin-left Eigenschaft, die einen prozentualen Wert von 4 Spalten und 4 Lücken darstellt, auf der 5. Spalte positioniert.

Und es zieht das nächste Element zur Startlinie und das Muster wiederholt sich für die Gesamtzahl der Elemente.
Wenn ein Element in einer neuen Zeile beginnen muss, muss es den Float seines vorherigen Elements mit der Eigenschaft clear: left löschen.

Und um es mit der ersten Spalte (die auf der Startlinie positioniert ist) auszurichten, muss es seine margin-left-Eigenschaft zurück auf 0 ändern, um es dort zu platzieren.

So funktioniert die Isolate Technique. Jetzt, da Sie sie verstanden haben, können wir sie verwenden, um das Subpixel-Rundungsproblem zu lösen.
Lösung von Subpixel-Rundungsfehlern
Wir müssen jedes Element manuell mit der Isolate Technique positionieren, und Susy kann uns dabei helfen.
Susy verfügt über eine praktische Funktion, die Ihnen hilft, ALLE manuellen Arbeiten zu überspringen. Sie heißt gallery Mixin.
.social__list-item {
@include gallery(1 of 10);
}
Und die CSS, die sie ausgibt, verwendet die oben erwähnte Isolate Technique.
.social__list-item:nth-child(10n + 1) {
margin-left: 0;
margin-right: -100%;
clear: both;
margin-left: 0;
}
.social__list-item:nth-child(10n + 2) {
margin-left: 10.20408%;
margin-right: -100%;
clear: none;
}
.social__list-item:nth-child(10n + 3) {
margin-left: 20.40816%;
margin-right: -100%;
clear: none;
}
.social__list-item:nth-child(10n + 4) {
margin-left: 30.61224%;
margin-right: -100%;
clear: none;
}
.social__list-item:nth-child(10n + 5) {
margin-left: 40.81633%;
margin-right: -100%;
clear: none;
}
.social__list-item:nth-child(10n + 6) {
margin-left: 51.02041%;
margin-right: -100%;
clear: none;
}
.social__list-item:nth-child(10n + 7) {
margin-left: 61.22449%;
margin-right: -100%;
clear: none;
}
.social__list-item:nth-child(10n + 8) {
margin-left: 71.42857%;
margin-right: -100%;
clear: none;
}
.social__list-item:nth-child(10n + 9) {
margin-left: 81.63265%;
margin-right: -100%;
clear: none;
}
.social__list-item:nth-child(10n + 10) {
margin-left: 91.83673%;
margin-right: -100%;
clear: none;
}
Und der Social-Media-Bereich ist wieder normal!

Jetzt, da wir etwas Schwung aufgebaut haben, machen wir es eine Stufe höher und machen das Layout responsiv.
Das Layout responsiv machen
Responsive Websites sind immer wichtiger geworden, und ich würde Ihnen einen schlechten Dienst erweisen, wenn ich nicht darüber spreche, wie man responsive Layouts mit Susy erstellt.
Der allererste Schritt zur Erstellung responsiver Layouts besteht darin, sicherzustellen, dass Sie mit der Funktionsweise von Media Queries vertraut sind. Achten Sie besonders auf die Mobile-First Media Queries in diesem Artikel, da wir sie verwenden werden.
Der Einfachheit halber erstellen wir nur ein Layout mit zwei Breakpoints – eines für die mobile Ansicht, das von 0px bis 700px reicht; und ein weiteres für die Desktop-Ansicht, das ab 700px beginnt.
In der mobilen Ansicht nehmen sowohl die .content als auch die .sidebar Abschnitte jeweils 100% des Viewports ein. Nach 700px werden .content und .sidebar in 8 bzw. 4 Spalten aufgeteilt.
Wenn Sie es von Hand codieren, könnte es so aussehen (mit Sass)
.content {
/* Styles for mobile view go here */
/* Styles for desktop view go here */
@media (min-width: 700px) {
width: 66.10169%;
float: left;
margin-right: 1.69492%;
}
}
.sidebar {
/* Styles for mobile view go here */
/* Styles for desktop view go here */
@media (min-width: 700px) {
width: 32.20339%;
float: right;
margin-right: 0;
}
}
Sie müssen keine Stile für die mobile Ansicht erstellen, da <div> Blöcke standardmäßig 100% Breite einnehmen. Was Sie jedoch benötigen, ist sicherzustellen, dass das Desktop-Layout greift, sobald der Viewport 700px erreicht.
Das Codieren eines responsiven Layouts von Hand ist dasselbe wie das Codieren eines responsiven Layouts mit Susy, nur dass Susy die Dinge schneller macht. Sie verwenden exakt dieselbe Technik und Media Queries.
.content {
/* Styles for mobile view go here */
/* Styles for desktop view go here */
@media (min-width: 700px) {
@include span(8);
}
}
.sidebar {
/* Styles for mobile view go here */
/* Styles for desktop view go here */
@media (min-width: 700px) {
@include span(4 last);
}
}
Das war's also für .content und .sidebar.
Der nächste Teil ist der Social-Media-Abschnitt. So sieht er in der mobilen Ansicht aus.

Anstatt dass jedes Element 1 von 10 Spalten einnimmt, nimmt jedes Element jetzt 2 von 10 Spalten in der mobilen Ansicht ein, und das können Sie mit span(2 of 10) erreichen.
Hinweis: Sie fragen sich vielleicht, warum nicht 1 von 5 Spalten verwendet wird. Es gibt geringfügige Unterschiede zwischen span(1 of 5) und span(2 of 10), und ein Bild erklärt es am besten.

Dies sind grundlegend unterschiedliche Layouts aufgrund der Anzahl der beteiligten Lücken. Sie können immer die 1-von-5-Option verwenden, aber ich bleibe bei 10, da die Größe der Lücken dann viel näher an 12 liegt.
Wir rufen die gallery Mixin erneut auf und fügen unter jedem Element eine Lücke hinzu, um eine Trennung zwischen den Zeilen zu schaffen.
.social {
/* ... Same styles as above */
.social__list-item {
@include gallery(2 of 10);
margin-bottom: gutter(10);
}
@media (min-width: 700px) {
@include gallery(1 of 10);
margin-bottom: 0;
}
}
Hier ist ein Beispiel dafür, was wir bisher getan haben
Siehe Pen eidcj von Zell Liew (@zellwk) auf CodePen.
Mit Susy zu arbeiten ist genau wie mit reinem CSS zu arbeiten. **Der Hauptunterschied ist, dass Susy ein Mathe-Genie ist.**
Susy ist so gut in Mathe, dass es Ihnen ermöglicht, verrückte asymmetrische Grids zu erstellen, die Spalten unterschiedlicher Größe haben.
Versuchen wir, das Layout für CSS-Tricks mit einem asymmetrischen Grid zu erstellen.
Das Layout mit asymmetrischen Grids erstellen
Die Deklaration von Spalten ist beim Arbeiten mit asymmetrischen Grids etwas anders. Sie teilen Susy die Anzahl der Spalten und das Verhältnis ihrer Größen mit einer Sass-Liste mit. Da der Inhalt von CSS-Tricks doppelt so breit ist wie die Seitenleiste, können die Spalten durch eine Liste 2 1 dargestellt werden. Das bedeutet, es gibt zwei Spalten, von denen eine doppelt so breit ist wie die andere.
Sie müssen auch den Ausgabemodus in den globalen Susy-Einstellungen auf isolate setzen.
$susy : (
columns: 2 1,
output: isolate,
)
Anstatt zu sagen, dass Inhalt jetzt 8 Spalten hat, sagen wir, dass Inhalt 1 Spalte hat. Susy ist klug genug, um die Größe der Spalte zu kennen, wenn Sie ihr ihren Standort nennen. In diesem Fall ist Inhalt das erste Element.
.content {
@include span(1 first);
}
Ebenso müssen Sie Susy mitteilen, wie viele Spalten die Seitenleiste einnimmt und wo sie sich befindet. In diesem Fall nimmt die Seitenleiste die zweite Spalte ein, die zufällig auch das letzte Element in der Reihe ist.
.sidebar {
@include span(1 last);
}
So wird es aussehen

Es gibt noch viel mehr zu asymmetrischen Grids, und es würde einen ganz neuen Artikel erfordern, um zu zeigen, wie man sie mit Susy erstellt. Ich habe auf meinem Blog ein einfaches Design erstellt, das die Konzepte asymmetrischer Grids erklärt und das Folgende als Beispiel verwendet.

Darüber hinaus habe ich in Learning Susy umfassend über die Erstellung eines asymmetrischen Layouts geschrieben, mit einem realistischeren Beispiel, das auf Nathan Fords Design basiert. Möglicherweise möchten Sie das Buch erwerben, wenn Sie mehr darüber erfahren möchten.

Fazit
Nun, wir sind am Ende dieser Einführung in Susy angelangt, sowie bei einigen peripheren (aber wichtigen) Themen wie Subpixel-Rundungsfehlern. Ich hoffe, Sie sind zumindest ein wenig davon überzeugt, Susy auszuprobieren.
Tatsächlich gibt es viel mehr zu Susy, als ich hier abdecken konnte. Daher verweise ich Sie auf 5 Beispielkapitel meines Buches Learning Susy. Lesen Sie sie durch und Sie werden lernen, wie Sie Susy für so viel mehr verwenden können. Außerdem, wenn Sie Fragen zu Susy oder zur Front-End-Entwicklung im Allgemeinen haben, können Sie sich gerne mit mir in Verbindung setzen.
Ich liebe Susy wirklich.
Die Inkompatibilität mit libsass liebe ich nicht.
Scheint sehr langsam zu kompilieren. Ich habe ein ziemlich geradliniges Grid-System geschrieben, das etwa 10 Sekunden zum vollständigen Kompilieren benötigt.
Hoffentlich unterstützt libsass bald native Maps, denn Susy steht definitiv auf der Liste der Tools, die ich verwenden möchte.
Ja, es wird noch großartiger, wenn Libsass ins Spiel kommt. Ich warte auch noch darauf. Die Kompilierungszeiten sind bei mir mit Susy aber ziemlich schnell.
Das hätte mir toll geschienen, bis ich angefangen habe, Flexbox zu benutzen, was all diese Probleme verschwinden lässt, einschließlich der Notwendigkeit der Isolate Technique. Vermisse ich etwas?
Hängt von Ihren Kompatibilitätsanforderungen ab.
http://caniuse.com/#search=flexbox
Kurze Antwort: schlechte IE-Unterstützung und fragwürdig an anderen Stellen. Wenn Sie sich jedoch nicht darum kümmern, ist Flexbox ziemlich großartig.
Susy beschäftigt sich mehr mit traditionellen Webdesign-Prozessen, bei denen der Designer echte Spalten und Verhältnisse verwendet (anstatt des etwas flüssigeren Ansatzes von Flexbox).
Flexbox ist großartig, wenn Sie mit der begrenzten Unterstützung auskommen. Bis ich ohne Unterstützung für IE9 auskomme, ist Flexbox vom Tisch.
Flexbox ist großartig, aber es gibt ein Problem, von dem ich mich erinnere, dass ich es gelesen habe, aber den Link nicht finden kann.
Ich habe gelesen, dass Flexbox den Inhalt zuerst anzeigt, bevor er ihn verkleinert. In einem Fall, in dem eine Website etwas langsamer lädt, kann das Layout anfangs durcheinander sein, um sich dann plötzlich wieder zu ändern, wenn es fertig ist.
Ich bin mir nicht sicher, ob das nur beim alten Flexbox passiert, weitere Recherchen sind wahrscheinlich dafür notwendig. Ansonsten ist Flexbox auch großartig.
Und ich stimme Jonathan voll und ganz zu: Mit Flexbox ist es schwierig, das Spalten- und Lückenverhältnis zu handhaben, was Teil der traditionellen Webdesign-Prozesse ist, und das macht es mir schwer, es zu verwenden.
Kann Suzy ein Layout aus Spalten handhaben, die sich je nach Browserbreite fließend ändern? Stellen Sie sich zum Beispiel bei den Social-Icons eine Galerie von 100 davon vor, und sie begannen 10 pro Reihe und fielen stetig auf 9, 8, 7 ... bis zu vier bei niedrigen Auflösungen?
Müssten Sie für jede Änderung der Anzahl der Spalten pro Reihe manuell eine Media-Query-Breakpoint erstellen?
Dafür könnten Sie einfach feste Breiten für die Spalte in Susy festlegen. Ich denke, das wäre so etwas wie span(200px) oder was auch immer pro Spalte.
Ja, Sie können die Breiten der Social-Icons auf eine feste Breite von z. B. 200px einstellen, wie Jonathan erwähnt hat. In diesem Fall möchten Sie vielleicht auch den normalen Float anstelle der Isolate Technique verwenden.
Interessant.
Ich verwende normalerweise einfach Container mit einer festen Pixel- oder Prozentbreite mit Prozentangaben für das Grid, egal ob Bootstrap oder ein anderes Grid-System.
Das Grid befindet sich in seiner eigenen CSS-Datei. Dann werden benutzerdefinierte Elemente, die vom Grid abweichen, von Hand codiert. Im Allgemeinen finde ich das nicht zu mühsam. In den meisten Fällen muss ich nicht vom Grid abweichen.
Wenn das für Sie funktioniert, ist es cool :)
Ich ziehe es vor, die Grids heraus zu codieren, weil es dem Entwicklungsprozess viel mehr Flexibilität verleiht.
Ich sehe viele last-child und nth-child Selektoren in der Ausgabe, die von IE8 nicht unterstützt werden. Was verwenden reguläre Susy-Benutzer in diesem Szenario?
Ich benutze justified inline-blocks und die Susy span()-Funktion zur Steuerung der Breiten.
z. B.: width: span(3) im Gegensatz zu @include span(3).
Es gibt zwei Möglichkeiten, dies zu tun.
Option 1
Sie können die Einstellung für die Lückenposition auf entweder
before,insideodersplitändern.Wenn Sie zu
beforewechseln, müssen Sie stattdessen:first-childverwenden.Wenn Sie zu
splitoderinsidewechseln, müssen Sie weder:nth-childnoch:last-childverwenden.Mehr über Lückenpositionen finden Sie hier: http://www.zell-weekeat.com/susy-gutter-positions/
Option 2
Die zweite Option ist die Verwendung eines Polyfills für IE8. Sie müssen sowieso Media-Query-Polyfills hinzufügen, wenn Sie an einer responsiven Website arbeiten. Es ist nur eine Frage, das Selectivizr-Polyfill ebenfalls hinzuzufügen.
Und hier finden Sie mehr darüber: http://www.zell-weekeat.com/support-for-older-browsers/
Ich habe Susy noch nicht viel benutzt, daher scheint es, dass ich mir Lückenpositionen genauer ansehen muss, obwohl Mitchs Idee interessant klingt.
FWIW, Sie müssen keine Polyfills für Media-Query-Unterstützung für alte IE's erstellen: http://jakearchibald.github.io/sass-ie/ (das ist der Ansatz, den ich verwende).
Ah, ich meinte, Sie müssten Polyfills verwenden, wenn Sie auch IE8 responsiv machen wollen, aber das ist auch eine gute Methode, um mit IE8 umzugehen! :)
Ja, ich benutze die span()-Funktion ziemlich oft, wenn ich Susy benutze, und das hilft, wenn Sie einige einzigartige Layouts erstellen möchten, die mit den Standardausgaben von @include span() nicht so gut sind.
Normalerweise benutze ich jedoch nur die span()-Funktion, um eine Spaltenbreite zu erhalten, um Margin/Padding zu verschieben und zu ziehen.
Ich glaube, es gibt einen Tippfehler in der Sektion "Solving Subpixel Rounding Errors". Sollte es nicht
Ja, das stimmt. Danke, dass Sie das bemerkt haben!
Alle Dimensionen für die Ränder in den Bildern der Isolate Technique sind **-100** anstelle von **-100%**.
Toller Artikel! Susy scheint tatsächlich sehr gut zu sein. Haben Sie etwas dazu im Vergleich zu Bourbons Neat zu sagen?
Was meinen Sie mit "Alle Dimensionen für die Ränder in den Bildern der Isolate Technique sind -100 anstelle von -100%"?
Ich habe noch keine vollständige Diskussion über Neat vs. Susy verfasst, daran werde ich in ein paar Wochen arbeiten.
Ich benutze immer Bourbon mit Neat. Neat ist sehr gut dokumentiert und leicht anpassbar.
Wie funktioniert das in einer responsiven Umgebung? Müssen Sie bei jedem Breakpoint ermitteln, welches Element das letzte ist?
Außerdem frage ich mich nur, gibt es Gründe, warum Sie Float gegenüber Inline-Block bevorzugen?
Trotzdem ein schöner Schreibstil!
Danke Brendan! :)
Es gibt ein paar Möglichkeiten, mit Susy zu arbeiten. Bei der von mir gewählten Methode müssen Sie ermitteln, welches Element bei jedem Breakpoint das allerletzte ist. Bei anderen Methoden, wie z.B. mit einer Lückenposition von
insideodersplit, ist das nicht notwendig.Sehen Sie sich diese Seite für eine Einführung in andere Lückenpositionen an: http://www.zell-weekeat.com/susy-gutter-positions/
Ich habe mich für Float entschieden, weil es einfach einfacher ist. Inline-Block führt diese seltsamen kleinen Abstände an den Seiten und unten am Inhalt ein, und es ist ziemlich schwierig (meiner Meinung nach), es ohne Hacks wie
margin-right: -3pxperfekt zu machen. Ich persönlich würde keine Hacks in meinem CSS bevorzugen :)Tolle Präsentation von Susy!
Ich muss es in meinen eigenen Workflow integrieren.
PS. Bitte ändern Sie den Link im letzten Absatz – Learning Susy :)
Verstanden, ich werde Chris Bescheid geben :)
Wie läuft Ihr Workflow?
Ich weise nur darauf hin, dass diese CSS-Ausgabe durch Gruppierung der gemeinsamen Eigenschaften in der Klasse
.social__list-itemerheblich verbessert werden kann, wie folgt.Nur die
margin-leftändert sich.Abgesehen davon ein sehr interessanter Artikel.
Der Code ist leicht fehlerhaft. Sie müssen
clear:nonefür alle Elemente einstellen, die sich nicht ganz links befinden.Das reduziert den generierten Code und funktioniert hervorragend, wenn Sie sich nur um ein Layout kümmern müssen. Wenn sich Ihr Layout an verschiedenen Breakpoints ändert, sollten Sie sicherstellen, dass `clear: none` `clear:both` an jedem dieser Breakpoints überschreiben kann.
Das kann schwierig sein, da :nth-child dem CSS Spezifität hinzufügt. Und es erfordert mehr Aufwand, um sicherzustellen, dass der Code korrekt ist.
Es wäre großartig, wenn Sie gute Lösungen dafür hätten :)
Vielen Dank. Guter Artikel.
Das ist wirklich großartig, aber Foundation 5 bietet einige der gleichen Funktionen in Form von Block Grid.
Foundation 5 bietet ähnliche Funktionalitäten, die bei der Erstellung von Galerien helfen. Das gesamte Grid-System ist jedoch sehr, sehr anders.
Foundation verlässt sich stark auf HTML, wenn Breakpoints hinzugefügt werden, während Sie bei Susy beides tun können. Die Wahl liegt bei Ihnen.
Wenn Sie die SASS-Version verwenden, können Sie die Mixins `grid-row` und `grid-column` in Kombination mit Media Queries verwenden, um viele Dinge fein abzustimmen und sich nicht auf das HTML verlassen zu müssen.
Aber die Grids in Susy scheinen definitiv leistungsfähiger zu sein, insbesondere die Gutter-Positionen. Sie können ein Gutter in Foundation kollabieren, wodurch Abstände und Polsterungen entfernt werden, aber dann können andere Probleme auftreten. Es sieht so aus, als ob Susy dies unter anderem viel besser handhabt.
Fantastischer Artikel über Suzy... muss ich mir unbedingt genauer ansehen.
Guter Artikel. Ich habe Susy bereits benutzt und mag es bisher sehr. Das Einzige, was mir nicht gefällt, ist, dass der Code, den Susy ausgibt, weit von DRY entfernt ist. Jedes Mal, wenn Sie das `span()`-Mixin (oder natürlich jedes andere Mixin) verwenden, wird derselbe Code generiert (natürlich). Es wäre wirklich großartig, wenn Susy das "wissen" würde und stattdessen `extends` so oft wie möglich verwenden würde.
Obwohl ich kein Fan von Frameworks bin, finde ich, dass es von ihnen besser gehandhabt wird, weil einfache Klassen verwendet werden, was die Dinge viel DRYer hält. Der Nachteil ist natürlich, dass Sie ein Element mit "grid_4" nicht in "grid_2" in einer responsiven Website ändern können. Das ist ein großer Nachteil, finde ich.
Was denkst du darüber?
Entschuldigung, dass ich so lange gebraucht habe, um darauf zu antworten!
Ja, ich stimme zu, dass Susy potenziell viel DRYer sein könnte, und es gibt wahrscheinlich viele Möglichkeiten, dies zu tun. Vielleicht sollten wir uns den Code ansehen und eine Verbesserung einreichen :)
Es ist jedoch wirklich ziemlich schwierig, sich alle möglichen `@extend`-Szenarien vorzustellen.
Der Nachteil ist für mich ein Dealbreaker. Allein die Vorstellung, all diese Klassen in HTML einzufügen und sie später zu ändern, lässt mich erschaudern! Außerdem bin ich der Meinung, dass sich das Layout beim Prototyping wahrscheinlich erheblich ändern wird, und Susy macht die Dinge einfach.
Ich denke, Susy hat einen echten Nachteil. Sie müssen CSS wirklich kennen, um es gut nutzen zu können. Und das wird für viele andere Leute ein Dealbreaker sein.
Was denkst du?
Ob DRY oder nicht, ist eher eine Frage der Präferenz und wie Sie Ihre eigene Arbeit erledigen. Wenn Sie also ein grundlegendes Layout haben, das nicht viele verschiedene Layouts aufweist, sind Sie ohnehin ziemlich DRY, aber wichtiger ist, dass Ihre Stylesheets nicht mit ungenutzten Regeln übersät sind.
Frameworks haben naturgemäß eine riesige Menge an (im Allgemeinen, Bootstrap und Foundation) ungenutzten Grid-Klassen.
Was das Nicht-Ändern eines Elements auf einer responsiven Seite betrifft, liegen Sie leicht daneben. Bootstrap beispielsweise verwendet 4 mögliche Kombinationen aus Bildschirmgröße/Layout für einen Block. `col-lg-*`, `col-md-*` und so weiter, was es Ihnen ermöglicht, von x Spalten zu beliebig vielen Spalten an jedem gewünschten Breakpoint zu wechseln.
Ich werde Susy auf jeden Fall ausprobieren. Ich bevorzuge es bei weitem, einen `.blog-article` zu codieren, anstatt `.col-lg*` und so weiter. Das macht Ihr Sass viel klarer zu verwenden und gibt Ihnen die absolute Kontrolle, im Gegensatz zur Wahrnehmung eines anderen.
Ist es möglich, Susy und Bootstrap 3 in Sass zu mischen? Verursacht das Probleme?
Ja, Paul,
es ist möglich, Susy und Bootstrap zusammen zu verwenden. Ich habe es nicht im Detail untersucht, aber soweit ich weiß, sollte es keine großen Probleme geben.
Interessante Sache in der Tat, aber wie Christian Krammer sagte, ist es nicht sehr DRY. Aber wenn man über ein System nachdenkt, wie viele Deklarationen brauchen wir wirklich? Soweit ich sehe, können Sie einfach ein paar Klassen für Artikel, Galerien, Header, Footer, globales Layout usw. erstellen und diese dann in Ihrem gesamten Projekt (wieder)verwenden.
Offen gesagt, wenn es um DRY im Vergleich zur Möglichkeit geht, einen entscheidenden Teil des Designs während der Entwicklung zu ändern, wähle ich immer Letzteres. Es ist wie das Problem, das ich jetzt in meinem Hauptjob habe – wir hatten ein Feld mit sechs Blöcken, aber jetzt hat der Designer entschieden, dass wir sieben Blöcke brauchen. Und da wir Bootstrap verwenden, haben wir ein Problem. Wenn man sich Susy ansieht, wäre das eine Frage der Änderung einer Zeile.
Hahaha, ich verstehe dich total!
Es macht mir nichts aus, dass Susy nicht super DRY ist. Die Anzahl der Codezeilen, die Susy für möglicherweise alle Ihre Layouts generiert, wird wahrscheinlich im Vergleich zur Anzahl der Codezeilen für den Rest des CSS ohnehin blass aussehen.
Vielen Dank für diesen Beitrag! Ich halte Ausschau nach mehr über Susy auf deinem Blog!
In meinen letzten Apps habe ich eine Technik angewendet, die auf
(http://http://webdesign.tutsplus.com/tutorials/a-simple-mixin-alternative-to-standard-css-grids–webdesign-16958 "weniger Mixins")
basiert, wie bereits erwähnt, ist die DRY-Methode bei einer einzelnen Seite wie Ihrem Beispiel sehr gut, aber auf einer Website mit vielen Seiten mit unterschiedlicher Spaltenanzahl können Sie
#define viele Klassen in einer einzigen Datei;
oder Sie können eine Stil-Datei oder jede Seite haben
was denken Sie darüber?
Grüße
Ich glaube, Sie sollten die Anzahl der verschiedenen Layouts auf ein Minimum beschränken, egal welche Website Sie erstellen möchten. Je größer die Anzahl verschiedener Layoutmuster, desto größer ist die Wahrscheinlichkeit, dass Ihr Website-Design inkongruent wird. Wenn Sie dieselben Layouts verwenden, gibt es eigentlich kein Problem.
Ich würde definitiv eine Stil-Datei für alles verwenden.
Hallo,
Veröffentlichen Sie diesen Kommentar nicht; ich glaube nur, Sie haben einige Prozentzeichen im Code vergessen, den Sie veröffentlicht haben, bei diesem Selektor: `.social__list-item`
Trotzdem ein schöner Artikel.
Danke dafür. Ich bin ganz am Anfang meines Webentwicklungsstudiums... Ich habe noch viel zu lernen. Gibt es Code, um alle Bilder in Squarespace-Blog-Posts automatisch auf eine maximale Höhe/Breite zu skalieren?
Ich habe Squarespace noch nie benutzt, aber ich glaube, Sie suchen so etwas wie das hier.
img {
max-width: 100%;
height: auto;
}
Probieren Sie es aus und lassen Sie mich wissen, ob es funktioniert.
Ich glaube, es gibt einen Tippfehler direkt über dem Abschnitt „Hier ist ein Beispiel dessen, was wir bisher getan haben“. Die geschweifte Klammer von `.social__list-item` wird zu früh geschlossen. Im endgültigen Code ist es jedoch korrekt.
Ich glaube, es gibt zu viele Variationen und Technologien und es ist soweit, dass es das Wasser nur trübt... nichts wirklich verbessert... und da niemand alle kennen kann... werden wir bald auf ein Wiederholungsszenario stoßen... wo Leute einfach ihr eigenes Ding gemacht haben, weil sie es nicht besser wussten... aber dieses Mal werden wir die Vergangenheit gesehen und uns geweigert haben, daraus zu lernen, und dieses Mal werden wir Hunderte von verschiedenen Möglichkeiten haben, eine Seite (App) zu produzieren, und ein Designer, dem der Code übergeben wurde und der AUFGESCHRIEBEN wurde, DIES ZU FIXEN oder DAS ZU VERBESSERN... und das Einzige, was er tun wird, ist sich den Kopf zu kratzen, einfach weil er ein Mensch ist...
Susy, Neat und Singularity (das weit besser war, bevor Susy 2 herauskam) ähneln sich in ihrem Ansatz zur Handhabung von Flexibilität für Grids.
Ich habe jetzt darüber nachgedacht, zu Susy zu wechseln, bin aber immer noch sehr zufrieden mit Singularity (gekoppelt mit Breakpoint). Ich denke, es ist in seiner Ausgabe sogar DRYer als Susy.
Auf jeden Fall: Tolle Einblicke in Susy, danke!
Ich wusste nie von Susy und habe es nie benutzt. Aber ich denke, es ist einfacher für Sie zu verwenden als andere. Danke, dass Sie es geteilt haben.
Ich mag diesen Artikel, den Sie schreiben! Danke.
Ich kann Susy auf Windows 8 nicht verwenden. Ich habe Ruby und Susy installiert, aber es funktioniert nicht? Weiß jemand warum? Wie behebt man das?
Mein Fehler
"Fehler: Datei zum Importieren nicht gefunden oder nicht lesbar: susy.
Load paths
.."
Haben Sie sich Scout angesehen? Es ist ein Tool ähnlich wie winLess, aber für SCSS: Sie starten es, und es überwacht alle SCSS-Dateien in einem ausgewählten Ordner und kompiliert sie beim Speichern, also kein Ruby, Gem und so weiter.
Oder Sie können den Bracket-Editor verwenden, wo Sie ein Plugin zur Kompilierung von LESS- und/oder SCSS-Dateien installieren können.
Grüße
Was sind Ihre Meinungen zu Profound Grid im Vergleich zu Susy? Dies war ein sehr interessanter Artikel und ich kann mich immer noch nicht entscheiden, ob ich Susy oder Profound verwenden soll.
http://www.profoundgrid.com/
Profound Grid sieht interessant aus! Ich habe es mir noch nicht sehr genau angesehen, daher könnten meine Argumente etwas voreingenommen sein.
Ich denke, Susy ist flexibler und kann in mehr Situationen eingesetzt werden. Natürlich ist es auch etwas komplexer, wenn man alles lernen möchte :)
.wrap {
max-width: 1120px;
margin-left: auto;
margin-right: auto;
}
.wrap:after {
content: " ";
display: block;
clear: both;
}
Jede Hilfe wird geschätzt.
Wow, mir ist gerade aufgefallen, dass ich vergessen habe, das `container()`-Mixin in den Beitrag aufzunehmen.
Sie müssen diese zusätzliche Zeile schreiben
Hallo Zell,
Ich habe auch eine Fehlermeldung wegen eines fehlenden Mixins erhalten, @cf
traten wegen der Zeile auf
/* Hinzufügen eines Clearfix, da alle Kindelemente gefloatet sind */
@include cf;
Ich habe das Folgende zu meinem Code hinzugefügt (aber ich weiß, dass es verschiedene Clearfix-Methoden gibt) – ist das angemessen?
@mixin cf {
&:after {
content: “”;
display: table;
clear: both;
}
}
Oh Mist, ich kann nicht glauben, dass ich so nachlässig damit umgehe.
Ja, Sie haben absolut Recht. Es ist ein Standard-Clearfix-Mixin. Danke, dass Sie das bemerkt haben!
Danke, Zell!