Was ist der Unterschied zwischen Normalize.css und Reset CSS?

565

Ich weiß, was CSS Reset ist, aber kürzlich habe ich von dieser neuen Sache namens Normalize.css gehört

Was ist der Unterschied zwischen Normalize.css und Reset CSS ?

Was ist der Unterschied zwischen dem Normalisieren von CSS und dem Zurücksetzen von CSS?

Ist es nur ein neues Schlagwort für das Zurücksetzen von CSS?

Jitendra Vyas
quelle

Antworten:

800

Ich arbeite an normalize.css.

Die Hauptunterschiede sind:

  1. Normalize.css behält nützliche Standardeinstellungen bei, anstatt alles zu "unstyling". Zum Beispiel funktionieren Elemente wie supoder sub"funktionieren einfach" nach dem Einfügen von "normalize.css" (und werden tatsächlich robuster), während sie nach dem Einfügen von "reset.css" visuell nicht von normalem Text zu unterscheiden sind. Normalize.css legt Ihnen also keinen visuellen Ausgangspunkt (Homogenität) auf. Dies ist möglicherweise nicht jedermanns Geschmack. Am besten experimentieren Sie mit beiden und sehen, welche Gele Ihren Vorlieben entsprechen.

  2. Normalize.css korrigiert einige häufige Fehler, die für reset.css nicht möglich sind. Es hat einen größeren Umfang als reset.css und bietet auch Fehlerbehebungen für häufig auftretende Probleme wie: Anzeigeeinstellungen für HTML5-Elemente, fehlende fontVererbung durch Formularelemente, Korrektur des font-sizeRenderns für pre, SVG-Überlauf in IE9 und buttonStyling-Fehler in iOS.

  3. Normalize.css überfrachtet Ihre Entwicklungswerkzeuge nicht. Eine häufige Irritation bei der Verwendung von reset.css ist die große Vererbungskette, die in den CSS-Debugging-Tools des Browsers angezeigt wird. Dies ist bei normalize.css aufgrund der gezielten Stile kein solches Problem.

  4. Normalize.css ist modularer. Das Projekt ist in relativ unabhängige Abschnitte unterteilt, sodass Sie möglicherweise Abschnitte (wie die Formularnormalisierungen) leicht entfernen können, wenn Sie wissen, dass sie von Ihrer Website niemals benötigt werden.

  5. Normalize.css hat eine bessere Dokumentation. Der normalize.css-Code wird sowohl inline als auch umfassender im GitHub-Wiki dokumentiert . Auf diese Weise können Sie herausfinden, was jede Codezeile tut, warum sie enthalten war, welche Unterschiede zwischen den Browsern bestehen, und Ihre eigenen Tests einfacher ausführen. Das Projekt soll dazu beitragen, die Benutzer darüber zu informieren, wie Browser standardmäßig Elemente rendern, und es ihnen erleichtern, an der Einreichung von Verbesserungen beteiligt zu sein.

Ich habe darüber in einem Artikel über normalize.css ausführlicher geschrieben

Necolas
quelle
19
Sehr oft belassen Sie sie nicht bei Null (wenn Sie Reset verwenden), sodass Sie tatsächlich weniger Code schreiben. Wenn Sie einige Werte auf Null setzen möchten, ist dieser Stil an das Element gekoppelt, für das er bestimmt ist, und sollte das Debuggen erleichtern.
Necolas
8
Und DAS ist ein erhebliches Problem bei vielen Zurücksetzungen, einschließlich der Tatsache, dass das Nullstellen alles den Browser verlangsamt.
Rob
4
Und DAS ist auch der Vorteil von Resets - normalisieren Sie fehlende Größenprobleme wie diese: github.com/yahoo/pure/issues/395
Daniel Sokolowski
4
Verpasse ich den Punkt, an dem ich denke, dass Sie normalerweise nicht möchten, dass Polsterung und Rand Null sind, aber nein, Sie möchten auch nicht die Standardeinstellung?
Guioconnor
9
Persönlich habe ich Normalize verlassen, obwohl ich es immer noch benutze. Viele der Punkte hier sind wirklich übertrieben (bessere Dokumentation ...?). Normalisieren ist eine Meinung, daher wird Ihnen ein visueller Ausgangspunkt auferlegt (trotz der Aussagen in dieser Antwort). Es kann auch veraltet sein. Reset.css kann niemals veraltet sein, nachdem Sie es verwendet haben. Und es ist wahrscheinlicher, dass Ränder und Auffüllungen 0 sind als jede andere Zahl, die Sie sich vorstellen können. Daher ist es hilfreich, wenn Sie bei der Entwicklung alles zurücksetzen. Normalisieren ist jedoch gut für Browserprobleme, und das ist der Hauptgrund, warum ich es benutze.
Chuck Le Butt
255

