kostenloser Webspace werbefrei: lima-city


Textgröße Dynamisch anpassen

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    studentenreiten-marburg

    studentenreiten-marburg hat kostenlosen Webspace.

    Hallo,

    ich habe einen Dynamischen Text (Zeichen sind zwar begrenzt aber die Anzahl der Zeichen bestimmt ja nicht die Größe). Die Textgröße soll sich nun Automatisch an die Größe des DIVs anpassen. Die Größe ist grundsätzlich fest nur wenn der Platz nicht ausreicht soll der Text sich verkleinern.
    Ich habe natürlich erst einmal die Suche benutzt und bin auf folgenden Therad gestoßen:http://www.lima-city.de/thread/font-an-div-anpassen
    Dort steht:
    Die beste lösung wäre aber wohl mit php.
    DIe Seite müpsste dann aber für jede änderung neugeladen werden


    Das währe ja genau das Richtige für mich da der Text eh schon vor dem Laden feststeht. Nur leider wird dort nicht weiter erklärt wie das Funktioniert und ich konnte leider auch nichts weiter dazu finden. Mit Javascript gefällt mir das nicht so außerdem kann man damit ja auch nicht genau ausrechnen wie viel platz der Text benötigt. Am schönsten währe natürlich eine Lösung nur mit CSS aber ich habe keine Idee wie das funktionieren könnte.

    Zur Verdeutlichung habe ich mal eine Beispielseite geschrieben.
    <!DOCTYPE html>
    <html>
    	<head>
    		<title>Textanpassung</title>
    		<meta http-equiv="content-type" content="text/html; charset=UTF-8">
    		<style type="text/css">
    		<!--
    			#text {
    				background:#0A0;
    				width:100px;
    			}
    		-->
    		</style>
    	</head>
    	<body>
    		<form method="get">
    			<input name="text" type="text" placeholder="Hier Text eingeben">
    			<input type="submit">
    		</form>
    		<hr>
    		<div id="text">
    			<p>
    				<?php
    					if (isset($_GET['text'])) {
    						echo $_GET['text'];
    					}				
    				?>
    			</p>
    		</div>
    	</body>
    </html>

    http://studentenreiten-marburg.lima-city.de/Textanpassung.php

    Danke im Voraus

    Beitrag zuletzt geändert: 29.12.2012 15:55:35 von studentenreiten-marburg
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. In PHP guckst du http://de3.php.net/manual/de/function.strlen.php

    So kannst du die Anzahl der Zeichen eines Textes ermitteln. Den Text am besten vorher als String in einer Variable speichern.
  4. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    all-in1 schrieb:
    In PHP guckst du http://de3.php.net/manual/de/function.strlen.php

    So kannst du die Anzahl der Zeichen eines Textes ermitteln. Den Text am besten vorher als String in einer Variable speichern.
    Und wie kannst du dann aus der Stringlänge auf die Länge des gerenderten Strings schließen? Gar nicht ;-)

    Grund: Schriftart ≠ Schriftart, Zeichen ungleich lang, …

    Einzig mit JavaScript wäre das möglich, da dort immer die tatsächlich verwendete Schriftart vorhanden ist…

    Dazu habe ich hier folgenden Code gefunden, um die tatsächliche Länge eines Strings in Pixel zu bestimmen:
    String.prototype.width = function(font) {
      var f = font || '12px arial',
          o = $('<div>' + this + '</div>')
                .css({'position': 'absolute', 'float': 'left', 'white-space': 'nowrap', 'visibility': 'hidden', 'font': f})
                .appendTo($('body')),
          w = o.width();
    
      o.remove();
    
      return w;
    };
    Damit kannst du messen wie groß dein Text ist, die Größe anpassen, erneut messen … und am Ende hast du ihn genau so groß wie du ihn brauchst.

    // EDIT:
    Demo

    Beitrag zuletzt geändert: 29.12.2012 22:01:38 von hackyourlife
  5. selbstverständlich lässt sich dies auch ohne Java-Script lösen:
    mit canvas und css
    oder wie er meinte mit php und css
    oder mit flash und css

    hier siehst du canvas und css: http://dregi.lima-city.de/hilfestellungen/textcanvas.php
    hier siehst du php und css: http://dregi.lima-city.de/hilfestellungen/textAnDiv.php

    Lösung mit canvas
    <!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"><html>
    <body>
    	<center><canvas id="tcanvas" height="200" width="900" style="border: 3px solid black">Ihr Browser unterstützt kein Canvas</canvas>
    	<br>
    Text eingeben<input type=text id="eing" onKeyup="wt()" value="Hello world" size=90><br>
    Schriftart: <form name=fm><select id=seli multiple="multiple" onChange="wt()">
    <script type="text/javascript">
    fs=fi=cw=ctx=null;
    af=['optimer','times new roman', 'courier new', 'georgia',  'sans-serif','times new roman','garamond', 'serif','arial', 'verdana', 'trebuchet', 'tahoma', 'helvetica', 'univers', 'futura', 'attika', 'fantasy', 'caflisch script'];
    function $(tw){return document.getElementById(tw);}		   
    for(i=0;i<af.length;i++){fs+="<option value='"+af[i]+"'>"+af[i]+"</option>"}
    document.writeln(fs+"</select></form>")
          function initCanvas(canvas) {
            if (window.G_vmlCanvasManager && window.attachEvent && !window.opera) {
              canvas = window.G_vmlCanvasManager.initElement(canvas);
            }
            return canvas.getContext('2d');
          }
    window.onload = function(){c=$("tcanvas");ctx = initCanvas(c);eing=$("eing");
    fi=$("seli");wt();}
    
    function wt(){
    text=eing.value;
    cw=c.clientWidth;ch=c.clientHeight
    fv=fi.options;ft=(cw/text.length*3)+ "px ";
    for(i=0;i<fv.length;i++){ft+=(fv[i].selected)?fv[i].value+",":"";}
    ctx.clearRect(0, 0, c.width, c.height);
    			ctx.font = ft+'optimer';
                ctx.fillText(text, 0, ch-20,cw,ch);
    }
    		</script><br>Mehrauswahl möglich-->erste bekannte wird genommen.
    		</body>
    </html>


    Lösung mit PHP
    <?php
    if(isset($_GET["tex"])){
    $str=$_GET["tex"];
     Header("Content-Type: image/png"); 
    $fs = 5;
       $tw = imagefontwidth($fs);
       $th = imagefontheight($fs);
    
    $img = imagecreatetruecolor($tw*strlen($str),20); 
    imagesavealpha($img, true); 
    // Durchsichtiger hintergrund 
    $color = imagecolorallocatealpha($img,0x00,0x00,0x00,127); 
    ImageFill ($img, 0, 0, $color);
    $black = ImageColorAllocate($img, 0, 0, 0);
    ImageString($img, $fs, 0, 0,$str, $black); //$_GET["tex"]
    ImagePNG($img); # Hier wird das Bild PNG zugewiesen 
    ImageDestroy($img); # Hier wird der Speicherplatz für andere Sachen geereinigt 
    exit;
    }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
           "http://www.w3.org/TR/html4/loose.dtd">
    
    <style type=text/css>
        img {
          -moz-animation-duration: 10s;
       -webkit-animation-duration: 10s;
          -moz-animation-name: slidein;
       -webkit-animation-name: slidein;
          -moz-animation-iteration-count: infinite;
       -webkit-animation-iteration-count: infinite;
          -moz-animation-direction: alternate;
       -webkit-animation-direction: alternate;
          -o-animation-duration: 10s;
          -o-animation-name: slidein;
          -o-animation-iteration-count: infinite;
          -o-animation-direction: alternate;
        }
        
        @-moz-keyframes slidein {
    	from {width:100%;}
          to {width:10%;}
        }
        
        @-webkit-keyframes slidein {
          from {width:100%;}
          to {width:10%;}
        }
        @-o-keyframes slidein {
          from {width:100%;}
          to {width:10%;}
        }
    </style>
    
    <html><body width=100%>
    <div width=100%><img class='ani2' src="<?php echo $_SERVER['PHP_SELF'];?>?tex=ich bin ein Bild und kein Text deshalb bin ich sehr dynamisch">
    </div>
    </body></html>


    Mit freundlichen grüssen Dregi

    Beitrag zuletzt geändert: 2.1.2013 23:34:35 von dregi
  6. Autor dieses Themas

    studentenreiten-marburg

    studentenreiten-marburg hat kostenlosen Webspace.

    Super hackyourlife und dregi,

    sieht alles gut aus was mich aber an den Lösungen von dregi stört ist das man den Text dann nicht mehr Markieren/Kopieren kann wenn das dort noch gehen würde währe das super sonst benutze ich das mit JS von hackyourlife.

    PS:
    Die Codes sehen sehr interessant aus, ist einiges drin was ich noch nicht kenne...
  7. Dann benütze den Code von hackyourlife
    Bei PHP hast du ein Bild, dessen Text nicht selektiert werden kann, und um das Canvas zu erstellen muss ja auch auf javascript zurückgegriffen werden und selektieren geht auch nur mit noch mehr JS.
    Und flash würde ich jetzt nicht JS vorziehen.

    Liebe grüsse Dregi
  8. Autor dieses Themas

    studentenreiten-marburg

    studentenreiten-marburg hat kostenlosen Webspace.

    Oki super,

    Dank an euch beiden :)
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!