Von einem String die Größe in Pixel errechnen?
Sascha
- php
0 töbi0 Hans Wurst0 Sascha
Guten Morgen allerseits,
uch habe folgende Ausgangssituation:
Ich lasse mit PHP einen Text innerhalb eines DIVs generieren. Die Schriftart bzw. die Schriftgröße können dabei variieren. Zudem kann es vorkommen, dass die Länge des String unterschiedlich ausfällt.
Gibt es nun eine Möglichkeit die Größe des Strings in Pixel zu errechnen? Gibt es hierzu vielleicht eine passende Funktion? Pi * Daumen sollte reichen.
fontsize * strlen(string) ist dabei leider nicht sehr ergiebig, weil die Buchstaben bedauerlicherweise unterschiedliche Größen haben.
Gruß,
Sascha
Hallo Sascha
Wird nicht einfach, eine saubere Lösung für dein Problem zu finden.
Wäre es für deine Zwecke auch mit javascript sinnvoll?
Gruss
shwups
In Pixeln?
Die Schrift ist doch individuell einstellbar, und je nach Schriftgröße braucht die Schrift mehr, oder weniger Pixeln.
Wozu brauchst du das? Evtl. kann man das anders lösen.
Hallo,
Ich muss noch etwas ergänzen. Der Text befindet sich in mehreren LI Elementen, sprich es liegt ein UL Element in dem besagten DIV.
Ziel ist folgendes:
Ich möchte mit einer PHP Klasse ein Listbox-Element (~Select in HTML) nachbauen, wenn dies funktioniert wird daraus später ein ListView-Element.
Wenn ich keine width-Angabe für das MainDIV festlege, passt sich die Größe aller Elemente automatisch an.
Wenn ich nun festlege, dass das MainDIV nur 300px breit sein darf, habe ich das Problem, dass der Text in den LI-Elementen umgebrochen wird, aber eigentlich soll der Text, dessen LI-Element größer als 300px ist, 'ausgeblendet' werden. Dafür besitzt das MainDIV die Eigenschaft overflow:hidden.
Wenn ich nun den LI-Elementen eine feste Größe vorgebe funktioniert die Sache mit Overflow korrekt.
Deshalb wollte ich jedem LI-Element eine feste Größe geben, die sich an der Textgröße orientiert. Es kann ja sein, dass das MainDIV größer ist, als das größte LI-Element.
Momentan verwende ich folgende Rechnung:
round(($this->fontSize -2) * strlen($item->getValue()) / 2.25) + 20;
Das haut einigermaßen hin, aber ist noch nicht ganz so elegant...
PS: JavaScript wohl ungeeignet, weil die ganze Box schon im PHP Skript generiert wird.
Bin heute den Rest des Tages unterwegs, werde frühstens heute abend oder morgen antworten können :)
Gruß
Sascha
Mit JS hättest du aber die Möglichkeit, auf den Pixel genau heraus zu finden wie breit ein Element dargestellt wird.
document.getElementById('bla').offsetWidth;
document.getElementById('bla').offsetHeight;
Check doch per JS die Größe der Elemente, dann pass die Größe des Containers an und zeig erst dann die ganze Geschichte ein...
(Wird allerdings ein bisschen kompliziert, weil offsetWidth nur ausgelesen werden kann wenn display != none... Aber das kriegst du bestimmt hin)
Mit JS hättest du aber die Möglichkeit, auf den Pixel genau heraus zu finden wie breit ein Element dargestellt wird.
document.getElementById('bla').offsetWidth;
document.getElementById('bla').offsetHeight;Check doch per JS die Größe der Elemente, dann pass die Größe des Containers an und zeig erst dann die ganze Geschichte ein...
(Wird allerdings ein bisschen kompliziert, weil offsetWidth nur ausgelesen werden kann wenn display != none... Aber das kriegst du bestimmt hin)
Danke für den Tip. Ich kenne die JS Eigenschaften -hab damals viel mit JS experiementiert, aber JS sagt mir in dem Fall nicht so ganz zu.
Ich werde es aber mal im Hinterkopf behalten :-)
@@Sascha:
nuqneH
Deshalb wollte ich jedem LI-Element eine feste Größe geben, die sich an der Textgröße orientiert.
Dafür gibt es die Einheiten em und ex. [CSS2 §4.3.2, http://de.selfhtml.org/css/formate/wertzuweisung.htm@title=SELFHTML]
PHP kannst du dafür vergessen.
PS: JavaScript wohl ungeeignet
Nein, JavaScript wäre das Einzige, was zur genauen Ermittlung der Größe geeignet ist.
Qapla'