Der Hauptunterschied ist, dass:

  • CSS-Resets zielen darauf ab , alle integrierten Browser- Stile zu entfernen . Standardelemente wie H1-6, p, strong, em usw. sehen sich am Ende genau gleich und haben überhaupt keine Dekoration. Sie sollten dann alle Dekoration selbst hinzufügen .

  • CSS normalisieren zielt darauf ab, das integrierte Browser-Styling für alle Browser einheitlich zu gestalten . Elemente wie H1-6 werden in allen Browsern auf konsistente Weise fett, größer usw. angezeigt. Sie sollten dann nur den Unterschied in der Dekoration hinzufügen, den Ihr Design benötigt.

Wenn Ihr Design a) allgemeinen Konventionen für Typografie usw. folgt und b) Normalize.css für Ihre Zielgruppe funktioniert, wird durch die Verwendung von Normalize.CSS anstelle eines CSS-Resets Ihr eigenes CSS kleiner und schneller zu schreiben.

Jesper M.
quelle
6
@Jitendra Vyas: - Es gibt wirklich nur einen Weg: Lesen Sie den gut kommentierten Normalize.CSS-Code und entscheiden Sie, ob er Ihren Anforderungen entspricht oder nicht. github.com/necolas/normalize.css/blob/master/normalize.css
Jesper M
Ein weiterer Hinweis: Normalize.css soll so unauffällig wie möglich sein, sodass Entwickler ihren Code einfacher schreiben können, ohne Spezifitätskonflikte bekämpfen zu müssen.
zzzzBov
Nehmen wir also an, ich möchte Reset bei der Entwicklung verwenden. Und wenn ich fertig bin, möchte ich normalize.css oder ein JS, das alle Dinge übernimmt, die ich nicht geändert habe und die im Browser gleich sind. Oder ich habe mich geändert und nach dem Ändern sind sie die gleichen wie im Browser geworden und entfernen sie für die Client-Seite. Ein Zurücksetzen würde also helfen, während dieses 'Programm' auf einer schnelleren Clientseite entwickelt wird. Beide glücklich. Und eine viel intelligentere Art zu leben.
Muhammad Umer
In der Praxis werden Sie ohnehin alle Normalize-Stile überschreiben. Die Theorie ist großartig, aber in dieser OOCSS-Welt funktioniert sie in der Praxis nie so.
Chuck Le Butt
40

Normalize.css besteht hauptsächlich aus einer Reihe von Stilen, die auf dem basieren, was der Autor für gut gehalten hat, und die Browserübergreifend konsistent erscheinen lassen. Durch das Zurücksetzen wird das Styling von den Elementen entfernt, sodass Sie mehr Kontrolle über das Styling von allem haben.

Ich benutze beide.

Einige Stile von Reset, andere von Normalize.css. In Normalize.css gibt es beispielsweise einen Stil, mit dem sichergestellt wird, dass alle Eingabeelemente dieselbe Schriftart haben, die nicht vorkommt (zwischen Texteingaben und Textbereichen). Das Zurücksetzen hat keinen solchen Stil, daher haben Eingaben unterschiedliche Schriftarten, was normalerweise nicht erwünscht ist.

