Es gibt ziemlich viele Eigenschaften in CSS, die eine Länge als Wert annehmen. Die Box-Modell-Eigenschaften sind die offensichtlichen: width, height, margin, padding, border. Aber auch viele andere: die Positionierung und Größe eines box-shadow oder die Größe und Abstände von Schriftarten. Was sind alle akzeptierten „Längen“-Eigenschaften in CSS? Es gibt ziemlich viele.
Absolute Längen
px
.wrap {
width: 400px;
}
Pixel haben nichts mit den tatsächlichen Bildschirm-Pixeln des Displays zu tun, das Sie gerade betrachten. Es ist eigentlich eine Winkelmessung.
Nerd-Infos darüber, was Pixel in CSS sind
Pixel in CSS sind an den CSS-Referenzpixel gebunden, der den visuellen Winkel eines Pixels darstellt, nämlich 0,0213 Grad oder 1,278 Bogenminuten. Dies basiert auf einem Gerät mit einer Pixeldichte von 96 DPI und einer Entfernung zum Leser von einer Armlänge von 28 Zoll. Gerätehersteller können den Referenzpixel somit verwenden, um eine Größe basierend auf der beabsichtigten/erwarteten visuellen Entfernung festzulegen.
Er soll ein Wert sein, der geräte- und displayübergreifend normalisiert ist, aber das stimmt immer weniger. Zum Beispiel werden Websites auf dem iPad mini genauso dargestellt wie auf dem iPad, was bedeutet, dass, wenn diese Werte in Pixeln gesetzt wären, diese Normierung ziemlich über Bord geworfen ist.
Pixel sind jedoch immer noch eine kanonische Messung im Web, da sie konsistent gehandhabt werden, viele andere Längen direkt auf Pixel abgebildet werden und JavaScript in Pixel spricht.
in
.wrap {
width: 4in;
}
Zoll sind eine physikalische Messung, aber im CSS-Land werden sie einfach direkt auf Pixel abgebildet. Fühlen Sie sich frei, Anwendungsfälle in den Kommentaren mitzuteilen, und ich werde sie hier hinzufügen, aber ich habe nie einen praktischen Anwendungsfall für diese oder die restlichen physikalischen Messungen gesehen.
1in == 96px
cm
.wrap {
width: 20cm;
}
Für den Großteil der Welt sind Zentimeter vertrauter und nützlicher als physische Messungen. Sie werden auch einfach auf Pixel abgebildet.
1cm == 37.8px
mm
.wrap {
width: 200mm;
}
Und eine Größenordnung kleiner…
1mm == 0.1cm == 3.78px
Schriftartrelative Längen
Em
.wrap {
width: 40em;
}
Eine relative Einheit. Ursprünglich eine typografische Messung, die auf dem Großbuchstaben „M“ der aktuellen Schriftart basiert. Obwohl sich die Länge nicht ändert, wenn Sie font-family ändern, ändert sie sich, wenn Sie font-size ändern.
Ohne jegliches CSS wäre 1em
1em == 16px == 0.17in == 12pt == 1pc == 4.2mm == 0.42cm
Wenn CSS die Schriftgröße ändert (auf beliebiger Ebene im Dokument), wird 1em zu dem, was die neue font-size ist.
Etwas umständlicher wird es, da sich Em-Einheiten bei der Anwendung auf font-size vervielfachen. Wenn also ein Element mit einer Schriftgröße von 1,1em innerhalb eines Elements mit einer Schriftgröße von 1,1em innerhalb eines weiteren Elements mit einer Schriftgröße von 1,1em liegt, beträgt die resultierende Größe 1,1 ✕ 1,1 ✕ 1,1 == 1,331rem (root em). Das bedeutet, selbst wenn ein Element beispielsweise auf 10em gesetzt ist, heißt das nicht, dass es überall, wo es vorkommt, eine einheitliche Breite hat. Es könnte breiter oder schmaler sein, wenn sich die font-size ändert (siehe Beweis).
Rem
.wrap {
width: 40rem;
}
Eine relative Einheit, ähnlich wie em, aber sie bezieht sich immer auf das „Root“-Element (d. h. :root {}) und nicht auf die Kaskade, wie es em tut. Dies vereinfacht die Arbeit mit relativen Einheiten erheblich.
Bemerkenswerte Browser-Unterstützungsprobleme: Funktioniert nicht in IE 8, Safari 4 oder iOS 3.2.
Punkte
.wrap {
width: 120pt;
}
Ein Punkt ist eine physische Messung, die 1/72 Zoll entspricht. Punkte sind die gebräuchlichste Art, Text außerhalb von CSS zu dimensionieren (wahrscheinlich der Grund, warum er in CSS unterstützt wird). Es ist immer noch gebräuchlich in der Sprache: „Natürlich haben sie diese wichtigen Informationen in winzigen Acht-Punkt-Schrift gesetzt!“.
Punkte sind am sinnvollsten in Print-Stylesheets zur Textgrößenbestimmung, wo physische Medien beteiligt sind, aber nichts hindert Sie daran, pt für Bildschirmmedien oder überall dort zu verwenden, wo eine Länge akzeptiert wird.
Bemerkenswerte Browser-Unterstützungsprobleme: Früher gab es große Unterschiede bei der On-Screen-Darstellung von pt-Größen. Hier ist ein Vergleich von IE 6 vs. Firefox (wahrscheinlich 3.6).
Pica
.wrap {
width: 12pc;
}
Die gleiche Geschichte wie bei Punkten, nur 1pc == 12pt.
ex
.wrap {
width: 60ex;
}
Dies ist eine Messung, die auf der x-Höhe der aktuellen Schrift basiert. Manchmal stammen diese Informationen aus der Schriftart selbst, manchmal ermitteln Browser dies durch Messung eines Kleinbuchstabens, und im schlimmsten Fall wird sie auf 0,5em gesetzt. Sie ist nach der "x"-Höhe benannt, weil sie angeblich auf der Höhe des Buchstabens x basiert. Um die x-Höhe zu verstehen, denken Sie an einen Kleinbuchstaben, der einen Teil hat, der nach oben ragt (Oberlänge) wie ein Kleinbuchstabe "d". Die x-Höhe beinhaltet diese Oberlänge nicht, sondern ist die Höhe des unteren Schleifenteils dieses Buchstabens.
Im Gegensatz zu ems, die sich bei Änderung der Schriftfamilie nicht ändern, ändern sich ex-Einheiten, wenn Sie die Schriftfamilie ändern, da der Wert einer Einheit spezifisch an diese Schrift gebunden ist. (Beweis).
ch
.wrap {
width: 60ch;
}
Dies ist ähnlich im Geist wie x-height, nur dass ch auf der Breite der Null (0) basiert und nicht auf der Höhe des x-Zeichens. Es ändert sich auch, wenn sich die Schriftfamilie ändert.
Viewport-Prozentuale Längen
Diese Daten zur Browserunterstützung stammen von Caniuse, wo weitere Details zu finden sind. Eine Zahl gibt an, dass der Browser die Funktion ab dieser Version unterstützt.
Desktop
| Chrome | Firefox | IE | Edge | Safari |
|---|---|---|---|---|
| 26 | 19 | 11 | 16 | 6.1 |
Mobil / Tablet
| Android Chrome | Android Firefox | Android | iOS Safari |
|---|---|---|---|
| 127 | 127 | 4.4 | 8 |
vw
.wrap {
width: 10vw;
}
Dies ist die Einheit „Viewport-Breite“. 1vw entspricht 1% der Breite des Viewports. Sie ähnelt dem Prozentwert, außer dass der Wert für alle Elemente konstant bleibt, unabhängig von ihren Elternelementen oder der Breite der Elternelemente. Ähnlich wie rem-Einheiten immer relativ zur Wurzel sind.
Die Größenbestimmung von Text ist hier der Hauptanwendungsfall. Siehe Viewport Sized Typography.
Bemerkenswerte Browser-Unterstützungsprobleme: Keine Unterstützung in mobilen Browsern außer dem allerneuesten iOS 6. Dies gilt für alle viewport-bezogenen Längeneinheiten.
vh
.wrap {
width: 10vh;
}
Dies ist dasselbe wie die Einheit vw (Viewport-Breite), nur dass sie sich stattdessen auf die Viewport-Höhe bezieht.
vmin
.wrap {
width: 20vmin;
}
Dieser Wert ist zu jedem Zeitpunkt der kleinere der beiden Werte, vw oder vh. Im Standardanwendungsfall der Textgrößenbestimmung kann dies eine nützlichere Metrik sein als vw oder vh allein, um die tatsächliche Bildschirmgröße zu bestimmen.
vmax
.wrap {
width: 20vmax;
}
Dieser Wert ist zu jedem Zeitpunkt der größere der beiden Werte, vw oder vh.
Bemerkenswerte Browser-Unterstützungsprobleme: WebKit-basierte Browser unterstützen vmin, aber (noch) nicht vmax. Firefox unterstützt jedoch vmax.
Ausreißer
Prozent
.wrap {
width: 50%;
}
Eine in Prozent gesetzte Länge basiert auf der Länge der gleichen Eigenschaft des Elternelements. Wenn beispielsweise ein Element mit einer Breite von 450 Pixeln gerendert wird, wird ein Kindelement mit einer Breite von 50 % mit 225 Pixeln gerendert1.
Trivia: Prozent ist technisch gesehen keine Längeneinheit, aber ich nehme sie hier auf, da sie so eng verwandt ist.
Weitere Informationen
Was wird in Ihrem Browser unterstützt?
Check out this Pen!
1 Unter der Annahme, dass das Kindelement kein Inline-Element oder eine Tabellenzelle mit seltsamen Tabellen-Eigenheiten ist, oder ein Flex-Kind-Element oder eine Grid-Zelle oder ähnlicher schräger Kram.
Wow, das wusste ich bei vielen nicht. Glückwunsch zu dem Beitrag, sehr schön :D
Ziemlich interessant. Ich wünschte, rems wären besser unterstützt, weil ich ems einfach umständlich zu benutzen finde – ich benutze immer noch gerne Pixel.
Ich stimme zu. Man muss sehr sorgfältig vorgehen, um ems richtig zu verwenden. Sie haben zwar ihre Stärken, aber ich stelle fest, dass Personen mit einem Entwicklungshintergrund weniger Probleme damit haben.
Ich finde, Designer bleiben meist bei px, da es ihnen scheinbar die direkteste Kontrolle über die Größen gibt… außerdem kommen sie meist aus einem Print-Hintergrund, wo man mit einem festen Medium arbeitet. Selten wird man einem Designer sagen: „Ich brauche ein Design, das sowohl für eine Visitenkarte, ein Plakat als auch für eine Wand in einem Weinkeller gleichermaßen gut funktioniert.“
Das ist mehr oder weniger das, womit wir uns im Web auseinandersetzen müssen, und bis RWD zum Mainstream wurde, musste ein Design für Mobiltelefone, 30-Zoll-Bildschirme und alte, lahme, flackernde Röhrenmonitore funktionieren.
Rems und ems vermitteln ein stärkeres Gefühl für die relativen Größen des Textes. Es verleitet auch weniger dazu, einfach eine Pixelgröße zu wählen und zu sehen, ob sie passt. Vielmehr habe ich festgestellt, dass sie dazu ermutigen, Systeme auf der Grundlage von Beziehungen zwischen Überschriften und umgebendem Inhalt zu entwickeln.
Wenn Sie zum Beispiel eine Überschrift wünschen, die doppelt so groß ist wie der Textkörper, können Sie einfach sagen, dass sie 2 ems groß ist.
Auch bei der Einstellung der Zeilenhöhe ist es besonders nützlich. 1em ist immer gleich der Schriftgröße, egal wie groß sie ist. Ebenso ergibt 1,5em eine 50 % größere vertikale Höhe.
Im Vergleich dazu, wenn Sie Dinge in Pixeln einstellen, können Sie einfach willkürlich und nach Belieben Werte setzen. body bei 16px, h2 bei 34px… Zeilenhöhe 36px, Rand von 8px… das sind, was Programmierer magische Zahlen nennen und es gibt vielleicht keinen Grund, sie zu wählen.
Ich bin nicht GEGEN Pixel, ich denke nur, wenn Sie mit ems oder rems arbeiten KÖNNEN, werden Sie mehr darüber nachdenken, wie Text zu anderem Text in Beziehung steht.
Die physikalischen Messungen sind nützlich, wenn Sie an CSS arbeiten, das zum Drucken bestimmt ist.
Ich wollte die gleiche Antwort geben. Ich habe das kürzlich für eine Lebenslauf-Website und eine weitere gemacht, bei der der Benutzer ausgefüllte Formulare ausdrucken konnte.
-dk
Zoll, Zentimeter und Millimeter sind nützlich für Print-Media-Stylesheet, da Print-Media selbst in diesen Einheiten gemessen wird (ISO 216). In Photoshop und Word werden Sie feststellen, dass die Leinwand- und Dokumentlineale standardmäßig in Zoll oder Zentimetern gemessen werden.
Ich verstehe, wie Zoll, cm, mm == physikalische Messungen sind und wie ein bedrucktes Blatt Papier == eine physische Sache ist, aber ich verstehe immer noch nicht ganz, wie das sie für Print-Stylesheets nützlich macht.
Ich habe im Laufe meines Lebens einige Print-Stylesheets erstellt und sie nie benutzt. Nicht, dass das ein eindeutiger Beweis für ihre Nutzlosigkeit ist, ich sage nur.
Vielleicht könnte jemand, der sie benutzt hat, eine Testseite und Daten darüber teilen, wie sie nützlich waren?
Chris: Jedes Mal, wenn Sie ein Layout mit fester Breite vom Bildschirm auf Druck übertragen, da die Breite fest bleibt. Manche Dinge erfordern wirklich feste Layouts; Lebensläufe zum Beispiel. Ich habe Zoll verwendet, als ich ein Print-Stylesheet für einen Lebenslauf erstellt habe, und antizipiert, dass es wahrscheinlich auf A4-Papier gedruckt würde. Dies ermöglichte es mir, das Seitenlayout des Lebenslaufs in Word präzise zu definieren, da eine feine Kontrolle über das Seitenlayout für einen Lebenslauf oft notwendig ist; und dann ein Stylesheet zu erstellen, das dieses Seitenlayout fast exakt widerspiegelt.
Ein klassisches A4-Papier hat 2,5 cm Rand, aber eine Webseite hat, wenn sie unberührt bleibt, etwa 1 cm.
Ich habe viele gedruckte Seiten oder häufiger dynamisch erstellte PDFs gestylt. In beiden Fällen ist es schön, mm zu verwenden, da sie für diese Medien „nativer“ sind.
Grundsätzlich gilt: Wenn die Seite/das PDF eine Art Bericht ist, der erstellt werden muss und Sie möchten, dass die Dinge in einer bestimmten Weise angeordnet werden, finde ich es viel einfacher und zuverlässiger als px. Wenn die zu druckende Seite nur eine gewöhnliche Seite ist, ist das Hinzufügen eines Print-Style-Sheets, um alles mit mm neu zu stylen, ein Overkill.
Ausgezeichneter Artikel, Chris. Danke für die ganze Arbeit und Recherche, die Sie leisten.
Eine kleine Klarstellung: Sollte die Gleichung für 1 mm gleich 3,78 px und nicht 37,8 px sein?
Danke! Wird behoben und danach versteckt.
Ugh, zu viele verschiedene Schriftmessungen lassen Mark nicht gut denken. Halten Sie es einfach, es sei denn, Sie haben einen sehr spezifischen Anwendungsfall, wie andere oben genannt haben, z. B. für ein Dokument, das gedruckt werden soll.
Das ist ein großartiger Artikel! Sehr informativ. Ich verwende nur px und Prozent als Längen. Ich weiß von mm, cm und Zoll. Aber ich bin erstaunt, wie viele Längentypen in CSS unterstützt werden. Ich dachte, ich würde in den meisten Fällen bei px bleiben, aber diese Maßeinheiten können in spezifischen Projekten wirklich hilfreich sein.
Der Test-Pen funktioniert bei mir in IE9 nicht richtig – alle Balken sind winzig kurz, aber die :fail-Klasse wird keinem von ihnen hinzugefügt…
Eine seltene Ausnahme von der seltsamen Einheit: Prozentuale Einheiten bei oberem und unterem Rand/Polsterung werden aus der Breite und nicht aus der Höhe des enthaltenden Blocks berechnet.
http://www.w3.org/TR/CSS2/box.html#margin-properties
Ich benutze anscheinend immer nur px in CSS. Ich muss altmodisch sein :)
Ich auch, ich will es einfach so haben, wie ich es entworfen habe, schätze ich.
Chris: Toller Artikel, gut gemacht.
Ich denke, es ist weniger eine Frage des Altmodischseins, sondern eher, wo man im Webdesign angefangen hat. Viele Print-Designer oder alte Webdesigner verwenden px, wo sie es gewohnt sind, die Kontrolle über das Medium zu haben, aber ems haben ihren Platz, besonders im responsiven Webdesign. Wenn Sie zum Beispiel möchten, dass der gesamte Text für sehr breite Desktops 10 % größer ist, müssen Sie ihn nur an einer Stelle ändern.
Die Verwendung von Pixeln bedeutet, dass Sie alles überall anpassen müssen.
Hast du nie em oder % benutzt?
Da Gerätehersteller die dpi von Geräten immer basierend auf einer physischen Länge einstellen (wie Monitorauflösung: 72 dpi, und später 96 dpi oder mehr), ist pt für das Web oder jedes mobile Gerät perfekt geeignet. Wenn Sie ein iPhone 4 mit Retina-Display verwenden, liegt die dpi über 300 dpi. Dies hilft dem System und dem Browser, eine fast perfekte physische Größe darzustellen, und Sie müssen sich nicht mit Dutzenden von Bildschirmgrößen und Auflösungen auseinandersetzen und die Basisschriftgröße neu berechnen oder mit px spielen. 14pt ist überall 14pt. Ich benutze es schon seit einiger Zeit und pt ist bei weitem die bequemste Lösung, um damit zu arbeiten (für Schriftgrößen). Probieren Sie es aus :)
Das ist ein sehr interessantes Konzept, Takehito. Ich würde wirklich gerne einige Beispiele oder Artikel dazu sehen. Irgendwelche Ideen oder empfohlene Quellen?
Ich habe das früher gemacht, um etwas anderes zu testen, aber der Text ist in pt. Das Beste, was Sie tun können, ist, selbst zu testen und das Ergebnis zu sehen. Ich weiß, dass es ziemlich schick ist, em-Werte oder Prozent usw. zu verwenden, aber Typografie hat in den letzten Jahrhunderten mit exakten Größen gut funktioniert. Vergessen Sie nicht, dass em-Werte nur ein Verhältnis sind, nichts weiter, aber man verliert sich schwerer darin, welches Element was von welchem Elternteil erbt und so weiter. (Oder werde ich alt :))
Wenn ich ein Titelsystem für eine Website (oder ein gedrucktes Material) erstelle, überschreibe ich nur einmal mit einer Medienabfrage mit pt, und das war's. Wenn Sie em-Werte verwenden, klingt es gut, nur den Basiswert zu ändern, aber ist der "Abstand" in der Schriftgröße zwischen h1, h2… und p auf Mobilgeräten und Desktops gleich? Wenn Sie sich mein Beispiel ansehen, werden Sie sehen, dass es auf dem Desktop in Ordnung ist, aber Titel auf einem Mobilgerät zu groß aussehen. Wenn Sie nur ein Verhältnis verwenden, reicht das nicht aus. Sie müssen die Verhältnisse neu berechnen, aber ist es nicht einfacher, in pt zu denken?
Ich benutze Chrome 27 Dev und alle Einheiten werden unterstützt, einschließlich ch und vmax.
Chrome 25 Stable unterstützt sie jedoch nicht.
Das könnte bedeuten, dass ihre Unterstützung bald, in ein paar Monaten, hinzugefügt wird.
Ja, das Gleiche hier bei Webkit Nightlies. Das bedeutet jedoch, dass es wahrscheinlich ein bis zwei Jahre dauern wird, bis Safari sie unterstützt… das Einzige, was ich Chrome-Benutzer beneide, ist der Update-Zeitplan.
Verdammt, ich habe gerade etwas Neues gelernt. Welche Einheit verwendest du am häufigsten, Chris?
Wenn Sie sich die Serie von Chris ansehen, werden Sie feststellen, dass er am häufigsten px verwendet. Viele, die im Web designen, verwenden px. Einige sind vor ein paar Jahren auf ems umgestiegen, weil IE Text nicht richtig skalierte und auf die Komplexität der Vererbung stießen. Browser-Skalierung ist jetzt weniger ein Problem, sodass px immer noch ziemlich gut funktioniert.
In gewisser Weise geht es mehr um die Philosophie des Ganzen.
Passt gut zum Beitrag, den Sie zuvor von inamidst.com über px als Winkelmessung veröffentlicht haben – ich bin sicher, viele von uns haben hier viel gelernt. Sehr interessant!
nicht wirklich – es vermeidet die Arbeit mit relativen Einheiten.
remkann je nachem-Größe der Wurzel variieren, ist aber eine absolute Messung.Das ist ein guter Punkt, aber nur meistens wahr. Es ist immer noch relativ, zumindest auf dieser einen Ebene. Das bedeutet, dass sich alles im Gleichklang anpasst, wenn sich diese Wurzelgröße ändert. Stellen Sie sich Wortabstand: 2px vor. Das passt sich nicht an, wenn sich die Wurzelgröße ändert, was es fast bedeutungslos macht, wenn Sie ein paar Schriftgrößen erhöhen. Aber wenn es 0,1rem ist, hat diese relative Länge bei jeder Wurzel-Schriftgröße immer noch Bedeutung.
Zustimmung, "größtenteils wahr".
Ich dachte an Vererbung, wirklich;
rembezieht sich auf das Wurzelelement, nicht auf sein Elternelement.)
toller Beitrag, warum diese Webseite keine Social-Share-Buttons hat
Wir haben vor kurzem mm-Messungen in einem Print-Stylesheet für Medien verwendet, die heruntergeladen werden sollten. Das Produkt, an dem wir gearbeitet haben, ermöglichte es dem Benutzer, eine dynamisch generierte PDF-Datei von Barcode-Etiketten für Buchhandlungen herunterzuladen und auszudrucken. Die PDF-Datei wurde mit Wicked PDF erstellt, das HTML/CSS in eine PDF-Datei umwandelt.
Die ersten Prototypen verwendeten Pixel, aber wir konnten nie jedes Etikett perfekt ausrichten. Dann hatte ich einen Geistesblitz und erinnerte mich, dass CSS reale Maßeinheiten (in, mm, cm) verarbeiten kann. Die Anweisungen für die Etiketten enthielten die Maße bereits in mm, sodass die Übersetzung des CSS, um übereinzustimmen, ein Kinderspiel war, und jetzt stimmen alle perfekt überein.
+1 dazu. mm sind eine gute Möglichkeit, gedruckte Websites oder erstellte PDFs zu stylen.
Wow, ist das wahr? (in Bezug auf ems)
Kürzlich, als ich an einem Design arbeitete, funktionierte meine Typekit-Schriftart nicht und Helvetica trat an ihre Stelle. Es schien, als ob überall etwas Platz war, Ränder, Abstände usw. Vielleicht lag es einfach daran, dass Helvetica eine offenere Schriftart war?
Physische Einheiten könnten für Touch-Geräte sehr nützlich sein. Mein Finger hat eine feste Größe, daher sollte ein Button eine feste Größe von sagen wir mindestens 1,5 cm x 1,5 cm haben.
Jetzt hat mein Kindle Fire 169 dpi, mein LG Optimus Black hat 233 dpi. Das bedeutet, dass die 100 Pixel, die den Button auf dem Fire 1,5 cm groß machen würden, auf dem Optimus 1,1 cm ergeben würden.
Physische Einheiten, die als solche interpretiert würden, würden dies beheben.
Man würde denken, das stimmt, aber tatsächlich sind Pixel nicht direkt auf die Punkte auf Ihrem Bildschirm abgebildet. Sie werden vom Gerätehersteller willkürlich festgelegt.
Sie können dies überprüfen, wenn Sie ein altes iPhone 3GS oder ein altes iPod Touch zur Hand haben. Zeigen Sie diese Website auf beiden Geräten und auf einem neueren Retina-iPhone an. Ich verwende das iPhone als Beispiel, da sich die Bildschirmgröße zwischen den Generationen nicht geändert hat, nur die Pixeldichte des Displays hat sich geändert. Sie werden feststellen, dass sie auf beiden Geräten gleich sind.
Das hindert Sie nicht daran, Media Queries zu verwenden und z. B. Buttons größer als 15 mm festzulegen, da dies im Markup sinnvoller ist und nicht die negativen Aspekte von 57 px hat (was Sie in der Programmierung als magische Zahl bezeichnen könnten).
Schauen Sie sich diesen Pen auf Ihren Geräten an, um ihn zu testen
http://codepen.io/garypaul/full/dnrvK
Ich habe kürzlich 'ex' als Schriftgröße verwendet, um die Größe der Schriftarten in meinem Schriftstapel zu normalisieren. Das Problem war, dass die Mac-Schrift kleiner als die Windows-Schrift gerendert wurde. Die 'ex'-Einheit funktionierte nicht gut mit älteren Versionen von IE, daher musste ich diese Werte mit Pixeln überschreiben.
Ich wollte immer ems verwenden, fand sie aber zu nervig – jedes verschachtelte Element musste anscheinend eine Klasse erhalten, um seine Schriftgröße zu steuern, und die Mathematik war zu viel für meinen kleinen Verstand.
Dann kamen rem-Einheiten – perfekt, aber leider nicht gut in IE8, den wir in allen Projekten immer noch unterstützen und das noch einige Zeit tun werden.
Aber jetzt wurde Glück erreicht dank SASS und Chris' fantastigem Font-Size-Mixin – dies nimmt eine Eingabe, die der gewünschten REM-Größe entspricht, z. B. 1,6, und multipliziert sie dann, um dieselbe Schriftgröße in Pixeln anzugeben – so erhalten wir beide Schriftgrößenangaben, um eine tiefe Browserunterstützung zu gewährleisten.
Ich verwende dies auch in Verbindung mit der Einstellung meiner HTML-Elementgröße auf 62,5%, sodass 1 rem = 10 Pixel = einfache Mathematik!
Mehr hier: https://css-tricks.de/snippets/css/less-mixin-for-rem-font-sizing/
Der Grund für diesen Aufwand ist, den Benutzern zu ermöglichen, die Textgröße in ihrem Browser einzustellen – ems und rems werden vom Browser skaliert, wenn der Benutzer Schriftgrößen im Browser auf groß oder extra groß usw. eingestellt hat.
Toller Artikel! Und ich wusste wirklich nicht, dass diese Arten von Längen in CSS unterstützt werden. Jedenfalls schätze ich Ihre Artikel immer. Nochmals vielen Dank.
Ich meide px wie die Pest. Liebe rems. SASS lässt alles schön zusammenarbeiten. :)
Ich liebe meine rems auch! Ich habe diesen MQ-Bug vor einiger Zeit bei Webkit und dann bei Gecko gemeldet, da rems in einer Media-Query-Bedingung den Inhalt innerhalb der eigentlichen Abfrage nicht auslösen. Dieses Beispiel unten funktioniert also im Moment nicht in Gecko – oder bis FF 20 veröffentlicht wird, wie mir gesagt wurde. Dieses Problem scheint auch bei Webkit jetzt behoben zu sein.
Beispiel für nicht funktionierende MQ-Bedingung mit rem
Demo mit Bugreport gemeldet
http://cdpn.io/AFjDK
Cath, warum meidest du px? Ich möchte nur mehr über Webentwicklung erfahren.
CSS sollte eine "Arc"-Einheit haben, die den Teil des Sichtfelds eines Benutzers darstellt.
Schriftgrößen sind "zu klein", wenn man sie zu klein sieht. Es hängt davon ab, wie groß sie angezeigt werden, aber auch davon, wie weit man auf den Bildschirm schaut. Ich weiß, es verschiebt das Problem zum Browser, der jetzt wissen muss, wie weit man vom Bildschirm entfernt steht, aber es wäre sehr hilfreich, zum Beispiel wenn man Seiten auf einem Fernseher anzeigen möchte oder wenn man ein Retina-Display hat.
Danke für das Teilen solch großartiger Informationen, obwohl ich immer noch px und em bevorzuge.
Toller Artikel! Ich habe kürzlich angefangen, mit rems zu arbeiten, sie gefallen mir bisher.
Es gibt einige nette Dinge, die Leute, die nur mit Pixeln arbeiten, verpassen. Sie können dieses Beispiel, das ich zur Hilfe für einen Typen im Forum vor ein paar Tagen bereitgestellt habe, nehmen: http://codepen.io/Merri/pen/iFbng
Ändern Sie die Schriftart in eine beliebige Schriftart, die Sie sich vorstellen können (unter Windows ist es schön, zumindest Courier New und Times New Roman zu testen). Sie werden feststellen, dass der Text bei jeder verwendeten Schriftart perfekt ausgerichtet bleibt. Versuchen Sie nun, den Text auf ähnliche Weise nur mit Pixeln auszurichten und damit alle Prozentsätze, Punkte und ems zu ersetzen. Verwenden Sie eine beliebige Schriftart Ihrer Wahl, um es richtig zu machen, und versuchen Sie dann, die Schriftart oder Schriftgröße zu ändern.
Im Wesentlichen ist der Trick, den Sie auf dieser Seite sehen, die Möglichkeit, zwei Zeilen kleineren Text auf derselben Zeile mit größerem Text zu haben. Es ist möglich, Inline-Block-Layouts mit derselben Idee zu erstellen, obwohl ich noch nicht sicher bin, ob dies etwas Neues bringen kann. Wenn nichts anderes, könnte man sich vorstellen, Bilder zu haben, bei denen das erste Bild groß ist und alle anderen kleiner und in zwei Zeilen. Oder sogar mehrere größere Bilder in derselben Zeile, vielleicht eine Art "Künstler-Vorschau". Obwohl eine solche Layoutgestaltung auch mit anderen Methoden durchaus plausibel wäre.
Vielleicht wird Flexbox eher für den täglichen Gebrauch tauglich, als dass ich etwas wirklich Einzigartiges zustande bringe, das bisher nur mit Line-Height- und Vertical-Align-Tricksereien in Bezug auf das Layout möglich ist :)
Sie sagen das: width: 20vmax;
Meine Gedanken: Ist das nicht genau dasselbe wie max-width: 20vw;?
Denn vmax klingt bescheuert. Es gibt auch kein pxmax oder so etwas...
Schauen Sie sich diesen Link an
http://www.kickstarter.com/projects/1894163124/web-designer-t-shirts/backers
Zur Unterstützung mobiler Browser
Alle Tests mit FF mobile Beta bestanden.
Vielen Dank …..
Hallo Chris,
Toller Artikel! Ich habe vor einiger Zeit auch über das Thema geschrieben hier
Ich habe ein wenig über Kompatibilität recherchiert, die Tabelle unten können Sie sich ansehen. Ich hoffe, sie ist nützlich und wird nicht als Spam behandelt.
Ich denke, wir brauchen eine Line-Height-Einheit.
So kann die Höhe eines horizontalen Menüs mühelos 1 Line-Height betragen,
eine Seitenleiste kann leicht 5 Zeilen mit Links aufnehmen.
height: 1.4em könnte umgewandelt werden in
height: 1lh
Warum ist das noch nicht implementiert?
Ich benutze Chrome Canary 27 und es unterstützt
chEinheiten.Hallo Chris,
Ich glaube,
emhat mehr mit Vererbung als mit der Kaskade zu tun.Sicher, das ist ein besseres Wort.
Sie sind immer relativ zu ihrem Elternelement.
Das ist alles so kompliziert, ich möchte immer noch bei px und Prozent bleiben
Die Aussage, dass "px eine Winkelmessung ist", ist falsch; der verlinkte Artikel oben wird hier dekonstruiert
http://omnicognate.wordpress.com/2013/01/07/in-css-px-is-not-an-angular-measurement-and-it-is-not-non-linear/
Es ist erwähnenswert, dass ems (und später rems) mit dem Trend der "elastischen" / "flüssigen" Layouts populär wurden, als jeder darauf bedacht war, das Layout konsistent zu halten, wenn der Benutzer hinein- und herauszoomte. Das scheint aus der Mode gekommen zu sein, da sich alle mit responsivem Design beschäftigt haben.
YouTube hatte früher seine Benutzeroberfläche komplett mit Prozenten aufgebaut. Die Begründung war, glaube ich, dass sie so viele Smart-TVs und Spielekonsolen wie möglich unterstützen wollten, und es ist in Ordnung, wenn einige Texte leicht gequetscht sind, solange das Gesamtlayout ungefähr erhalten bleibt. Ich habe an einem Klon mit denselben Techniken für ein VOD-Unternehmen gearbeitet, es war eine der albtraumhaftesten Arbeiten, die ich je machen musste.
Das ist großartig! Ich habe den Test in vielen Fällen verwendet, um zu sehen, welche Browser welche Einheiten unterstützen. Die meisten davon sind ungewöhnlich. Es ist schwer, eine Präferenz zu haben, nur weil ich Nachteile bei allen sehe (hauptsächlich die Unterstützung).
Ein weiterer toller Artikel Chris, danke!
Chris –
Das einzige Szenario, in dem physische Einheiten (in., cm.) meiner Meinung nach nützlich wären, ist der Bau von etwas, das letztendlich gedruckt werden soll.
Zum Beispiel arbeitet unser Unternehmen mit einem Kunden zusammen, um Drucke von allem, was Sie wollen, in einer bestimmten Druckgröße anzufertigen. Sie können auch ein Logo in einen Bereich hochladen, der etwa 4 Zoll x 2 Zoll groß ist. Die Website wird eine Live-Vorschau haben, daher könnte es nützlich sein zu sehen, wie ein Logo in diesem tatsächlichen physischen Raum aussieht.
Das ist ein sehr nützlicher Beitrag.
Aber er erfordert mehr Erklärung zur Verwendung von em, rem und anderen Dingen.
Wenn möglich, könnten Sie ein Beispielprogramm nehmen, dann wäre es nützlicher.
Und unten haben Sie ein gutes Beispiel für deren Verwendung gegeben.
Seltsam... Sie sagen, dass
chkeine Webkit-Unterstützung hat, aber Ihr Test zeigt, dass es in meiner Chrome 27 Beta unterstützt wird. Toller Beitrag trotzdem, er ist eine großartige Referenz.Ich benutze immer ems für Schriftarten.
Für alles andere habe ich immer Pixel verwendet, aber mit dem Aufkommen von RWD verwende ich in letzter Zeit Prozente.
Ja, ich verwende universell relative Messungen, bis auf einen Fall. Hier sehen Sie "keinen praktischen Nutzen", und ich würde gerne Ihre Gedanken dazu hören. Meine Grafikeditoren speichern Bilder in exakten Pixelgrößen. Um diese als z. B. Hintergrundbilder (Icons?) zu verwenden, um einen Link zu illustrieren, verwende ich manchmal padding-left: [n]px, wobei "n" das Bild aufnimmt. Da ich eine größenverstellbare Schrift, aber *kein* größenverstellbares Bild verwende, was würden Sie sonst vorschlagen?
Das sind zu viele, aber ich kannte nur wenige davon.
Chris Coyier, vielen Dank nochmals für so einen tollen Artikel :)
Das ich oft px benutze
Ich möchte fragen, welche der oben genannten Größen besser ist?
Vielen Dank
Webkit- und Blink-basierte Browser scheinen prozentuale Höhen für die Nachfahren von Elementen, die eine Höhe in
vh-Einheit haben, falsch anzuwenden. In diesem Fiddle machen Fx und (sogar) IE9 den verschachtelten (grünen) div so hoch wie sein 70-vh-hoher roter Elternteil, während Chrome und iOS Safari ihn überhaupt nicht dehnen.Können Sie bitte über das neue IOS-Verhalten auf Retina-Displays aktualisieren?
Ich schätze, sie haben es vorher nicht implementiert, weil 10vw auf Retina-Displays GRÖSSER ist als auf einem Desktop.
Ich habe Ihre (und andere) coolen Ideen zur Verwendung von vw zur dynamischen Änderung von Schriftgrößen in meinem neuen Layout verfolgt, und jetzt, wo ich anfange, die Touch-Dropdowns (eine weitere Bombe) für die mobile Version zu testen, stelle ich fest, dass ALLE dynamisch skalierten Elemente (viele!) auf iOS doppelt so groß sind!
Die Simulation von Chrome Developer Tools für das genaue Gerät (iPhone 5) ist FALSCH, selbst mit benutzerdefinierter Einrichtung kann ich keine gleichen Ergebnisse erzielen.
Kurz gesagt: Behalten Sie die Regeln mit vw-Einheiten im Auge und erstellen Sie eine neue Version mit der halben Größe für devicePixelRatio von 2 (das muss einfach mit SASS gehen, aber ich hatte noch nicht genug Zeit, es zu lernen, um im Voraus dafür zu planen).
Jetzt muss ich recherchieren, wie ich meiner body-Element eine neue Pixel-Ratio-Klasse hinzufüge, um die Größen nur auf Retina-Displays zu ändern :(