-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Rework Sass-Styleguide #2
Conversation
@ChristianPeters Ich habe das ganze ein wenig angepasst und erweitert. Magst du schon mal drüber schauen und mir Feedback geben bzw. sagen, was dir noch fehlt? |
sass-style-guide.md
Outdated
3. *Top-to-bottom*: You go on top-to-bottom just how you would read that page | ||
* Some things are shared, like a variable definition that is referred in multiple parts of your stylesheet. Just put it on top of the first block that uses it. A situation that you should avoid is sharing variables across files. If you cannot avoid that, put it on top of the file. | ||
* Nestings within the namespace of an element start with pseudo classes, followed by pseudo elements, followed by modifiers, followed by direct children (`>`), followed by children further down the DOM tree (if even necessary). Example: | ||
Bei der Arbeit an großen, langlebigen Projekten mit mehreren Entwicklern unterschiedlicher Fähigkeiten ist es wichtig, dass wir alle einheitlich arbeiten. Unsere oberste Prämisse sollte sein, dass unsere Stylesheets auf der einen Seite leicht pflegbar und skalierbar sind und auf der anderen Seite unser Code aber transparent und lesbar bleibt. Um dies zu erfüllen, helfen folgende Empfehlungen. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
-
Bei "unterschiedlicher Fähigkeiten" könnte man sich angegriffen fühlen: "Oh, meint er mich damit, bin ich ihm nicht gut genug? "
-
warum "aber transparent und lesbar"?
-
Empfehlungen? Wenn du das so sagst, ist es auch in Ordnung es anders zu machen. "Guidelines"?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ChristianPeters Ich wollte ein deutsches Wort für Guidelines nehmen und da klang Empfehlungen freundlicher als Handlungsanweisungen. Was hältst du von Richtlinien oder Vorgaben?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Wir nutzen in unserem Sprachgebrauch doch auch das englische Wort "Guidelines". Richtlinien wäre die beste Übersetzung, aber das ist weniger positiv konnotiert.
|
||
Wann wird wo was definiert? Wir gehen inhaltsgetrieben vor, d.h. wir schreiben unseren Sass-Code in der Reihenfolge, wie die Elemente auf der gerenderten Seite erscheinen werden: | ||
|
||
1. **von außen nach innen**: ZASAF folgend beginnt man in der Regel mit dem Page-Wrapper-Element. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Was für ein Page-Wrapper-Element? Das kommt doch noch aus meinem alten System, darüber hat in diesen Guidelines ja noch niemand etwas gesagt.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ChristianPeters Es gibt in der Regel immer ein Page-Wrapper-Element, in das die Komponenten gepackt werden. Bei mir ist das .page
.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Aber das steht ja nur in einer gesonderten Page-Komponente und es trifft nicht mehr auf spezifische Komponenten zu. Aber okay, man versteht das Prinzip.
sass-style-guide.md
Outdated
&.highlight | ||
bacground-color: $color-background-loud | ||
|
||
.main-navigation--item |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Wie jetzt, ein zweiter Block zu
.main-navigation--item
?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Copy/Paste-Fehler :/
sass-style-guide.md
Outdated
border-color: $color-border-loud | ||
&::before | ||
content: '*' | ||
&.highlight |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Das ist doch ein Modifier, oder? Dann sollte er
.highlighted
heißen.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Good catch!
sass-style-guide.md
Outdated
.main-navigation--item | ||
display: block | ||
padding: 5px 0 | ||
.highlight > & |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Was ist
.highlight
? Es klingt inhaltlich wie ein Modifier und sollte dann nicht allene stehen.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ChristianPeters Ja, .highlighted
ist ein Modifier. Aber warum darf er nicht alleine stehen?
Variante 1:
.main-navigation--item
&.highlighted
bacground-color: $color-background-loud
.main-navigation--link
.highlighted > &
color: $color-text-inverted
vs.
Variante 2:
.main-navigation--item
&.highlighted
bacground-color: $color-background-loud
.main-navigation--link
.main-navigation--item.highlighted > &
color: $color-text-inverted
vs.
Variante 3:
.main-navigation--item
&.highlighted
bacground-color: $color-background-loud
.main-navigation--link
color: $color-text-inverted
.main-navigation--link
…
Bei Variante 3 steht die Eigenschaft nicht beim Link, wo sie meines Erachtens hingehört. Daher ist das die schlechteste Vorgehensweise. Bei Variante 2 überqualifiziere ich den Selektor, den ich später im CSS nicht brauche. Daher bin ich für Variante 1.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Das ist eine Grundregel von Modifiern, s. https://github.com/zweitag/html-css-guidelines/blob/master/README.md#modifier:
steht nie alleine, sondern ist nur in Verbindung mit der Komponente eindeutig
Ein Modifier an sich ist eben nicht eindeutig. Es können viele Dinge .highlighted
sein. Nun ist die .main-navigation
immer sehr hoch in der Seitenhierarchie angesiedelt. Aber nimm eine beliebige Liste, die gehighlightete Einträge enthalten kann, die wiederum Inhalt enthalten kann, der gehighlighted sein kann:
%ul.articles-list
%li.articles-list--item.highlighted
%h3 Hitlers geheimes Silberbesteck gefunden
%ul.tag-cloud
%li.tag-cloud--item.highlighted
%a.tag-cloud--link Hitler
%li.tag-cloud--item
%a.tag-cloud--link Sommerflautenunfug
%li.articles-list--item.highlighted
%h3 Große Dürre: Werden wir alle sterben?
%ul.tag-cloud
%li.tag-cloud--item
%a.tag-cloud--link Wetter
%li.tag-cloud--item
%a.tag-cloud--link Sommerflautenunfug
Wenn du jetzt schreibst…:
.tag-cloud--link
&.highlighted
background-color: yellow
… dann sind in obigem Beispiel alle Tag-Cloud-Links gelb hinterlegt, obwohl es nur der mit "Hitler" sein sollte.
Daher die Regel: Modifier dürfen nie alleine stehen. Alternativ müsste man es m.M.n. so machen wie BEM und %a.tag-cloud--link.tag-cloud--link__highlighted
schreiben oder sowas.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Variante 2 ist für mich die richtige, da der Selektor demnach nicht überqualifiziert ist. Zu Variante 3 gebe ich dir Recht, finde ich auch ungünstiger.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Die Grundregel
steht nie alleine, sondern ist nur in Verbindung mit der Komponente eindeutig
habe ich eher so verstanden, dass ich folgendes nicht machen darf:
.highlighted
background-color: yellow
In meinem Beispiel steht .highlighted
demnach auch nicht alleine, sondern bezieht das Nachfahrenelement mit ein. Apropos, Ich nehme an, in deinem obigen Sass-Beispiel meinst du eigentlich:
.tag-cloud--link
.highlighted &
background-color: yellow
In dem Fall versteh ich deinen Einwand, das wäre Mist. Wenn du dir mein Beispiel oben aber nochmal näher anschaust, dann habe ich ein >
benutzt, was das Problem löst.
Ich finde übrigens auch, dass
.tag-cloud--link
.tag-cloud--item.highlighted &
background-color: yellow
schwerer zu lesen ist. Der Modifier, auf den es mir letztendlich ankommt, geht unter.
Und ja, an dieser Stelle wünscht man sich BEM. Hier würde der hervorgehobene Link eindeutig mittels tag-cloud__link--highlighted
selektiert werden können. Ach, wie war das nochmal mit CSS Modules? ;)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay, >
löst genau dieses Problem hier technisch. Aber wie einfach ist das mal zu übersehen oder zu vergessen? Auch wenn es dir nicht passieren würde, es ist schon subtil und wenn man sich der Tragweite nicht bewusst es, kommt der Autor nicht drauf es zu schreiben und ein Reviewer übersieht es vielleicht beim Durchgucken.
Und was machst du, wenn da mehrere Elemente noch dazwischenstehen?
Hier bin ich der Meinung, dass du hier zu sehr für diesen Fall optimierst zu einem hohen Preis. Einfache Regeln sind sehr wertvoll. "darf nie" ist sehr viel einfacher als "soll nicht, es sei denn …".
Wenn du schon zustimmst, dass man sich an dieser Stelle BEM wünscht, dann spricht das doch auch für die explizitere Variante 2?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Auch wenn ich aufgrund von Lesbarkeit und weniger CSS-Code immer noch meine Variante bevorzuge, so ist das Argument mit den Elementen dazwischen kein so schlechtes wenn ich ehrlich bin. Ich könnte jetzt zwar ausholen und sagen, dann muss man eben die Architektur umstricken, aber das führt zu weit. Ich will endlich fertig werden hier. Daher können wir es gern zu handhaben. Ich würde den PR #3 gleich mergen.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Es geht mir vor allem darum, das System nicht zu kompliziert zu machen. Je ausgefeilter das Regelwerk desto unwahrscheinlicher ist eine 100%-Einhaltung durch alle Anwender.
Wenn in einer Diskussion eine Tradeoff-Entscheidung zwischen mehreren Varianten getroffen werden muss (Explizierung dessen was gemeint ist vs. dadurch entstehendes visuelles Rauschen), und die unterschiedlichen Positionen aus einer anderen Gewichtung der Präferenzen entsteht, find ich es gut, wenn im Zweifel die einfachere Lösung gewinnt.
Und hier würde ich sagen: "Bei Modifier immer Selektor von der modifizierten Komponente davor" ist einfacher als wenn man darauf achten muss, Kindselektoren einsetzbar zu machen.
sass-style-guide.md
Outdated
|
||
It’s the typographic standard to use number keywords. Also it’s shorter and saves some bits. | ||
Die Zahlen 100, 200 … 900 sind typografischer Standard. Außerdem sind sie kürzer und sparen ein paar Bits ein. ;) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Das 1 Zeichen ist lächerlich. An anderer Stelle erlauben wir uns viel inperformantere Praktiken, die auch nicht Erwähnung finden. Triftiger ist doch das Argument, dass man mit der Zahlen-Darstellung besser differenzieren kann und auch nicht mal "bold" und mal "600" schreiben möchte.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK.
sass-style-guide.md
Outdated
|
||
We want to make it easy for others to find their way through stylesheets. Therefore, we group rules and give them a title by writing a comment. We distinguish 3 types of comments: | ||
Zum Testen unseres Sass-Codes benutzen wir [Sass Lint](https://github.com/sasstools/sass-lint). Der Linter sollte am Ende keine Fehler oder Warnungen ausspucken. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Ende = Projektende = Projekt wird übergeben oder eingestampft und dann ist es uns eh egal? :) Hier sind genauere Richtlinien von Nöten, wann der Linter ohne Fehler und wann ohne Warnungen durchzulaufen hat plus Best Practices
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ChristianPeters Hierüber hatten wir ja schon gesprochen, Stichwort Commit-Hook/CI-Test. Ich kann den letzten Satz auch erstmal streichen, wenn du dich so sehr daran störst. Bez. der Richtlinie könnte man natürlich einfach sagen, dass es zu keinem Zeitpunkt Fehler oder Warnungen geben darf (wobei mich mich gerade frage, wozu dann überhaupt Warnungen!?).
sass-style-guide.md
Outdated
//============= | ||
Möchte man eine einzelne Zeile in einem Block kommentieren, so setzt man den Kommentar ans Ende der Deklaration: | ||
|
||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Syntax-Highlighting fehlt
sass-style-guide.md
Outdated
|
||
.photo-gallery | ||
… | ||
``` |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Syntax-Highlighting fehlt
sass-style-guide.md
Outdated
|
||
// Video Styles | ||
//============= | ||
## Editorconfig |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Typo: EditorConfig
…pic 'selector rules'
@ChristianPeters Ich bin mit dem ersten Einarbeiten deines Feedbacks durch, habe hier und da aber noch Rückfragen bzw. Disksussionsbedarf. ;) |
sass-style-guide.md
Outdated
&::before | ||
content: '*' | ||
&.highlighted | ||
bacground-color: $color-background-loud |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Typo
sass-style-guide.md
Outdated
.main-navigation--item | ||
display: block | ||
padding: 5px 0 | ||
.highlight > & |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Okay, >
löst genau dieses Problem hier technisch. Aber wie einfach ist das mal zu übersehen oder zu vergessen? Auch wenn es dir nicht passieren würde, es ist schon subtil und wenn man sich der Tragweite nicht bewusst es, kommt der Autor nicht drauf es zu schreiben und ein Reviewer übersieht es vielleicht beim Durchgucken.
Und was machst du, wenn da mehrere Elemente noch dazwischenstehen?
Hier bin ich der Meinung, dass du hier zu sehr für diesen Fall optimierst zu einem hohen Preis. Einfache Regeln sind sehr wertvoll. "darf nie" ist sehr viel einfacher als "soll nicht, es sei denn …".
Wenn du schon zustimmst, dass man sich an dieser Stelle BEM wünscht, dann spricht das doch auch für die explizitere Variante 2?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Es sind noch 2 Themen und 2 kleine To-Dos offen:
Themen:
- Modifier dürfen nie alleine stehen – oder manchmal doch?
- Linter: Verwendungsregel und -hilfe (Config)
Offene To-Dos:
- "Guidelines" statt "Empfehlungen"
- Typo (s.o.)
Das würde ich im Sass Linting PR im anderen Repo gern abhandeln. Dort ist ja auch noch ein Kommentar von dir offen, den ich angehen muss. Wenn das für dich OK ist, kannst du den hier gern mergen. |
sass-style-guide.md
Outdated
.main-navigation--link | ||
display: block | ||
padding: 5px 0 | ||
.highlighted > & |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Änderst du das dann bitte noch?
sass-style-guide.md
Outdated
//-------------------- | ||
.photo-contest-panel | ||
… | ||
Zum Testen unseres Sass-Codes benutzen wir [Sass Lint](https://github.com/sasstools/sass-lint). Der Linter sollte am Ende keine Fehler oder Warnungen ausspucken. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
- Nach wie vor ist noch undefiniert, wann gelintet werden soll. Das steht auch im Rails Template PR nicht. Wann machst du das denn? Hast du einen Pre-Commit-Hook? Gibt's nen Tool, um es als PR-Check hinzuzufügen?
- Hier fehlt dann auch noch der Link zur Config
Derzeit linte ich meine Sass-Dateien automatisch in Sublime Text, damit sie noch vor dem Comitten korrekt ins Repo wandern. Man könnte auch überlegen, ob man Travis das testen lässt. Was ist da deine Präferenz? |
Ich glaube, man braucht beides: sowohl eine lokale Lösung, zumindest für Frontendler, damit die Fehler frühestmöglich erkannt werden als auch einen PR-Check, um sicherzugehen, dass keine Violations in Master kommen. PR-Check könnte Travis CI sein oder ein extra Dienst, der die Violations z.B. als Kommentare an entsprechende Code-Zeilen schreibt. Ich glaube, das ist im Endeffekt praktischer als ein failender Travis-Build. Kostet mit ca. 10$/Repo aber auch ordentlich. Primärer Anbieter wäre https://houndci.com/, nicht wirklich günstigere Alternative https://sideci.com/ und dann noch das "Ungetüm" CodeClimate. @hzeus @stsc3000 Wie weit seid ihr damit bei Ruby? @rastersysteme Willst du vielleicht mal bei DZF die TravisCI-Konfig ausprobieren? Vielleicht kommen wir ja auch damit aus. |
Wir haben bei Ruby noch keine eine automatisierte PR-Lösung geplant, das läuft im Moment noch auf freiwilliger Basis auf den Entwickler-Rechnern. Wenn ihr für sass eine Lösung sucht, wäre es natürlich sinnvoll, wenn die direkt beides kann. |
Mein Vorschlag wäre auch Hound CI. So hätte man auch eine Lösung für Rubocop. |
In Absprache mit @rastersysteme
Okay, kann jetzt gemergt werden.
Ich lege dafür mal Issues an. |
No description provided.