Beim Schreiben von CSS3-Eigenschaften ist die moderne Weisheit, die „echte“ Eigenschaft zuletzt und die Vendor-Präfixe zuerst aufzulisten.
.not-a-square {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
}
Warum wird diese Methode der Eigenschaftsreihenfolge so häufig gelehrt? Hier sieht es aus, wenn man es „falsch“ macht:
.not-a-square {
border-radius: 10px;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
}
Selbst wenn man es „falsch“ macht, sind die Abrundungen der Ecken nicht immer gleich, egal was passiert? Eine schnelle Untersuchung könnte Sie zu dem Schluss führen, dass dies der Fall ist, und diese Reihenfolge der Eigenschaften ist eher Unsinn.
- Die ferne Vergangenheit: Keine der Eigenschaften wird unterstützt, die Reihenfolge spielt keine Rolle.
- Die Vergangenheit: Nur Vendor-Präfixe werden unterstützt, die Reihenfolge spielt keine Rolle.
- Die Gegenwart: Sowohl Vendor-Präfixe als auch die tatsächliche Eigenschaft werden unterstützt. Wenn das Präfix zuletzt steht, überschreibt es die tatsächliche Eigenschaft, aber beide sind sowieso gleich.
- Die Zukunft: Nur die tatsächliche Eigenschaft wird unterstützt, die Reihenfolge spielt keine Rolle.
Hier ist eine einfache Tabelle, die dieses Konzept veranschaulicht.
Woah there, Cowboy
Tatsache ist, dass die Reihenfolge von CSS3-Eigenschaften wichtig ist, und das Obige ist grundlegend fehlerhaft. „Die Gegenwart“ ist genau das Problem. Wir befinden uns an einem entscheidenden Punkt in der Browsergeschichte, an dem einige Browser sowohl die mit Vendor-Präfix versehene Version als auch die tatsächliche CSS3-Eigenschaft unterstützen. Derzeit ist es speziell WebKit, das dies tut, und die Art und Weise, wie sie es implementiert haben, ist, dass, wenn Sie das Vendor-Präfix nach der tatsächlichen Eigenschaft auflisten, das Vendor-Präfix überschrieben wird und die gerenderte Eigenschaft ist.
Warum ist das wichtig? Im einfachen border-radius-Beispiel oben sind die Ecken dieses Elements unabhängig von der Reihenfolge 10 Pixel abgerundet. Es gibt keinen Unterschied, wie das Vendor-Präfix und die „echte“ Eigenschaft abgerundete Ecken handhaben, *wenn Sie nur einen Wert festlegen*. **Das Problem ist, dass es *einen* Unterschied zwischen den Implementierungen der Eigenschaften gibt, wenn mehr als ein Wert übergeben wird.**
.not-a-square {
/* These do totally different things */
border-radius: 30px 10px;
-webkit-border-radius: 30px 10px;
}
Die Spezifikation oder die „echte“ Version rendert die oberen linken und unteren rechten Ecken mit 30 Pixeln und die oberen rechten und unteren linken Ecken mit 10 Pixeln. Das Vendor-Präfix rendert alle vier Ecken mit elliptischen Ecken von 30 Pixel Breite und 10 Pixel Höhe.
Wenn Sie also blind die echte border-radius am Ende Ihrer Eigenschaftslisten mit identischen Werten aufgenommen haben und dann von Safari 4 auf Safari 5 wechseln, würden Sie eine dramatische Veränderung der Art und Weise feststellen, wie der obige Code Ihre Boxen gestaltet.
Sie könnten dies beheben, indem Sie die Werte anpassen, um sicherzustellen, dass sie dasselbe tun... aber wenn Sie etwas anpassen, könnten Sie genauso gut die echte Eigenschaft anpassen, da dies die unterstützte Version in der Zukunft sein wird. Die echte Eigenschaft zuletzt aufzulisten ist definitiv der richtige Weg. Da sie vollständig auf der Spezifikation basiert, wird sie mit anderen Browser-Implementierungen übereinstimmen und die einzige unterstützte Version sein, wenn die Zeit vergeht und Vendor-Präfixe entfernt werden.
Border-Radius ist hier keine Ausnahme. Beachten Sie die dramatisch unterschiedlichen Syntaxes für background-image-Verläufe. Derzeit gibt es noch keine „echte“ Spezifikationsversion für diese Werte, aber wenn es sie gibt, wird die Implementierung anders sein als die, die wir jetzt verwenden. Diese sollte zuletzt in der Reihenfolge der Eigenschaften aufgeführt werden, um dies ebenfalls zukunftssicher zu machen.
Vielen Dank an @mattwiebe und @snookca, die mir geholfen haben, das besser zu verstehen.
Danke für den Tipp!!
Hatte keine Ahnung. Danke dafür.
Gute Tipps Chris, vielen Dank
Wunderbare Dinge können mit CSS3 gemacht werden, aber was für eine Verschwendung von Bandbreite.
Chris, wussten Sie, dass es immer eine Sekunde oder so dauert, bis Ihre Schriftarten für Überschriften geändert werden? Das sieht auch seltsam aus.
Nicht ganz wahr! CSS3 ist für CSS, wie Salz zum Kochen ist. Richtig eingesetzt, kann es etwas von mittelmäßig zu erstaunlich machen. Übermäßig verwendet, ruiniert es all die anderen Anstrengungen, die Sie hineinstecken.
NICE! Das ist eine ziemlich coole Metapher.
Lars. Ich stimme zu, dass es dieses kleine Extra hinzufügt.
Ich finde es nur frustrierend, dass wir vier(!) Eigenschaften schreiben müssen, um abgerundete Ecken zu bekommen, während CSS eigentlich schlank ist.
Ich bin sicher, das weiß Bego – es ist ein akzeptierter Fehler, mit dem alle anderen scheinbar zurechtkommen! Leichte Ladezeit für typografische Anpassungen, die keine Bildersetzung beinhalten und nicht Times New Roman sind? Ich bin dabei.
Ich stimme Jack zu.
Es ist, als würde man sich über das Laden von Bildern beschweren. Sowohl die Schriftart als auch die Bilder müssen geladen werden. Das heißt, Schriften können komprimiert werden, was erheblich hilft.
Ich liebe Chris' Arbeit, habe viel von seinen Screencasts gelernt und wollte sicherlich nicht meckern. Es ist nur so, dass Dinge im Webdesign manchmal anders funktionieren, wenn man nicht an seinem eigenen Mac sitzt (bezüglich Downloadzeiten und Browserkompatibilität).
Aber jetzt verstehe ich: Es ist kein Fehler, es ist ein Feature. :-)
Ja, ziemlich. Während ich zustimme, dass die Bandbreite etwas „verschwendet“ wird, sprechen wir von so geringen Unterschieden von Millisekunden, dass es fast null ist. Das Schreiben der vier separaten Eigenschaften kostet mehr Zeit als Bandbreite, daher stimme ich zu.
Alles in allem, wenn Ihre Designfähigkeiten stimmen, sollten ein paar zusätzliche Zeilen, die Ihre CSS-Dateien auffüllen, keinen Deut Unterschied machen. :)
Vielleicht auf Ihrem Bildschirm, aber ich sehe die richtige Schriftart sofort.
Das nennt man FOUT. Wenn es Sie wirklich nervt, versuchen Sie es mit Webkit statt mit Firefox.
Prefix or Posthack von Eric Meyer ist eine gute Lektüre zu diesem Thema und warum es keine Verschwendung von Bandbreite ist.
Es gibt eine offizielle Gradienten-Spezifikation, sie ähnelt der Syntax von Mozilla: http://dev.w3.org/csswg/css3-images/#linear-gradients
Chris, ich wusste nichts davon! Vielen Dank für die Warnung. Haben Sie das im Zuge Ihres Redesigns mit diesen schnittigen asymmetrischen Tabs herausgefunden? Oder wussten Sie es bereits?
Andererseits bin ich es so leid, dieses gesamte Kommentarformular in Safari auszufüllen und dann festzustellen (weil ich es seit dem letzten Mal vergessen habe), dass es nicht funktioniert. Wenn Sie etwas freie Zeit haben (hah! Ich weiß, dass das eine schwer fassbare Kreatur ist), könnten Sie es sich ansehen?
Vielleicht können Sie dieses Problem für mich als Screencast aufzeichnen, Jessi? Zum Beispiel mit screenr.com oder so etwas? Ich benutze Safari ständig und andere tun das sicher auch, und ich habe das nur von Ihnen gehört! Ich bin sicher, es ist sehr real, ich habe nur nichts, worauf ich bei der Fehlerbehebung aufbauen kann.
Hallo Chris,
Wenn niemand anderes dies gesehen oder erwähnt hat, ist es offensichtlich nur mein Problem, in welchem Fall ich mich entschuldige, Sie zu belästigen!
Verbringen Sie keine Zeit damit. Ich werde sehen, ob ich es selbst beheben kann, und wenn ich es herausfinde, werde ich berichten.
Testen, testen, mit dem neuen Safari 5.0.2.
Hey, es funktioniert jetzt! Apple hat es behoben. In der Beschreibung des Updates wurde etwas darüber erwähnt, einen Fehler zu beheben, der Benutzer daran hindern könnte, Formulare einzureichen.
Seltsam, dass niemand sonst darauf gestoßen ist...
Der richtige Weg ist
.not-a-square {
-moz-border-radius: 10px;
border-radius: 10px;
}
Webkit unterstützt die Version ohne Vendor-Präfix. Das tut es schon seit ein paar Wochen. Sowohl Chrome (5 & 6) als auch Safari.
Richtig, aber Safari 4 wird es zum Beispiel immer noch brauchen, also wenn Sie versuchen, eine möglichst breite Palette von Browsern zu unterstützen, werden Sie immer noch -webkit- verwenden wollen.
Ich bin froh, dass Sie das angesprochen haben, weil ich dasselbe wie @mingos gedacht habe. Es ist mir nicht einmal aufgefallen, dass das Ignorieren der Webkit-Browsererweiterungen die Unterstützung für Safari 4 eingestellt hätte. Danke!
Toller Beitrag!
Ich habe meine CSS3-Eigenschaften sowieso schon so bestellt, aber es ist schön, eine so tiefgehende Erklärung zu sehen, warum dies eine gute Praxis ist.
Großartig! Ich habe es auf die „richtige“ Weise gemacht, aber nicht mit diesen elliptischen Ecken nachgedacht. Das würde mich wahnsinnig machen!
Ich benutze seit etwa einer Woche <a href="http://incident57.com/less/"Less.js, um etwas CSS zu schreiben. Es macht die Browser-Präfixe weniger mühsam.
Ja, LESS ist großartig, obwohl ich die PHP-Version benutze. Garantiert, dass es funktioniert, auch wenn jemand beschließt, JavaScript zu deaktivieren ;)
Außerdem gibt es ein Problem mit LESS: M$IE-Hacks werden nicht richtig geparst. Auch einige schicke CSS3-Sachen in einigen Eckfällen nicht.
ups... eine Klammer vergessen Less.js
Sehr zeitgemäß – ich habe heute an etwas mit border-radius und box-shadow gearbeitet. Mir war der Unterschied nie bewusst! Glücklicherweise habe ich die „echte“ Eigenschaft bereits am Ende aufgenommen.
Hey, ich habe mir gerade Ihre Website angesehen und es sei denn, Sie sind super-minimalistisch geworden, Sie leiden unter einigen CSS-Problemen!
Es sieht ziemlich absichtlich aus… das ist das Sandbox-Theme für WordPress.
Kurzer und knapper Beitrag. Es wäre schön, mehr schnelle Tipps für CSS3 und HTML5 zu sehen.
Ja, da stimme ich absolut zu!
Ihre Argumente ergeben viel Sinn und (wahrscheinlich) hätte ich das selbst herausfinden können, aber da ich diesem Aspekt, Ordnung in meinem CSS-Blatt zu schaffen, nicht viel Bedeutung beimesse, und schnelles Tippen lässt mich solche Details immer übersehen.
Danke, das ist sehr wichtig, CSS3 zu verfolgen! Ich werde es in meinem Wort verwenden :)
Ich stimme der Salz-Analogie zu, und ein paar Spritzer CSS3 verleihen einem Designprojekt das gewisse Etwas. LT
In diesem Zusammenhang finde ich es ärgerlich, dass Firebug neue CSS-Eigenschaften gerne alphabetisch sortiert.
Ich habe es früher falsch gemacht ... wow
Danke fürs Aufklären!
Ich stimme vielen der obigen Kommentare zu, wie
– die Salz-Analogie ist eine gute
– ein sehr schöner, hilfreicher, kurzer Tipp
– ich hatte auch keine Ahnung und habe es falsch gemacht
Danke
Me parece interesante este blog sobre diseño web y realmente las aplicaciones son las mejores.
Ugh… jetzt muss ich alle meine Stylesheets ändern. Ich schwöre, der einzige Grund, warum mein CSS unordentlich geworden ist, war wegen all der sich ändernden CSS3-Best Practices.
Ich denke, ich werde anfangen, PHP zu verwenden, um CSS3-Sachen von nun an zu liefern, um Probleme wie diese zu vermeiden. Ähnlich wie LESS, aber ohne all die Schnörkel.
Sollten ::-moz-selection und ::selection auch so geordnet werden oder macht es keinen Unterschied?
Toller Tipp, ich muss einige Änderungen an meiner Website vornehmen..
Toller Artikel! Ich komme aus Brasilien, ich verfolge Ihre Arbeiten schon seit einer Weile und lerne immer wieder Neues von Ihnen, herzlichen Glückwunsch.
Massa
Danke für den schnellen Tipp.
Toller Tipp.
Auf Opera funktioniert alles, FF4 – alles funktioniert, dieser Fehler tritt nur bei Safari/Chrome auf!
Großartig! Das ist sehr interessant. Wir können durch die Verwendung dieses CSS mehr Zeit sparen.
Gute Sache.. Nie gewusst, dass es das gibt.