Grundsätzlich macht die Verwendung der beiden CSS-Dateien einen besseren Job, um alles auszugleichen;)

Grüße!

Ricmetalster
quelle
1
Dies ist eine gute, pragmatische Antwort. Es ist nicht unbedingt das eine oder andere. Nimm was du willst von jedem. Ich mag einen vollständigen Reset, aber Normalizer bietet einige nette Kleinigkeiten, die oben gut funktionieren.
Undistraction
3
@ricmetalster, mussten Sie also Ihr eigenes CSS neu schreiben, um die Funktionen von reset.css und normalize.css zu kombinieren?
Ayjay
2
Wenn Sie beide verwenden möchten, können Sie zuerst "Zurücksetzen" und dann "Normalisieren" auflisten und dann Ihre Stile hinzufügen?
Craig
Ich nehme den "Don't Over Think It" -Ansatz und verwende beide und rufe sie auf, wie in meinen SASS-Importen enthalten. @Import '_normalize' && '_reset'
Killscreen
6

Erstens reset.cssist dies die schlechteste Bibliothek, die Sie verwenden können, da sie die Standardstruktur von HTML entfernt und alles, was Sie schreiben, nur als Text anzeigt, nachdem Sie die Werte für Randauffüllung und andere Attribute zugewiesen haben 0. So werden Sie zum Beispiel feststellen, dass <H1>dies dasselbe sein wird wie <H6>.

Normalize.cssVerwendet andererseits die Standardstruktur und behebt auch fast alle darin vorhandenen Fehler. Beispielsweise wird das Problem behoben, bei dem ein Formular von einem Browser zu einem anderen angezeigt wird. Durch Normalisieren wird dies behoben, indem diese Funktionen so geändert werden, dass Ihre Elemente in allen Browsern gleich angezeigt werden.

N.Elsayed
quelle
1
Hängt von Ihrem Anwendungsfall ab. Wenn ich in Ihrem Beispiel die Schriftstile aller Überschriften-Tags für mein Projekt ändern muss, kann ich die Standardwerte nicht wirklich verwenden, oder? Man sollte eine Bibliothek nicht als "schlecht" bezeichnen, nur weil man in eigenen Projekten keine Verwendung finden kann.
Debojyoti Ghosh
Einer der Hauptzwecke des Zurücksetzens besteht darin, Probleme zu bekämpfen, die sich aus vom Browser angewendeten Stilen ergeben, was sehr nützlich ist. Ich denke auch, dass es nicht als Bibliothek betrachtet werden sollte.
Isaac Pak
@gdebojyoti Es gibt einige Anwendungsfälle, aber ich möchte sehr selten, dass alle meine Überschriften unabhängig von ihren jeweiligen Schriftstilen dieselbe Größe haben.
James Beninger
5

Aus der Beschreibung geht hervor, dass versucht wird, den Standardstil des Benutzeragenten in allen Browsern konsistent zu machen, anstatt das gesamte Standard-Styling wie beim Zurücksetzen zu entfernen.

Behält nützliche Standardeinstellungen bei, im Gegensatz zu vielen CSS-Resets.

dbb
quelle
Ist es also besser, CSS normalisieren über Zurücksetzen zu verwenden?
Jitendra Vyas
3
@ Jitendra Vyas - nein. Die Werkzeuge sind unterschiedlich, nicht besser oder schlechter als die anderen. Wählen Sie die aus, die Ihnen hilft, die Probleme zu lösen, die Sie am besten haben.
Quentin
8
Ich muss die Normalisierung argumentieren ist besser als das Zurücksetzen. Es wird in weniger CSS führen über den Draht, eine bessere Nutzung von UA Standardwerte übertragen werden, und ein besseres Verständnis davon , wie Elemente gemeint Anzeige.
Ryan Kinal
5

Das Zurücksetzen scheint eine Notwendigkeit zu sein, um kundenspezifische Designspezifikationen zu erfüllen, insbesondere bei komplexen Designprojekten ohne Boilerplate-Typ. Es hört sich so an, als wäre das Normalisieren ein guter Weg, um mit der reinen Webprogrammierung fortzufahren, aber häufig sind Websites eine Verbindung zwischen Webprogrammierung und UI / UX-Designregeln.

user3170099
quelle
99% der Anwendungsfälle sind übertrieben.
Michael
@ Michael welches? zurücksetzen oder normalisieren? (Ich versuche nur, die Gedanken der Leute zu diesem Thema zu verstehen)
Bren
1
@Bren sowohl zurücksetzen als auch normalisieren. Die Kenntnis der Standard-CSS-Werte für jedes Element ist Teil eines guten Front-End-Entwicklers. Ich sehe sie als unnötige Brute-Force-Methoden.
Michael
4
@Michael> Knowing the default CSS values for each element is part of being a good front end developer- das ist so, als würde man lieber mit Elektronen als mit einer Programmiersprache arbeiten, denn das macht einen guten Entwickler aus. Der effiziente Einsatz von Tools macht jemanden zu einem guten Entwickler. Umgekehrt fällt er normalerweise in die Kategorie der zeitraubenden Eiferer
nicholaswmin
1

Manchmal ist es die beste Lösung, beide zu verwenden. Manchmal ist es auch nicht zu verwenden. Und manchmal ist es das eine oder andere zu verwenden. Wenn Sie möchten, dass alle Stile, einschließlich Rand und Abstand, in allen Browsern zurückgesetzt werden, verwenden Sie reset.css. Dann tragen Sie alle Dekorationen und Stylings selbst auf. Wenn Sie die integrierten Stile einfach mögen, aber mehr browserübergreifende Synchronität, dh Normalisierungen, wünschen, verwenden Sie normalize.css. Wenn Sie jedoch sowohl reset.css als auch normalize.css verwenden, verknüpfen Sie zuerst das Stylesheet reset.css und anschließend (unmittelbar) das Stylesheet normalize.css. Manchmal ist es nicht immer eine Frage, welche besser ist, sondern wann man welche verwendet und wann man beide verwendet und wann man keine verwendet. MEINER BESCHEIDENEN MEINUNG NACH.

Sean Tank Garvey
quelle
0

Diese Frage wurde bereits mehrmals beantwortet. Ich werde für jeden eine kurze Zusammenfassung geben, ein Beispiel und Erkenntnisse ab September 2019:

  • Normalize.css - Wie der Name schon sagt, werden die Stile in den Browsern für ihre Benutzeragenten normalisiert , dh sie sind für alle Browser gleich, da sie standardmäßig geringfügig voneinander abweichen.

Beispiel : <h1>Tag innerhalb <section>von Google Chrome wird standardmäßig kleiner als die "erwartete" Größe des <h1>Tags. Microsoft Edge hingegen legt die "erwartete" Größe des <h1>Tags fest. Normalize.css macht es konsistent.

Aktueller Status : Das npm-Repository zeigt an, dass das Paket normalize.css derzeit mehr als 500.000 Downloads pro Woche enthält. GitHub-Sterne im Projekt des Repositorys sind mehr als 36.000.

  • CSS zurücksetzen - Wie der Name schon sagt, werden alle Stile zurückgesetzt, dh alle Benutzeragentenstile des Browsers werden entfernt.

Beispiel : Es würde ungefähr so ​​etwas tun:

html, body, div, span, ..., audio, video {  
   margin: 0;  
   padding: 0;  
   border: 0;  
   font-size: 100%;  
   font: inherit;  
   vertical-align: baseline; 
}

Aktueller Status : Es ist viel weniger beliebt als Normalize.css. Das Paket reset-css zeigt, dass es ungefähr 26.000 Downloads pro Woche sind. GitHub-Sterne sind nur 200, wie aus dem Repository des Projekts hervorgeht .

Daniel Danielecki
quelle