Autor Zpráva
radecek
Profil
Ahoj,

ne webu potrebuju aby se mi text v jednom divu zalamoval presne na jeho konci (treba 200px) a nezalomil se na dalsi radek. Typ fontu nemuze byt courier, u ktereho jsou vsechny pismenka stene siroka.

Pri pouziti funkce substr(string $string, int $start [, int $length ]) se text oreze na presny pocet pismenek, takze orez muze skoncit trebas v pulce radku a ne az na konci. Priklad:

1|Tento název p|rosím..
2|Než založít i|nzerát..

Kdyby jsme brali ze 1 priklad je orezany na (|zobraz|zbytek nezobrazuje se) presnou delku divu tak u druheho prikladu by se melo jeste vypsat pismeno "n". Kvuli sablonovemu systemu se tento problem musi vyrerit v PHP.

Tady je rozdil jedno pismenko ve skutecnosti se text orezava az nekde po 100 pismeni takze rozdily v delce textu jsou uz hodne velike.

Nevite prosim jak toto vyresit? Na konec orezaneho retezce se jeste musi vlozit "...", takže pres css a overflow by to moc nešlo.
jrm
Profil
A nestačilo by ořezat text na určitý počet znaků a ten zobrazit jako "justify" ?
ninja
Profil
radecek:
text-overflow:ellipsis;


Toto reseni pouziva napriklad Gmail.
nevim
Profil *
function orez($text, $limit){
          
        if ( strlen($text) > $limit ){
        
              $a = substr($text, 0, strrpos(substr($text, 0, $limit), ' ')). ' ...';
        
              return $a;
        
        }else{
        
              return $text;
        
        }
       }


Funkce která ti ořízne text na danou délku a doplní za to 3 tečky. Nezkracuje to text v polovině slova.
radecek
Profil
2 nevim: nechci oriznout na pocet pismen, ale delku.

text-overflow:ellipsis; nejde zkousel jsem toto:

    <div id="text" style="border: 1px solid black;
                          height: 2.3em;
                          width: 200px;
                          text-overflow: ellipsis;
                          overflow: hidden">
      bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
       bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla 
    </div>


Ale bohuzel toto nefunguje..
Shane
Profil
text-overflow:ellipsis; nejde

Tohle ti snad napoví, k čemu text-overflow:ellipsis slouží:

<div id="text" style="border:1px solid black;height:2.3em;width:200px;text-overflow:ellipsis;overflow:hidden;">
  Loremipsumdolorsitametconsecteturadipiscingelit.
</div>


Funguje to ale jen v IE a Google Chrome.
radecek
Profil
Aha tak to je celkem k nicemu kdyz to podporuji dva prohlizece kdyby aspon jeste FF.. A trebas neco jineho neexistuje? Trebas dojo, jquery, ... to neumi?
Joker
Profil
radecek:
potrebuju aby se mi text v jednom divu zalamoval presne na jeho konci (treba 200px) a nezalomil se na dalsi radek
Tohle se docela blbě řeší univerzálním skriptem, když každý font má jinak široká písmenka a může mít i různé poměry šířek jednotlivých písmen.
Řešení by bylo udělat funkci na "vážený ořez", kde by písmenka měly váhy podle své šířky.

Ale pořád by to bylo jen přibližné.
Prostě když by třeba "a" mělo váhu 100%, tak třeba "m" by mělo 140%, "C" 120%, "k" 90%, "r" 80%, "f" 50%, "i" 40% a tak podobně.
Radek9
Profil
radecek:
Jak psal Joker, vypočítej si šířku písmen v px. Potom k písmenům ve větě přiřaď dané číslo, sečti všechny čísla a potom si počítej postupně písmena a až dojdeš k určitému číslu (okraj divu) tak ukonči vypisování a dodej trojtečku.
radecek
Profil
Z JS jsem si vytvoril toto:

    var znak_velke;
    var znak_male;
    var pole = new Array();
    var velikost_spanu; 
    var x = 0;
    
    for(var i = 65; i <= 90; i++){
      znak_velke = String.fromCharCode(i);
      document.write("<span id='velke_" +znak_velke+ "'>" +znak_velke+ "</span>: ");
      velikost_spanu = document.getElementById("velke_" + znak_velke).offsetWidth;
      document.write(velikost_spanu+ "<br />");
      pole.push("'" +znak_velke+ "' => " +velikost_spanu); //" => " +velikost_spanu;
      
      znak_male = String.fromCharCode(i + 32);
      document.write("<span id='male_" +znak_male+ "'>" +znak_male+ "</span>: ");
      velikost_spanu = document.getElementById("male_" + znak_male).offsetWidth;
      document.write(velikost_spanu+ "<br />");
      pole.push("'" +znak_male+ "' => " +velikost_spanu); //" => " +velikost_spanu;
    }
    
    document.write("<hr />");
    document.write(" = (" +pole.join(", ")+ ")");


Vygeneruje to delku jednotlivych pismen, funkci na vypis upravim na delku..
radecek
Profil
Stejne to nefuguje jak bych potreboval protoze nevim kdy se zalomi slovo na novy radek..

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: