• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Script Umrechnung px ==> em

thuemmy

Aktives Mitglied
Ich glaube der Titel ist fast schon aussagekräftig genug. Ich suche ein Script/Programm, das mir px-Angaben in CSS-Dateien in em umrechnet. Für den Apple gibt es sowas wohl, aber nicht für den PC unter WinXP.

Gruß thuemmy

P.S. Bis eine (positive) Antwort kommt, werde ich mich mal selber dransetzen und mich an einem PHP-Script versuchen.
 
Werbung:
Ehm...das kommt doch auf die Größe des Fonts an.
Bei einem Font der Größe 16px ist 1em eben 16px und 2em = 32px.
Bei einem Font der Größe 9px ist 1em eben 9px und 2em = 18px.

In den meisten Browsern scheint als Standardgröße 16px eingestellt zu sein.

Demnach ist 1.75em dann 28px und bei der Schriftgröße von 9px ist das dann 15.75px (also 16px).

Oder habe ich nen Denkfehler?
 
Na, wie ich das umrechne, das weiß ich schon. Wenn es sich um 10 px-Werte handeln würde, dann würde ich es von Hand machen, aber es sind doch einige mehr :-)

Der Hintergrund ist der, dass ich durch die Angabe von em erreichen möchte, dass sich sämtliche Elemente, die eine Größenangabe haben, sich bei einer anderen Schriftgrößeneinstellung im Browser, anpassen.

Grßu thuemmy

P.S. In der Tat ist es so, dass es anscheinend einen Standard von 16px=1em gibt.

Das Script macht zwar das, was ich will (Umrechnen sämtlicher px-Angaben in em) aber das Ergebniss ist nicht das, was ich erwwartet habe. Ich dachte, dass ich dadurch die Größe der Boxen, Backgroundbilder usw. in Abhängigkeit der eingestellten Schriftgröße skalieren kann. Aber das ganze Layout wird zerrupft.

Schade, war halt nur ein Versuch.

Gruß thuemmy
 
Zuletzt bearbeitet von einem Moderator:
Werbung:
Was ich beim Arbeiten mit em gemerkt habe ist, dass es besser ist, margin und padding weiter in px anzugeben und wirklich nur Höhe und Breite im em anzugeben. Denn sonst kann es passieren, dass durch die vergrößerten Abstände das Layout zerstört wird.
 
Werbung:
@ Der MitSkill - Danke, den Link hatte ich auch gefunden. Es ging mir aber nicht darum einzelne Werte umzurechnen, sondern eine komplette CSS-Datei. Und wie ich etwas drüber geschrieben habe, habe ich ein Script gemacht, dass genau das macht. Leider war das Ergebniss nicht so, wie ich erwartet habe. Damit meine ich das Layout der Seite.

Gruß thuemmy
 
Ihr rechnet immer mit eine Schriftgröße in Px, dabei ist gerade die nicht in Pixeln angegeben, weil sie eben nicht als Pixelgrafik vorliegt. Und man sich selbst bei einer Angabe von fonz-size:16px; nicht sicher sein kann, dass diese auch 16Px hoch ist.

Die Angabe von em bei margin und padding ist gerade deswegen sinnvoller, als das in Pixeln anzugeben, eben weil sich die Abstände sich dann der Schrift anpassen. Und Schrift ist immer noch das Zentrale "Element" bei Webseiten.

Höhen und Breiten wird man dahingegen mehr in Pixeln angeben, da man mit Hintergrundbildern, etc arbeitet.
 
Als ich angefangen habe mit "em" statt "px" zu arbeiten, fiel es mir auch nicht gerade leicht. Aber mittlerweile verwende ich eigentlich garnichtmehr "px" und ich weiß auch immer mehr wieviel das ganze von "em" in "px" umgerechnet wäre. ^^

Im Prinzip geh ich immer davon aus:

css:
Code:
body { font:100.01%/1.4em Arial; color:#000; background:#FFF; }
#over { width: 56.25em; height:100%; margin: 0em auto; font-size: 1em; }
(56.25em entsprechen hier 900px)

html
Code:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="de" lang="de">
<head>
 
<title> Titel </title>
 
<!--META-->
 
<link rel="stylesheet" href="css/page.css" type="text/css" media="screen" />
<link rel="stylesheet" href="css/print.css" type="text/css" media="print" />

</head><body>
<div id="over">


</div>
</body></html>


Das ist eigentlich von jeder meiner Seiten das Grundgerüst. Somit hab ich umgerechnet 16px Schriftgröße und das wars.

Ich gebe dann auch nicht den Eltern-Elementen die Schriftgröße sondern direkt den Elementen die das Textliche enthalten. Sprich wenn ich eine Navigation habe, geb ich nicht mit <ul> eine Schriftgröße, sondern dem <li>. Somit kann ich beim rechnen der Größe des <ul> mit 16px als Umrechnungen nehmen.

Das ist deutlich einfacher, wie wenn man dem <ul> ein 0.75em gibt und dann plötzlich bei "width" und "height" nichtmehr mit Faktor 16 rechnet, sondern mit Faktor 12 (1em = 16px | 0.75em = 12px).

Somit sieht eigentlich jedes CSS-Grundgerüst erweitert so aus:

Code:
* { margin:0; padding:0; }
body { font:100.01%/1.4em Arial; color:#000; background:#FFF; }
#over { width: 56.25em; height: 100%; margin: 0em auto; font-size: 1em; }

a {  }
a:hover { }
a:visited {  }
a:activ {  }

address { font-style: normal; }
img { border: 0; display:block; }
table { border:0; }
ul,ol,dl { list-style: none; }

address,p,h1,h2,h3,h4,h5,h6,ul,ol,dl,... { padding:[I]xx[/I]em; font-size:1em; }

h1 { font-size:1em; }
h2 { font-size:..; }
h3 { font-size:..; }
h4 { font-size:..; }
h5 { font-size:..; }
h6 { font-size:..; }


Meisten habe ich beim Header ein Bild mit drin, das ich natürlich gezoomt haben möchte. Dann schreibe ich (deswegen auch Schriftgröße 1em bei h1 (umrechnung 16px)):

Code:
h1 { font-size:1em; }
h1 img { width: [I]xx[/I]em; height: [I]xx[/I]em; }
h1 span { visibility:hidden; }

html:
Code:
<h1><img src="#" width="" height="" alt="" /><span></span></h1>

Innerhalb des <span></span> nocheinmal der Titel der Seite.

Meisten gebe ich dem <p> noch ein font-size:1em; und gruppiere über den Überschriften alles was gleiches padding hat. Ich mag es nicht so wenn ich 100 verschiedene margin- und padding-werte bei den Elementen habe. Deshalb vesuche ich soviel wie möglich einheitlich und gruppiert zu notieren.

Yoah..das wars eigentlich.. Der Rest ist eigentlich dann recht schnell gemacht, egal ob es Content, Footer oder sonst was ist. Letzenendes ist ja das ganze dann mit PHP noch "ausgefüllt" womit ich das HTML-Grundgerüst von oben eigentlich in jeder Seite verwenden kann und auch tue. Der Rest ist ausgelagert und/oder wird dynamisch geladen. Meisten stehen in der Grunddatei dann "nurnoch" ein <div id="main"> </div> und, wenn nötig / gewünscht, eine "sidebar".

Aber ich mag jetzt nicht zu weit abschweifen und alle "Arbeitsweisen" von mir hier reinschreiben, denn jeder hat eine Andere und jeder Arbeitet mit anderen Methoden und Strukturen.


Im Endeffekt sollte das Ganze eigentlich kein Problem sein von wegen "umrechnen".

16px = 1em
12px = 0.75em
50px = 3.125em
100px = 6.25em (200 -> 12.5, 300 -> 18.75, ... )
900px = 56.25em

fertig ^^


Gruß
Loon3y

Edit: Nicht wundern, dass gruppiert die Überschriften alle mit nen font-size dort stehen und unten nochmal einzeln. Das sollte endweder nur ein "Beispiel" sein das ich mehreren Elementen den padding-wert gebe, oder mehreren Elementen eine font-size gebe.
 
Zuletzt bearbeitet:
Werbung:
Hallo Loon3y,

vielen Dank für die ausführliche Antwort. Habe sie jetzt erstmal nur überflogen und werde das morgen nochmal in aller Ruhe machen. Was mich verwundert hat, ist folgendes:
Code:
body { font:100.01%/1.4em ....
Ist das 'ne Rechenaufgabe, oder was ist das? Ich vermute mal, dass Du dadurch erreichst, dass 1em=16px sind. Aber was steckt dahinter?

Gruß thuemmy
 
Das habe ich mich auch gefragt. Rechnen kann man in CSS erst ab Level 3 mit calc(). Sicher meint er 100.1% oder 1.4em hernehmen. Oder einfach nur ein Schreibfehler.
 
Werbung:
Dann muss das ein Tippfehler von Loon3y sein, denn wenn ich mehrere Eigenschaften einem Selektor zuordne, dann werden diese durch blanks getrennt, und nicht durch ein slash. Oder irre ich mich da?

Gruß thuemmy
 
Nein, wenn die Kurzeform gewählt wird, werden die Eigenschaften durch ein Komma getrennt, nur font-size und line-height werden durch einen Slash getrennt.

Die korrekte Reihenfolge ist:
font-style, font-variant, font-weight, font-size/line-height, font-family
Frag mich nicht, wieso das so ist.
 
Werbung:
Man (in dem Fall ich) sollte einen Link nicht nur anklicken und überfliegen, sondern auch etwas genauer lesen ;-) Danke nochmal.

Gruß thuemmy
 
font-size :100.01% soll wohl gegen einen uralten 0pera-Bug helfen.
Die Version war meine ich kostenpflichtig (alternativ mit Werbung).
Jedenfalls gilt die Version als ausgestorben.
Ältere IEs machen bei Schriftgrößenänderung (em) riesige Sprünge wenn die erste Schriftgröße nicht in % angegeben wurde.
Dafür reicht auch font-size: 100% für body.

16px = 1em
...
fertig ^^
So einfach ist das nicht. Das Ergebniss hängt u.a. auch von der Schriftgrösse des Elternelementes ab.
Beispiel:
HTML:
<div>
<ul>
<li><strong>lorem ipsum</strong></li>
</ul>
</div>
css:
Code:
  div * {
font-size: 2em;
}

Bei einer eingestellten Schriftgrösse von 16px hat <strong> nun 128px (mit Javascript ausgelesen ).
 
Zuletzt bearbeitet:
Werbung:
font-size/line-height habe ich auch 1000 mal überlesen.

Irgendwie wurde aber immer noch nicht erklärt, warum man von 16px ausgeht. Ich meine wenn das so wäre, könnte man gleich mit Pixeln arbeiten, da em seine "Variabilität" verliert.
 
16px ist einfach die häufige Standardeinstellung in den Browsern, die die meisten Benutzer nicht verändern, mehr nicht.
 
Zurück
Oben