Ich habe Text schon immer nur in px skaliert. Selbst als es ganz offensichtlich uncool war, dies zu tun – in den Tagen, als clevere Leute Wert darauf legten, dass Text in px nicht in IE 6-8 skaliert werden konnte. Ich bin jetzt auf Ems umgestiegen. Ich habe noch nicht jedes einzelne Projekt umgestellt, aber meine Denkweise hat sich geändert. Warum? Ich habe endlich ein paar überzeugende Gründe gefunden, die ich jetzt verstehe.
Sie müssen die Schriftgrößen für verschiedene Bildschirmgrößen ändern
Die gleiche Körpergröße, die auf einem Handybildschirm gut aussieht, sieht auf einem breiten Desktop-Layout nicht gut aus. Sehen Sie sich Trent's Seite als gutes Beispiel an. Text sollte auf großen Bildschirmen etwas größer sein.
Nehmen wir an, Sie durchsuchen Ihr Stylesheet und finden 50 verschiedene font-size-Deklarationen in px. Das sind 50 Stellen, an denen Sie die Schriftgröße über eine Media Query ändern müssen, wenn sich die Bildschirmgröße ändert. Das sind 50 Rückschläge.
Zunächst einmal sind 50 Stellen zu viele für alle außer den größten Websites. Aber nehmen wir an, diese 50 Stellen wären alle in em. Nun müssen Sie über Media Queries nur noch die Schriftgröße des Body ändern, und diese Änderung wird sich im gesamten Dokument ausbreiten und die Größen entsprechend anpassen.
body {
font-size: x-large;
}
@media (max-width: 1000px) {
body { font-size: large; }
}
@media (max-width: 500px) {
body { font-size: medium; }
}
Es ist sowieso willkürlich
Geräte versuchen zwar, die physische Größe von „1px“ unabhängig von ihrer Bildschirmdichte zu normalisieren. Was für eine seltsame Sache. Ein Pixel hat nichts mit einem echten Pixel auf Ihrem Bildschirm zu tun. Es ist tatsächlich eine Winkelmessung.
Sie fühlen sich vielleicht wohler, wenn Sie in px skalieren, weil Sie es schon länger tun, aber das macht es nicht intuitiver. Sie wählen einen Wert, der auf dem Bildschirm gut aussieht. Was spielt es für eine Rolle, ob es 1,35 oder 17 ist?
Relativer Raum
Nehmen wir an, Sie verwenden Bildsymbole in Ihrem Design. Sie möchten sie nach Belieben auf Überschriften anwenden. Sie möchten, dass die Größe dieser Symbole proportional zur Größe der Überschrift ist. Sie können keinen Platz wie padding-left: 20px reservieren, da dies immer 20px sein wird, unabhängig von der Schriftgröße der Überschrift. Wenn Sie diesen Abstand in ems festlegen, können Sie einen Raum reservieren, der sich auf die aktuelle font-size dieser Überschrift bezieht.
Beziehungen
Wenn Sie sich voll auf Ems einlassen, können Sie Dinge wie margin und padding in ems festlegen. Das bedeutet, wenn Sie die font-size des Bodys reduzieren, wird auch der Abstand auf Ihrer Website reduziert. Dies verbindet das Design Ihrer Website mit der Typografie, was eine Art großer Ying/Yang-Synergie-Aktion ist.
Kleine Nachteile
Es gibt immer noch ein paar ärgerliche Dinge mit Ems, wie die Kaskadierung. Wenn Sie entscheiden, dass Listenelemente font-size: 1.1em haben sollen und dann verschachtelte Listen haben, wird dies kaskadiert und die Schriftgröße der Kind-Listen erhöht. Das wollten Sie wahrscheinlich nicht. Sie können es mit li li { font-size: 1em; } beheben, aber das ist die Art von Sache, die einem auf den Keks gehen kann. Dort können Rems ins Spiel kommen, aber das kann auch knifflig sein, da die Browserunterstützung geringer ist (IE 9+).
Sollte Rems sein, das ist der Weg Root Ems :)
Ich erwähne Rems im Artikel. Ich liebe sie. Sie müssen entweder IE 9+ haben oder Fallbacks schreiben. ( Mixin dafür )
Ich verwende oft EMs für meine Schriftgrößen, aber wenn es um Margins und Paddings geht, bleibe ich bei px, weil es fast unmöglich ist, Text unterschiedlicher Größen entlang einer Kante auszurichten, wenn unterschiedliche Schriftgrößen beteiligt sind. Ich schätze, die Browserunterstützung für REMs ist jetzt tief genug, dass es eine praktikable Lösung ist.
Verwenden Sie rems mit einem px-Fallback, um Text unterschiedlicher Größen auszurichten ;)
Entschuldigung, habe den zweiten Teil Ihres Kommentars übersehen (ich kann meinen Kommentar leider nicht löschen).
Ich bin mit Andy einverstanden: Schriftgrößen in EMs, Layout und Positionierung in PXs. Das hat für mich viele Jahre gut funktioniert. :)
Wenn Sie den Rand zum übergeordneten Element hinzufügen, das Ihren Text enthält, funktioniert dies hervorragend, insbesondere wenn Sie auch border-box verwenden.
Ich bevorzuge tatsächlich
emgegenüberrem, weil (wie Sie oben erwähnt haben) der relative Raum bei Verwendung vonemviel einfacher ist. Außerdem können Sie mitemleicht die Zeilenhöhe und den unteren Rand an die Schriftgröße koppeln (wie es sein *sollte*), nicht an die Wurzel. Glückwunsch zum Wechsel! Ihr Leben wird (wahrscheinlich) einfacher, ich weiß, dass meines es ist.Ich habe auch mein ganzes Leben mit px gearbeitet. Ich werde es ausprobieren.
Sie könnten auch einige Mixins schreiben (vorausgesetzt, Sie verwenden einen Präprozessor), die all Ihre Konvertierungen für Sie durchführen können. Dann können Sie jede gewünschte Einheit in Ihrem Less verwenden, und es wird in die richtigen Ems kompiliert.
Zum Beispiel: font-size: fsize(17);
Und dann würde fsize diese 17 in den entsprechenden em/px-Wert umwandeln. Persönlich fühle ich mich mit Pixeln immer noch am wohlsten, da jedes Design, das ich erhalte, spezifische Pixelgrößen für die Typografie verwendet und es einfach einfacher ist, dies im Typ-Explorer nachzuschlagen und in das CSS einzufügen.
Sie könnten font-size: 10px auf dem Body setzen, dann ist jedes 1em 10px. Dann arbeiten Sie wie gewohnt, fügen aber die Überschreibung auf untergeordnete li-Elemente usw. hinzu. So habe ich angefangen, em zu verwenden, ohne meine Denkweise zu sehr zu ändern.
Das hat mein WordPress und mein Leben gerettet, zusammen mit stundenlanger mobiler Optimierung, danke css-tricks, meine neue Lieblings-Code-Website!!
Ich benutze auch immer noch Pixel, um alles einzustellen, bin aber fasziniert von der Verwendung von Ems. Können Sie ein paar gute Beispiele geben, wie sie im wirklichen Leben verwendet werden? Soweit ich das beurteilen kann, scheinen diese Seite und Trent Waltons, die Sie verlinkt haben, px und nicht em zu verwenden. Da 1 em relativ zur aktuellen Schriftgröße ist, stellen Sie die Schriftgröße immer noch in Pixeln ein? Wenn ich
body { font-size: 16px; }undh1 { font-size: 2em; }einstelle, wie groß wird ein em in meinem h1 sein? 16px oder 32px?Die Skalierung Ihres h1 auf 2em bei einer Körper-Schriftgröße von 16px ergibt nach meinem Wissen das Äquivalent von 32px. Ich glaube jedoch, es wäre besser, den Körper von Anfang an mit Prozentwerten einzustellen und diese Prozentwerte dann innerhalb von Media Queries zu ändern, um sie an verschiedene Bildschirmgrößen anzupassen. Sagen wir, body { font-size: 100%/1.5 } dann h1 { font-size: 3em; 16*3=48 } h2 { font-size: 2.25em; 16*2.25=36 }.
Wenn Sie dann zu @media query (min-width: 30em) gehen, könnten Sie z. B. body { font-size: 120% } tun, und all Ihre Überschriften- und Absatzstile würden folgen.
Danke. Was bedeuten die Prozentangaben genau? Wenn ich
body { font-size: 100%; }einstelle, wovon stelle ich es auf 100 % ein? Für mich sieht es so aus, als sollte die Schrift die gleiche Höhe haben wie der gesamte Körper der Seite. Offensichtlich ist das nicht der Fall, aber wie funktioniert das?Ich bin mir nicht sicher, ob dies unter Ihrer letzten Frage gepostet wird oder nicht, da ich nicht direkt auf Ihren letzten Kommentar antworten kann, aber die Einstellung von font-size auf 100% für den Body setzt den Text auf das, was der Browser als 100% betrachtet. Das sind oft 16px. So erhalten wir 3em, was 48px entspricht. Deshalb erwähnte Chris Coyier den relativen Abstand zwischen den Dingen. Wenn Sie dieses eine Prozent ändern, ändert sich alles andere, sodass Sie es nur an einer Stelle ändern müssen. Wenn Sie kleinere Text für einen mobilen Bildschirm wünschen, stellen Sie die body font-size beispielsweise auf 75 % ein. Dadurch werden alle anderen von Ihnen mit em-Einheiten eingestellten Textgrößen automatisch skaliert. Dann, wenn Sie zu einer „Tablet“-Bildschirmgröße gelangen, könnten Sie die body font-size auf 100 % setzen, und auf einer „Desktop“-Größe können Sie sie auf 120 % setzen, wenn Sie möchten. Es ist einfach viel einfacher, Schriftgrößen auf diese Weise zu ändern.
Sie können diesen Rem-Mixin zum Skalieren aller Ihrer Elemente verwenden, nicht nur font-size: https://github.com/bitmanic/rem
Obwohl dieser Mixin eine coole Lösung ist, ist das Problem, auf das ich bei ähnlichen Lösungen gestoßen bin, dass Ihr Sass-Code später schwer zu lesen ist. Alle Ihre Regeln bestehen aus Mixins, und ich ziehe es vor, Mixins für größere, komplexere CSS-Regeln zu verwenden.
Hier ist eine Sass-Funktion, die ich geschrieben habe und die dasselbe tut, aber Ihr CSS-Schreiben etwas normaler gestaltet.
https://github.com/Anotheruiguy/stipe/blob/master/stylesheets/stipe/typography/_functions.scss
Mit dieser Funktion müssen Sie lediglich einen Wert für die Variable
$font_sizefestlegen. Beispiel:$font_size: 12Dann könnten Sie in Ihrem Sass die folgende Regel schreiben
.block {padding: em(30);
line-height: em(16);
}
Ihr CSS würde dann dies tun
css.block {
padding: 2.5em;
line-height: 1.33333em;
}
Die em-Funktion nimmt zwei Argumente,
$targetund$context. Standardmäßig verwendet der Kontext den Wert$font-size, aber wenn Sie den Kontext überschreiben müssen, weil em-basierte Skalierung zusammengesetzt ist, übergeben Sie einfach den Wert des entsprechenden Kontexts.Zufälligerweise schreibe ich gerade meine erste Website in Rems. Ich habe Prozente und ems verwendet, um meine Seitenelemente zu skalieren. Und rems mit einem px-Fallback für Schriften.
Mein Projekt erfordert, dass ich IE7 und höher unterstütze, und ehrlich gesagt war der Prozess bisher recht schmerzfrei. Bis zu diesem Projekt war ich ein langjähriger px-Benutzer. Ich wollte sehen, welche Herausforderungen ich beim Wechsel zu einem flexibleren Messsystem haben würde, aber bisher war es ziemlich einfach.
Aber der eigentliche Grund, warum ich zu Ems gewechselt habe, hatte wenig mit Schriften zu tun. Ich war mit Pixeln zufrieden, sie waren bequem wie ein alter Schuh. Stattdessen habe ich wegen em-basierter Media-Queries gewechselt. Hier ist ein Link zur Referenz
http://blog.cloudfour.com/the-ems-have-it-proportional-media-queries-ftw/
Nachdem ich das gelesen und die Vorteile von em-basierten Media-Queries gesehen hatte, dachte ich, es sei Zeit für neue Schuhe. ;)
Toller Artikel, ich werde mein Projekt durchgehen, nach diesen lästigen px-Schriftgrößen suchen und sie mit einer großzügigen Dosis ems bestrafen :)
Ich benutze gerade Ems für eine neue Produktionsseite, die ich mache – es macht tatsächlich ziemlich Spaß! Mein CSS sieht ungefähr so aus
Und so weiter… Ich finde, es hilft, die Konsistenz mit dem Abstand zu wahren, denn selbst wenn ich die Größe eines
h1für ein bestimmtes Element ändere, werden sich die Ränder entsprechend verkleinern, aber proportional zu den größerenh1s bleiben.Ich experimentiere jedoch mit der Verwendung von % für alle Breiten, was erfordert, dass Seitenränder/Abstände ebenfalls mit % skaliert werden – dies wird wahrscheinlich zu Problemen führen, wenn ich die Basisschriftgröße erhöhe, wenn der Bildschirm kleiner wird (Rand/Abstand oben und unten wären nicht gleich), aber ich denke, ich werde dieses Hindernis überwinden, wenn es soweit ist! Vorerst mag ich einfach die Flexibilität, die Ems mit sich bringen!
Becky, ich bin sicher, du wirst eine Lösung für dein Problem finden, aber ich frage mich, ob es überhaupt ein Problem sein wird. Möchtest du nicht, dass deine oberen und unteren Ränder und Abstände relativ zu deiner Schriftgröße sind? Ich denke, das würde einen besseren vertikalen Rhythmus ermöglichen, wenn dein oberer und unterer Abstand auf die Schriftgröße und nicht auf die Bildschirmbreite bezogen ist.
Hallo Becky, Sie können immer Media Queries verwenden, um Anpassungen vorzunehmen, wenn Sie zu kleineren Schriftgrößen gelangen. Selbst wenn die Größen erwartungsgemäß relational bleiben, werden Sie feststellen, dass je nach Bildschirmgröße/Viewport Dinge manchmal noch angepasst werden müssen.
Ich verwende eine SCSS-Funktion, um dabei zu helfen
Das erlaubt mir, sie mit dem Standardkontext von 16pt zu verwenden, aber auch den Kontext bereitzustellen, wenn sie etwas anderes als 16px erbt.
Ich stimme Doug zu, dies ist ein gültiger und sauberer Weg, dies zu tun. Anstatt sich auf die Kompatibilität von
remin verschiedenen Browsern zu verlassen, ist es schön, die Verantwortung an unseren Code zu delegieren.Entwickeln wir Websites für Benutzer oder entwickeln wir Websites für Bildschirmgrößen?
Leider gehen EM-Ansätze und responsives Webdesign davon aus, dass der Benutzer möchte, dass sein Bildschirm „gefüllt“ wird.
Wenn ich mir jedoch eine Website wie trentwalton.com ansehe, zoome ich „heraus“, um mehr von der Seite im Browserfenster sehen zu können, nicht nur, um den zusätzlichen Platz mit Inhalt gefüllt zu haben, oder auf Tarents Seite wird der zusätzliche Platz mit größerer Schrift gefüllt, was nicht der Grund ist, warum ich die Seite größer geöffnet habe – ich habe sie größer geöffnet, um mehr vom Inhalt zu sehen…
Als Webentwickler müssen wir darüber nachdenken, wie wir Benutzer beeinflussen, die eine bestimmte Ansichtsweise bevorzugen, ohne sie zu zwingen, mit einem Design/Layout zu interagieren, das sich aufgrund von EM-basierter Entwicklung ausdehnt und wächst.
Wie bereits erwähnt – damit ich die bevorzugte Ansichtsweise erhalte (da trentwalton.com EM-Schriften und responsives Design verwendet), musste ich auf 50 % herauszoomen, damit mein Browser vollständig geöffnet sein kann, ohne gezwungen zu sein, Schriftgrößen zu sehen, die für einen blinden Menschen zu groß zum Lesen sind.
Wenn wir als Webentwickler nur darauf bedacht sind, so viel Inhalt wie möglich in den Ansichtsbildschirm zu quetschen, werden wir die Idee, unseren Besuchern eine angenehme Website mit logischer Organisation zu bieten, weiterhin ignorieren.
Ich bin mir nicht sicher, ob das der Punkt ist, der hier gemacht wird. Trents Website ist sicherlich ein Testfeld für das, was möglich ist, und nicht unbedingt für das, was für alle am besten ist. Ehrlich gesagt gefällt sie mir, weil ich mich zurücklehnen und lesen kann. Der Sinn der Verwendung von Ems ist nicht, Benutzer zu stören, sondern eine flexiblere Lösung für ein großes Problem zu ermöglichen.
Was viele Leute nicht wissen, ist, dass man Ems für Breiten, Ränder und Positionen verwenden kann, zum Beispiel: Sie haben eine feste Navigation, die eine Schriftgröße und einen Rand hat, aber keine feste Höhe.
Sie möchten dem Body einen Abstand hinzufügen, der der Höhe der Navigation entspricht.
Sie können den Abstand des Bodys in ems festlegen, damit er sich automatisch mit der Schriftgröße ändert :D Auch großartig für Texteinrückungen und geflutete Bilder.
Ich verwende Ems ständig auf Boxen und es ist wunderbar :D
Guter Punkt, William.
Ich habe ein Code-Pen-Beispiel hochgeladen, wie man Breakpoints auf Ems setzt, aber die Breiten in Prozent.
Wenn Sie die Basisschriftgröße im Pen ändern, können Sie sehen, wie sie sich auf die Breakpoints auswirkt.
@Justin Avery, ohne viel eigene Tests gemacht zu haben, sagen wir mal, Sie möchten die body font-size in einer Media Query anpassen. Wenn die Abfrage selbst ems verwendet (eine gute Praxis), wird die Änderung der body font-size beeinflussen, wann Ihre Breakpoints auftreten, oder werden die Media Queries immer noch auf die Basiskörper-Schriftgröße außerhalb von Media Queries zurückgreifen? Oder beeinflusst die Änderung der Schriftgröße überhaupt Media Queries?
Ich habe gerade meine eigene Frage beantwortet, indem ich Justins Pen geforked und ein paar Dinge ausprobiert habe. Ich habe die body font-size auf 3em für den 75em Breakpoint gesetzt und es hat die Media Query-Auslösung nicht beeinflusst. Die Media Query in ems scheint sich auf den Browser-Standard zu beziehen, vielleicht?
@christopherisaak
Es scheint den Breakpoint nicht zu beeinflussen. Ich nehme an, wenn es das tun würde, könnten Sie sich in einer Endlosschleife befinden, in der sich Ihre Seite ausdehnt und zusammenzieht.
Etwas, das ich getan habe, um den Einfluss auf die Skalierung anderer Elemente innerhalb dieses Pens zu zeigen, war, die maximale Breite des Containers auf 64em zu setzen. Das wird definitiv von der Körpergröße beeinflusst.
Wenn Sie die
bodyfont-size auf 1.1em erhöhen würden, wird diemax-widthzu 64em x 1.1em..container { width: 100%; max-width: 64em; margin: 0 auto; } @media screen and (min-width:75em) { /* 75.000em = (1200 px)*/ body { font-size: 1.1em; } }Ich liebe das em. Für Leser, die neugierig sind, hier ist ein weiterer guter Artikel über das em.
http://v1.jontangerine.com/log/2007/09/the-incredible-em-and-elastic-layouts-with-css
Ich verwende % und EMs seit mehr als zehn Jahren, dieses Jahr habe ich zu PX gewechselt, wegen einiger sehr wichtiger Gründe
– Die Entwicklungszeit in PX ist viel geringer
– Schriften und Zeilenhöhen sehen zwischen den Browsern identischer aus
Für alle, die gerade mit EMs angefangen haben, empfehle ich, sich Yahoo anzusehen: YUI 2: Grids CSS
Ich stimme der geringeren Entwicklungszeit zu, aber ich hatte keine Ahnung, dass die Verwendung von px zu identischeren Schriften/Zeilenhöhen crossbrowser führt. Ist das wirklich wahr?
Ja, das ist wirklich wahr. Selbst zwischen Webkit-Versionen variiert die Art und Weise, wie Ems vererbt werden.
Mir gefällt, dass Sie „grok“ in einem Satz verwendet haben. Musste das wiki.
Ich habe px verwendet, aber dieser Artikel lässt mich darüber nachdenken. Ich werde es in meinen Mockup-Designs untersuchen und sehen, ob ich es für mich zum Laufen bringen kann. Mir gefällt, dass rem eine schöne neue Größeneinheit zu sein scheint.
Wussten Sie, dass die CSS-Em-Einheit ursprünglich von der Breite des Großbuchstabens M abgeleitet wurde, woher auch ihr Name stammt?
Ziemlich interessante Tatsache, wenn Sie mich fragen.
Ich verwende trotz der offensichtlichen Probleme damit Pixel. Ich stimme jedoch Ihrem Punkt nicht zu, dass es mühsam ist, Dinge auf der gesamten Website zu ändern, wenn Sie Pixel verwenden. Ich stelle die Schriftgröße in Pixeln auf dem Body (normalerweise 16px) und den Rest in Prozent ein. Es ist super einfach zu warten und der Browser scheint die Prozentberechnung derzeit durchzuführen.
Schmerz beginnt, wenn es umgekehrt ist: Body in % und der Rest in px.
Ich wäre vorsichtig, die Verwendung von
emauf diese Weise zu befürworten. Die Wartung von Berechnungen in verschachtelten Elementen ist alptraumhaft. Ich habe festgestellt, dass die Verwendung vonemin gewisser Hinsicht die Arbeitsmenge *erhöhen* kann, wenn man von der Verwendung vonpxmigriert.Was ich nützlich fand, ist die Verwendung von
remmitpx-Fallbacks, wie erwähnt.remsind eine freie Variable, und allepx-Fallbacks können durch Verweis auf eine Variable für die Standard-Schriftgröße deklariert werden.z. B.
$default-unit-pxAllein das ist Grund genug, Sass für alle Projekte zu verwenden.
ems sind nützlich für *schriftenbezogene Messungen*, wie die Berechnung des Abstands innerhalb eines Buttons relativ zur Schriftgröße des Blocks.Es gab eine Zeit, in der ich dachte, die Verwendung von
em-Werten sei unnötig kompliziert.Ich habe meine Meinung offensichtlich geändert und verwende
emseit einiger Zeit stattpx. Zuerst für Schriften, dann für Dinge wiewidth/padding/margin/border-radiuswegen der Flexibilität, die ich im Gegenzug erhalte. Manchmal verwende ich aber aus denselben Flexibilitätsgründen %. Es hängt letztendlich davon ab, was genau ich erreichen möchte.Wenn ich zum Beispiel einen Button/ein Logo erstelle und das Ganze größer/kleiner machen möchte, dann muss ich nur die
font-sizeanpassen, und das ist alles erledigt, wenn seine Abmessungen oder Ränder inemeingestellt sind.Aber wenn es um Dinge wie
paddingfür Artikel auf einem Blog geht, muss ich überlegen, wie genau ich möchte, dass es sich mit unterschiedlichen Bildschirmbreiten ändert, und dann entscheiden, ob ich%-Werte (die von derwidthdes übergeordneten Elements abhängen) oderem-Werte (die von derfont-sizedes Elements selbst abhängen) verwende. Und in dieser Situation habe ich mich tatsächlich für%-Werte für kleine Bildschirme entschieden (weil ich möchte, dass der Abstand schnell abnimmt, wenn die Bildschirmbreite abnimmt) und fürem-Werte für große Bildschirme (weil ich nicht auf großen Bildschirmen riesige Abstände haben möchte).Und schließlich habe ich auch
emfür Media Queries verwendet, nachdem ich feststellte, dass meine eigene Website beim Zoomen schrecklich aussah. Ich verwendetepx-basierte Media Queries und ab etwa800pxaufwärts verschob ich das Menü unten rechts vom Inhalt und gab ihm eine festewidthundposition: fixed;.Ich nervte so viele Leute, damit sie prüften, wie es auf ihren verschiedenen Mobiltelefonen aussah, aber es fiel mir nie ein, dass ich prüfen sollte, wie es auf meinem eigenen Laptop beim Zoomen aussieht. Bis ich diesen Artikel las. Ich fühlte mich wie Wile E. Coyote, als mir klar wurde, dass mein perfekter Plan, den Road Runner zu fangen, nach hinten losgegangen war.
Nun, aber die Frage ist, ob man wirklich riesige Ränder/Abstände braucht, wenn die Schrift riesig ist (z. B. beim Zoomen mit Seitenzoom)? Ich glaube nicht, da es das Erscheinungsbild eines Designs komplett zerstören kann. Wenn jemand größeren Text wünscht, möchte er nicht automatisch größeren Raum. Ich denke, überall Ems zu verwenden ist sehr, sehr gefährlich und kann Ihr Design viel mehr ruinieren als die Verwendung von px. Das bedeutet aber nicht, dass Sie letzteres verwenden sollten. rem ist definitiv der richtige Weg!
Ich habe lange mit dem Wechsel von Ems zu PX gekämpft, hauptsächlich weil px nach all den Jahren einfach instinktiv für mich ist. Ems scheint so willkürlich und nicht konsistent…
Da wir aber alle jetzt Präprozessoren verwenden, die Variablen (SCSS) unterstützen, frage ich mich, ob ich einige Erfolge damit erzielen könnte, Schriftgrößen und einige Abstände mit Variablen festzulegen und mit Variablen statt mit Zahlen in meiner Stilgestaltung zu arbeiten, was es einfacher macht, Dinge zu optimieren und zu ändern.
Nur eine Idee!
Ich hätte die Kommentare aller lesen sollen, bevor ich das hier poste #erröte
Nur eine Anfängerfrage hier. Wenn ich meine Body-Schriftgröße auf 1em setze, ist das 1em wovon? Und wenn ich meine Ränder/Abstände auch in em setze, sind das em wovon, der Body-Schriftgröße?
Das wäre 1em bei der Browser-Schriftgröße (normalerweise 16px). Ränder und Abstände in em basieren auf dem zuletzt deklarierten Wert; wenn Sie Ränder/Abstände in em am Body deklarieren, wo Sie eine Schriftgröße von 1em deklariert haben, dann werden die Werte vom Body berechnet. Wenn Sie im selben Dokument eine niedrigere Schriftgröße in em für Absätze deklarieren, und dann Ränder/Abstände für Absätze deklarieren, werden die Ränder/Abstände basierend auf der Absatz-Schriftgröße berechnet.
(Wenn das das irgendwie klärt!)
Ich würde gerne rem/em verwenden, habe mich aber noch nicht getraut, da ich weiß, dass es einige Probleme und Komplikationen gibt, mit denen man sich auseinandersetzen muss...
Sieht so aus, als gäbe es ein Zoom-Problem in Webkit, das die Verwendung von ems in Media Queries beeinträchtigen würde: http://alastairc.ac/2012/01/zooming-bug-in-webkit/
Außerdem frage ich mich, ob die Wiedergabe von Webfonts mit ems leidet, wenn sie zu Bruchteilen von Pixeln führen. Weiß jemand, ob der Browser zu angezeigten Größen rundet, wenn ems verwendet werden? Ich habe einige hässliche Darstellungen mit Webfonts gesehen (sogar beliebte kostenpflichtige), die keine TrueType-Hinting haben, wenn die Größe keine ganzen Zahlen ist. Bin mir nicht sicher, ob das zusammenhängt.
Ein kleiner Tipp zur Verwendung von ems. Wenn Sie die Schriftgröße auf 62,5% setzen, dann ist 1 em = 10px. Dies ermöglicht schnellere Berechnungen vor Ort.
Zum Beispiel,
10px = 1em.
20px = 2em.
14px = 1,4 em und so weiter.
Herauszufinden, was 28px in ems sind, ist auf diese Weise viel einfacher, als wenn Ihre Schriftgröße auf 16px oder 100% eingestellt wäre.
... oder für ein pixelgenaueres Layout, stellen Sie die Schriftgröße sicherheitshalber auf 10px.
Das Problem ist, dass nicht alle Benutzer möchten, dass Sie ihre Einstellungen überschreiben. Es gibt einen sehr guten Grund, warum die grundlegende Schriftgröße 'normalisiert' ist, aber mit Benutzer-Stylesheets überschrieben werden kann.
In einer responsiven Umgebung würde ich **immer** %-basierte Schriftgrößen (oder em, wenn Sie möchten, obwohl %-basierte besser in älteren Browsern skalieren) und em-basierte Media Queries empfehlen. Dies funktioniert am besten, wenn Sie sich wirklich darum kümmern, Ihren Benutzern die Kontrolle über ihre eigenen Stile zu geben.
Pixelbasierte Media Queries sind meiner Meinung nach furchtbar, da sie zum Beispiel beim Zoomen „brechen“. Da ems relativ zur Schriftgröße sind, reagieren die Media Queries viel besser.
Zum Nachdenken ;-)
Ich wette, es gibt einige gute Codepens, die als Vorlage für die Demonstration der em-Vererbung dienen können. Kennt jemand welche?
Ebenfalls nützlich für proportionale Media Queries wie:
@media screen and (max-width:50em) {}Falls Sie es verpasst haben, wir haben weiter oben in den Kommentaren etwas mehr über proportionale Media Queries gesprochen: weiter oben in den Kommentaren.
Das ist ein schwieriges Thema.
Der Hauptgrund für Ihre Analysen ist, dass die Leute einen kleinen Bildschirm weiter entfernt halten als einen großen, aber die DPI sich nicht ändert (nicht über HiDPI/Retina sprechend, dasselbe gilt). Daher ist die tatsächliche visuelle DPI (also mit Abstand) tatsächlich unterschiedlich. Und hier können EMs eine Rolle spielen. Aber seien Sie sich bewusst, dass die tatsächliche Größe eines Bildschirms immer noch in Pixeln angegeben wird. Wenn Sie also em für div-Breitenanpassungen verwenden, stellen Sie sicher, dass Ihr Text auf jedem Gerät passt, aber auf dem Bildschirm selbst kann es im Vergleich zur Größenanpassung Ihres Browsers auf einem Desktop sehr daneben aussehen. Da Benutzer ihre Basis-Schriftgröße unterschiedlich haben können
Ich weiß nicht, ob "small" als Schriftgröße auf einem Handy als dasselbe px kompiliert wird wie auf einem Desktop. Ich denke, das sollte anders sein, aus den oben genannten Gründen, aber wahrscheinlich ist es das nicht, da die Komplexität für Webentwickler und schließlich für Benutzer, die Websites sehen, alle durcheinander sind.
Auf einem Handy stehen Produktivität (Lesbarkeit und Geschwindigkeit) weit über dem Desktop-Erlebnis. Daher denke ich, dass das Layout den Aufwand tragen sollte und der Text immer gut lesbar sein sollte. So passen sich Webentwickler an ihre Dinge an und nicht umgekehrt.
Nachdem ich das gerade geschrieben habe, frage ich mich, ob das, was ich gesagt habe, wahr ist.
Hat Apple zum Beispiel, das den ersten Standard in Bezug auf DPI für Mobiltelefone geschaffen hat, einfach damit umgegangen, sicherzustellen, dass die visuelle DPI wie die visuelle DPI auf einem Desktop aussieht?
Das würde viel mehr Sinn ergeben. Und dann ist Ihr Artikel ein wenig falsch. Da er gut analysiert ist, um sicherzustellen, dass diese beiden passen.
Meiner Erfahrung nach sind Schriftarten auf Mobiltelefonen oft zu klein. In "Reader" zum Beispiel (iOS) mache ich den Text etwas größer.
Oder ist die allgemeine Armlänge, sodass die visuelle DPI global ungefähr gleich ist? Und die visuelle DPI von Desktops sehr unterschiedlich, da alle unterschiedliche Schreibtische und Arbeitsweisen haben?
Interessantes Thema, bei dem Apple sicherlich 3 Jahre investiert hat, um zu entscheiden, welche genaue DPI auf einem iPhone sein sollte, was den Standard geschaffen hat.
Ich hoffe wirklich, dass DPI nicht wie Megapixel bei Kameras wird. Da es sorgfältig ausgewählt werden muss, um gute Proportionen zu schaffen.
Alles Vertikale verwende ich
emund alles Horizontale verwende ich%.Es gibt ein paar Fälle, in denen ich
emfür horizontale Dinge verwende, wenn ich nicht möchte, dass die Entfernung je nach Bildschirmgröße abnimmt.Hallo!!
Ich stimme Ihnen zu...
Das mache ich bei allen Vorlagen, die ich entwerfe. :)
Ems für Randbreiten: Ein Viertel Spaltenbreite geteilt durch die Grundschriftgröße (auf die nächste ungerade Zahl gerundet) = Em Randbreite
Ja, ich liebe ems für Schriftgrößen, aber ich habe mich nie für Breiten und Höhen zurechtgefunden.
Ich bin vor einiger Zeit von px auf % umgestiegen.
Vielleicht übersehe ich etwas, aber sind % und em in Bezug auf ihre Vorteile und Funktionalität im Grunde austauschbar?
Anders ausgedrückt: Gibt es einen Grund, warum Sie sich speziell für em gegenüber % entscheiden würden? Wenn ja, können Sie mir bitte einige Artikel nennen, die die Vor-/Nachteile/Unterschiede erklären? Danke!
Sie sind **ziemlich** gleich, aber es gibt einige Unterschiede.
Der Hauptunterschied besteht darin, dass die
em-Einheit ihre relative Messung von der Grundkörpertextgröße nimmt.Wenn Sie **16px** als
body-Größe festlegen, dann1em = 16px, 20em = 320px, 60em = 960px.
Wenn Sie **10px** als
body-Größe festlegen, dann1em = 10px, 20em = 200px, 60em = 600px.
Das andere Problem ist, dass
emsich auf die Messung seines übergeordneten Elements bezieht (deshalb haben Leuteremvorgeschlagen, da sie sich immer auf die Stamm-Messung beziehen).Seltsamerweise hat die Festlegung der Breite eines Elements in
emkeinen Einfluss auf andere untergeordnete Elemente, die ebenfalls inems festgelegt sind, noch hat sie Auswirkungen auf diefont-size.Wenn Sie einem Container eine
font-size: 2em;zuweisen, dann werden alle untergeordneten Elemente, die inems festgelegt sind, verdoppelt, ebenso wie der Container selbst, wenn die Breiten inems festgelegt sind.Eigentlich möchte ich eine Diskussion vom Anfang des Threads klären. Ich verwende seit Jahren px und finde es sehr erfolgreich, aber da sich die Displays und die Pixeldichte (wie beim neuen MacBook Pro zum Beispiel) immer stärker unterscheiden, ist es zum gesunden Menschenverstand geworden, zu einer viel professionelleren Methode wie em oder % zu wechseln. Wenn ich in der Vergangenheit dynamische Websites erstellt habe, habe ich mich eher für % als für em entschieden, weil ich die Ergebnisse günstiger fand – man muss sich nicht auf die Eltern-Messung verlassen. Das habe ich herausgefunden, als ich an einer Website arbeitete, die effektiv voll breit war und einen Header wollte, der sich an die Breite der Website anpasste. Ich glaube nicht, dass sie in em so flexibel gewesen wäre, also habe ich mich für % entschieden. Ich habe ein paar Websites, an denen ich arbeite http://www.reynoldsdigital.com, die in Zukunft em verwenden werden, damit ich mit weiteren Erkenntnissen berichten kann!
Ich bin froh zu sehen, dass ich nicht der Einzige bin, der über die Jahre bei px für Schriftgrößen geblieben ist (ich habe ems ausprobiert, fand sie aber verwirrend zu verfolgen). Allerdings benutze ich jetzt ems, da ich möchte, dass meine Websites ab sofort responsiv sind, und meiner Meinung nach ist dies der beste Weg für meine Website-Schriften (auch meine jüngsten Schritte in Richtung SASS machen es viel einfacher, die benötigten ems für die Schriftgrößen im Auge zu behalten, ohne Berechnungen und das übergeordnete Element, auf das ich mich beziehe, auswendig lernen zu müssen).
Ich habe rem jetzt für ein paar Projekte verwendet und bin damit ziemlich zufrieden. Zuvor habe ich so ziemlich alles mit em gemacht, aber das Verschachteln hat mich manchmal verrückt gemacht. Ich kämpfe jedoch immer noch damit, ob ich für bestimmte Elemente em anstelle von rem verwenden soll, damit sich die Abstände entsprechend anpassen.
Aber andererseits, wenn jemand die Schriftgröße erhöht, bedeutet das nicht automatisch, dass er auch riesige Abstände/Polster wünscht. Denn wenn alles in rem eingestellt ist und man Seitenziel verwendet, werden alle Elemente und Abstände auch größer, aber nicht relativ zum Element selbst, sondern zum Body (und das ist ein großer Unterschied). Aber wenn man em für z.B. eine H1 verwendet und den Rand auch in em einstellt, wird es beim Vergrößern sehr schnell sehr groß. Und deshalb ist rem die Einheit der Wahl: px ist zu einschränkend und em zu locker, zu unvorhersehbar.
Ich habe auch einen Artikel zu diesem Thema geschrieben: http://www.css3files.com/2012/10/11/relative-is-the-new-absolute-the-rem-unit/
Ich denke, der Grund, warum viele Leute px statt em benutzt haben und immer noch benutzen, ist, dass sie Kontrolle wollen. Sie wollen oder können nicht auf Benutzereinstellungen für persönliche Schriftpräferenzen eingehen. Es ist sehr schwer, ein Design zu codieren, das über viele Schriftgrößen hinweg gut aussieht. Der andere Grund ist, dass px zuverlässiger ist (Annahme, nicht 100% sicher) bei der Festlegung von Schriftgrößen über verschiedene Browser hinweg.
Was ich interessant finde, ist, dass viele em-Implementierungen genau dasselbe tun wie exakte Pixelgrößen: Sie legen eine Basislinie fest, normalerweise 10 Pixel, und rechnen dann von dort aus, umgekehrte Ingenieurarbeit von Pixeln in ems. Wir verfolgen dasselbe Ziel wie zuvor: Kontrolle, und wir optimieren unsere Designs für diese spezifischen em-Werte, die, seien wir ehrlich, wir als px-Werte behandeln.
Wie viele von Ihnen ändern tatsächlich die Basis-em-Werte auf sehr unterschiedliche Werte und prüfen dann, ob Ihr Design immer noch funktioniert? Wie gehen Sie damit um, dass 0,8em als Untertext eines Headers mit einer 10px-Basis gut mit dieser 10px-Basis funktioniert, aber auseinanderfällt, wenn eine Basis von 9 oder 8 Pixeln verwendet wird? Wie gehen Sie damit um, dass Padding und Ränder tatsächlich nicht immer proportional zur Schriftgröße sind und dass es in einem responsiven Design viele Grenzfälle gibt, in denen diese Beziehung einfach auseinanderfällt?
Verstehen Sie mich nicht falsch, ich bin ganz für em über px (persönlich benutze ich rem), aber ich denke, es gibt immer noch ernsthafte Probleme damit, die zu wenig diskutiert werden. Ich denke auch, dass nicht jeder das wahre Ziel mitmacht: Designs, die über Schriftgrößen hinweg funktionieren. Das sollte der Sinn von em sein, anstatt Pixelperfektion durch eine andere Methode zu erreichen. Im Moment sehe ich viele Leute, die ihre Browser den ganzen Tag skalieren, um sie responsiv zu machen. Ich sehe nicht, dass Leute Schriftgrößen so oft ändern.
Das ist keine Beschwerde an irgendjemanden oder irgendetwas, ich rante nur laut.
Einige wirklich gute Punkte zum Nachdenken, danke.
Ems für alles, außer für Ränder.
Warum sollten Sie jemals wollen, dass Ihr Layout nicht proportional ist? Das ist das Hauptproblem, das ich mit rems habe, sie skalieren nicht proportional. Das andere große Ausschlusskriterium ist die Verdoppelung von CSS, um Rückwärtskompatibilität zu gewährleisten. Igitt.
Wenn Sie Probleme mit Kaskadeneffekten haben, haben Sie mit ziemlicher Sicherheit entweder Ihre Markup oder Ihr CSS überkompliziert.
Ems sind alle gut, aber verwenden Sie sie klug bei der Erstellung von Layouts.
Angenommen, Sie möchten zu einer Schriftart mit einer anderen x-Höhe wechseln. Wenn es sich um eine Schriftart mit einer geringeren x-Höhe handelt, möchten Sie natürlich die Schriftgröße erhöhen. Aber da Sie ems für Breiten, Ränder, Abstände usw. verwenden, wird die Erhöhung der Schriftgröße das Layout vergrößern und Ihre neue Schriftart wird proportional kleiner aussehen.
Im Wesentlichen, wenn Sie ems für alles verwenden, wissen Sie, dass Sie später keine leichte Möglichkeit haben werden, zu einer Schriftart mit einer anderen x-Höhe zu wechseln. Ich bevorzuge Prozente gegenüber ems für jedes Design/Vorlage, bei der dem Benutzer die Möglichkeit gegeben wird, Schriftarten aus demselben Grund zu ändern. 'px' hat dieses Problem auch nicht, ist aber nicht ideal.
Das Verfolgen dieses Threads ist interessant. Ems gegenüber px ist eindeutig der richtige Weg bei der Entwicklung einer UI, aber ich stimme auch zu, dass die Funktionsweise von ems wirklich nervig ist. Wir brauchen also bessere Werkzeuge.
Sass gibt uns diese Werkzeuge. Schauen Sie sich diesen Codepen an, den ich zusammengestellt habe. Es ist eine schnelle Anleitung, wie man dieses Problem löst.
http://codepen.io/blackfalcon/full/wlzhv
Ich bezog mich hauptsächlich auf Leute, die noch keine CSS-Präprozessoren nutzen können. Und sie denken vielleicht auch nicht frühzeitig über dieses Problem nach. Ja, es kann mit einem CSS-Präprozessor [1] (nicht sehr elegant) behoben werden, aber nicht jeder hat auch Zugang zu CSS-Präprozessoren.
Wenn Sie ein Interface entwerfen, das inhärent und vollständig (Breiten, Ränder, Abstände) an die typografischen Proportionen gebunden ist (daher 'em'), sollten Sie sich nicht für den Wechsel zu sehr unterschiedlichen Schriftfamilien entscheiden. Es ist eine der Grundlagen von em-basierten Layouts, sie sind an Schriftgrößen gebunden.
Jede Änderung Ihrer Schriftgröße führt zu einem Zoom-Effekt. Zum Beispiel, in einem em-basierten Layout, wenn Sie PT Sans (entspricht 13px) durch Open Sans ersetzen möchten (höhere x-Höhe, daher werden jetzt 12px benötigt), wie würden Sie das tun, ohne das gesamte Layout zu vergrößern? SCSS-Beispiel am Ende.
PS: Ich sage nicht, dass em-basierte Layouts nicht verwendet werden sollten. Vielmehr weise ich auf etwas hin, das bei der Erstellung von Vorlagen, bei denen Benutzer Schriftarten anpassen möchten, berücksichtigt werden sollte. Sie könnten eine intelligente CSS-Präprozessor-Funktion verwenden, um das Layout durch ein Verhältnis fest zu halten, oder einfach px oder % ohne viele Nachteile verwenden.
[1] http://codepen.io/joe/full/Jqzru (modifizierte Version des Originals von Dale).
Dieser Mini-Rant war das Ergebnis, dass ich mich kürzlich mit UI auseinandersetzen musste.
Ich stimme dem Poster zu, dass die Arbeit mit ems (oder allem Relativen) eine Qual ist. Es ist ein weiterer Bereich, in dem CSS eine so schreckliche Implementierung ist. Übermäßig komplex, man muss die Spezifitätsgewichtung für jedes verdammte Ding herausfinden, viele Konstrukte sind einfach bizarr und so intuitiv wie Aramäisch, geschrieben von einem betrunkenen Clown.
Ich habe im Frontend angefangen und bin **so** froh, dass ich zur Anwendungsentwicklung gewechselt bin. All die Jahre danach ist CSS immer noch ein Zugwrack.
Gib deinen Werkzeugen keine Schuld.
@Chris Coyier
Hier bei css-tricks.com verwenden Sie px für die meisten Größen.
Haben Sie Ihre Meinung erneut geändert oder den Code noch nicht geändert?
Was ist Ihre aktuelle Empfehlung: em für alles (Rand, Breite, Schriftgröße, Media Queries)?
Das scheint der Ansatz zu sein, den ZURB Foundation 5 verwendet (mit rem stattdessen), aber Bootstrap 3 verwendet z. B. px für fast alles.
Toller Artikel. Ich kann mich nicht erinnern, wann ich aufgehört habe, für die meisten Dinge px zu verwenden, aber das ist schon eine Weile her. Trotzdem verstehe ich, warum die meisten Leute sie immer noch nutzen und bei bestehenden Projekten nicht schnell wechseln. Ich stelle mir vor, dass es bei der Größe dieser Website eine monumentale Aufgabe wäre, sie alle auf em oder rem umzustellen. Denken Sie jedoch daran, dass wir für den Endbenutzer und nicht für andere Designer entwerfen. Ich bezweifle, dass ein Benutzer sagen wird: "Hey, das ist nicht in px, also ist es Mist". Sie werden den Unterschied nicht kennen. Möglicherweise beschweren sie sich oder auch nicht, dass der Text auf einem großen Bildschirm zu klein ist, was ein anderes Problem ist. Dafür müssen Sie es einfach von Fall zu Fall betrachten. Konzentrieren Sie sich auf Dinge, die für den Benutzer wichtig sind, und Sie können nichts falsch machen!
Danke für den tollen Artikel. Ich habe ein Problem, bei dem meine Website anders aussieht, wenn ich sie herauszoome (Schriftgröße und Ränder und Abstände), weil ich em und px beide verwende. Aber ich weiß nicht genau, wie ich sie richtig einsetzen soll.
Ich möchte, dass die Website auch auf einem x-großen Bildschirm genau gleich aussieht wie auf meinem 15-Zoll-Laptop. Was sollte mein Aktionsplan dafür sein?