Avatar billede leif Seniormester
15. juli 2005 - 17:49 Der er 10 kommentarer og
1 løsning

Max linie længde

Hej,

Jeg sidder med et mindre problem ! Jeg har et nyhedsscript, men hvis linierne bliver for lange ødelægger den mit design ! Derfor skal jeg på en eller anden måde sørge for at linierne ikke bliver over xxx antal tegn lange, men den skal selvfølgelig ikke smide <br> ind midt i et ord.

Hvad er bedst praksis i sådan et tilfælde ? Det er klart at kommer der er linieskift før det max antal skal den tælle forfra !

På forhånd tak.

Fra
Leif
Avatar billede nielle Nybegynder
15. juli 2005 - 18:07 #1
Brug funktionen wordwrap:

http://dk2.php.net/wordwrap
Avatar billede myplacedk Nybegynder
15. juli 2005 - 18:15 #2
Den funktion er dog ikke så praktisk, når man laver HTML. Der vil det jo typisk være klientens ansvar at dele linjer, og det er praktisk talt umuligt at vide serverside, hvornår en linje er fuld.

Du er så nødt til at lave linjene så korte, at du ved de ikke bliver for lange. (Husk at bogstaver ikke er lige brede, der er fx. ikke plads til så mange tegn, hvis der er mange W'er.)

Alternativt kan du løse det clientside med noget HTML. Du kan fx. lave det sådan, at al tekst uden for firkanten blot skal skjules, eller at der skal komme en scrollbar på.
Avatar billede leif Seniormester
15. juli 2005 - 18:31 #3
myplacedk -> Jeg er ikke med hvad du mener ? (Nu er det ikke så slemt da siden er i fast bredde !)
Avatar billede myplacedk Nybegynder
15. juli 2005 - 18:41 #4
Eksempel:
WWWWWWWWWW
iiiiiiiiii
De to linjer er lige lange, hvis du spørger wordwrap(). Hvis du spørger browseren, så er de ikke.
Gad vide hvordan Eksperten egentlig håndterer det. Her er to linjer, der begge er 100 tegn lange:

WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii

Dvs. hvis du fx. laver alle linjer 72 tegn lange (typisk for emails), så vil de ikke se lige lange ud på skærmen.
Desuden kan du ikke vide hvilken font der bruges, eller hvor store bogstaverne er.

Det er ikke sikkert problemet er væsentligt for dig, du skal bare vide at det er der.
Avatar billede myplacedk Nybegynder
15. juli 2005 - 18:43 #5
Jeg ser 64 W'er og næsten halvdelen af det næste. Hvor mange ser du?
(Jeg kan til gengæld se alle i'erne.)
Avatar billede nielle Nybegynder
15. juli 2005 - 18:57 #6
Korrekt at metoden er ikke fuldkommen. Men nu er det jo også nogle helt ekstreme særtilfæde der gives. En normal tekst vil være et miks af brede og smalle tegn så gennemsnitligt vil det nu nok blive meget pænt alligevel.

Endevidere har man som hjemmesideejere alligevel ikke fuldstændig kontrol over hvilken font siden læses i hos brugerene, og derfor kan man jo ikke regne sig frem til hvor der skal deles.
Avatar billede leif Seniormester
15. juli 2005 - 19:08 #7
Det er korrekt at bogstaver ikke er lige lange, men jeg vil give nielle ret i at forhåbentlig er der blandet af lidt af hvert i en sætning ! Nu er det jo ikke alle og enhver der skriver nyheder på min side ! Så jeg kan jo altid gå ind jeg tilpasse det hvis den ikke gør som jeg gerne vil have det til ! Indtil nu har wordwrap() gjort som jeg vil have den til !

myplacedk -> Hvordan ville du så gøre det ?
Avatar billede myplacedk Nybegynder
15. juli 2005 - 21:28 #8
Selvfølgelig er mit eksempel lavet så overdrevet som muligt. Men ikke urealistisk - folk gør sådan noget. Folk laver gladeligt 243 Z'er i træk, og mixet mellem  store og små Z'er afslører, at de ikke bare har holdt knappen nede, men de rent faktisk keder sig.

Hvad jeg ville gøre? Først og fremmest: Jeg vil ikke bruge serverside word wrap, medmindre det rent faktisk er noget jeg har kontrol over. Hvis fx. fonten bliver renderet serverside, eller (mere typisk) jeg laver en plaintext email med max 72 tegn pr. linje. Jeg vil altså overlade det til browseren.

Jeg ville normalt bruge CSS til at begrænse hvor meget teksten må fylde. (Se http://www.w3.org/TR/CSS2/visufx.html#overflow-clipping)
Dermed kan folk ikke smadre designet, og MIN røv er reddet.

Når folk laver lange linjer uden mellemrum er det oftest (ifølge min erfaring) en hulens masse ens tegn efter hinanden (som mine W'er ovenfor). Da der sjældent er behov for det samme tegn mere end tre gange i træk, laver jeg den begrænsning med regexp. Fx:
$text = preg_replace('/((.)\\2\\2)\\2+/', '$1', $text);
(Taget ud af sammenhæng, ingen garanti for at det virker - men søgestrengen bliver brugt i praksis.)
Dvs:
Jeg keder mig!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZzzzzz
Bliver til:
Jeg keder mig!!! ZZZzzz
(Realistisk eksempel fra det forum søgestrengen er fra)
Oftest løser det ikke bare design-problemet, det gør også afsenderen til en bedre tekst-forfatter. :)
Avatar billede leif Seniormester
17. juli 2005 - 22:37 #9
myplacedk -> Jeg forstår ikke lige hvordan man skal lave det med CSS !

Jeg har fået det til at virke OK med wordwrap().

Så hvis nogen vil have point må de ligge et svar.
Avatar billede nielle Nybegynder
18. juli 2005 - 06:25 #10
Svar :^)
Avatar billede myplacedk Nybegynder
18. juli 2005 - 10:05 #11
>  Jeg forstår ikke lige hvordan man skal lave det med CSS !
Sæt "overflow" til "hidden" på det element teksten skal være inden i.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester