Supportnet / Forum / Webseiten/HTML
zeilenumbruch erzwingen
Frage
moin
ich versuch gerade herauszufinden, wie man in einer tabellenzelle nach einer gewissen anzahl von zeichen, einen zeilenumbruch erzwingen kann, wenn kein space dazwischen ist.
das muss es doch irgendwas geben.
bspw. wird ja auch hier bei langen ausdrücken die seite ind sie länge gezogen:
YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
nun soll einfach hart, also egal was kommt nach bspw. 30 zeichen ein umbruch gemacht werden. geht das in html oder muss (bitte kein JS)?
danke schon mal
g,
disco
Antwort 1 von Fonda
Irgendwie verstehe ich deine Frage nicht. Du, oder ein Serverskript, bist doch der Autor der Seite. Dann kannst Du doch den Zeilenumbruch selbst ins Dokument schreiben, bzw. das Skript ihn reinschreiben lassen, wo immer Du es möchtest?
Gruß,
Fonda
Gruß,
Fonda
Antwort 2 von disco
naja, nicht jede seite ist statisch. das ist der html-teil einer jsp-seite. auf das was da aus der datenbank kommt hab ich keinen einfluss. ich könnte zwar auf java-ebene zeilenumbrüche in die strings einbauen, aber da wird es doch bestimmt auch was schickes in html geben, was ich leider nicht finde.
Antwort 3 von rfb
meines Wissens gibts da nix.
du kannst der Tabellenzelle ein style="width:30em;overflow:hidden" mitgeben (oder overflow:scroll), dann wird der Überhang nicht angezeigt (in der 2ten Variante aber scrollbar)
Nicht zum Standard gehört <wbr> :
du kannst der Tabellenzelle ein style="width:30em;overflow:hidden" mitgeben (oder overflow:scroll), dann wird der Überhang nicht angezeigt (in der 2ten Variante aber scrollbar)
Nicht zum Standard gehört <wbr> :
Zitat:
Mit <wbr> markieren Sie eine Stelle, an der getrennt werden darf, falls diese Stelle bei der Bildschirmanzeige am Ende der Zeile steht (wbr = word break = Umbruch innerhalb eines Wortes). Sinnvoll ist dies bei langen Wörtern.
(SelfHTML)Mit <wbr> markieren Sie eine Stelle, an der getrennt werden darf, falls diese Stelle bei der Bildschirmanzeige am Ende der Zeile steht (wbr = word break = Umbruch innerhalb eines Wortes). Sinnvoll ist dies bei langen Wörtern.
Antwort 4 von Fonda
Ohne Tabelle:
Gruß,
Fonda
<html><form>
<input type="text" size="50" maxlength="30" value="YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" disabled>
</form></html>
Gruß,
Fonda
Antwort 5 von Fonda
.. bzw für Clients ohne CSS-Unterstützung
Antwort 6 von rfb
@Fonda:
wozu das Attribut maxlength, zumal in der ungewöhnlichen Konstellation, dass es einen kleineren Wert als size hat, wo doch die Eingabe durch den User eh nicht möglich ist?
Mit disabled verhinderst du übrigens in manchen Browsern (Opera, Firefox) jegliches Scrollen.
wozu das Attribut maxlength, zumal in der ungewöhnlichen Konstellation, dass es einen kleineren Wert als size hat, wo doch die Eingabe durch den User eh nicht möglich ist?
Mit disabled verhinderst du übrigens in manchen Browsern (Opera, Firefox) jegliches Scrollen.
Antwort 7 von Fonda
@rfb
Jo, war alles nicht so durchdacht. Dieser Thread überfordert mich irgendwie. :-)
Gruß,
Fonda
Jo, war alles nicht so durchdacht. Dieser Thread überfordert mich irgendwie. :-)
Gruß,
Fonda
Antwort 8 von disco
ok
danke.
werds mir morgen nochmal anschauen.
kann mir vielleicht doch jemand sagen, wie ich das mit nem javascript mache? da hab ich nämlich keine ahnung von.
ansonsten muss ich doch alle X zeichen ein <br/> auf controller-ebene einfügen.
g,
disco
danke.
werds mir morgen nochmal anschauen.
kann mir vielleicht doch jemand sagen, wie ich das mit nem javascript mache? da hab ich nämlich keine ahnung von.
ansonsten muss ich doch alle X zeichen ein <br/> auf controller-ebene einfügen.
g,
disco
Antwort 9 von AndyZink
Ich weiss nicht ob ich da richtig liege, aber wenn zB. ein zeichen 5px breit ist und du willst ein zeilenbruch nach 10 Zeichen haben, dann setzte doch ein Attrib das die Zelle nur 50px breite haben darf.
z.B.: <td width="50px" height="100%">
Gruß
Andy
z.B.: <td width="50px" height="100%">
Gruß
Andy
Antwort 10 von rfb
@AndyZink:
das hatten wir schon vorgeschlagen (A3) mit der Einheit em, die unabhängig von der Zeichengröße sich immer relativ auf die Zeichengröße des m bezieht. Der Vorteil gegenüber Angaben in px ist klar.
Was du nicht klärst ist: was passiert mit dem, was nicht reinpasst. Einen Zeilenumbruch mitten im Wort macht kein Browser. Also wird es ohne weitere Angaben zu Anzeigekonflikten kommen, die jeder Browser anders löst (Tabellenzelle wird trotzdem ausgedehnt oder Text läuft aus der Tabellenzelle). Daher die Eigenschaft overflow.
das hatten wir schon vorgeschlagen (A3) mit der Einheit em, die unabhängig von der Zeichengröße sich immer relativ auf die Zeichengröße des m bezieht. Der Vorteil gegenüber Angaben in px ist klar.
Was du nicht klärst ist: was passiert mit dem, was nicht reinpasst. Einen Zeilenumbruch mitten im Wort macht kein Browser. Also wird es ohne weitere Angaben zu Anzeigekonflikten kommen, die jeder Browser anders löst (Tabellenzelle wird trotzdem ausgedehnt oder Text läuft aus der Tabellenzelle). Daher die Eigenschaft overflow.
Antwort 11 von rfb
folgende Funktion im head-Bereich
Aufruf erfolgt mit onload im body-Tag:
Arbeitsweise: nach dem Laden der Seite (onload) startet die Funktion und prüft in allen Tabellenzellen (td) ob der Inhalt größer als 30 Zeichen ist (einstellbar bei onload="trenne(30)" ).
Andernfalls wird der Zelleninhalt zerlegt.
Im ersten Schritt werden die ersten 30 Zeichen eingefügt, dann ein br-Kindknoten erzeugt und dann ein weiterer Textknoten, der den Rest enthält.
<script type="text/javascript">
<!--
function trenne(wo) {
var zelle=document.getElementsByTagName("td")
for (var j=0; j<zelle.length; j++) {
var txt=zelle[j].firstChild.data;
if (txt.length>wo) {
var y=txt.slice(0,wo-1);
txt=txt.slice(wo);
zelle[j].firstChild.data=y;
var br=document.createElement("br");
zelle[j].appendChild(br);
var t=document.createTextNode(txt);
zelle[j].appendChild(t);
}
}
}
//-->
</script>
Aufruf erfolgt mit onload im body-Tag:
<body onload="trenne(30)">
Arbeitsweise: nach dem Laden der Seite (onload) startet die Funktion und prüft in allen Tabellenzellen (td) ob der Inhalt größer als 30 Zeichen ist (einstellbar bei onload="trenne(30)" ).
Andernfalls wird der Zelleninhalt zerlegt.
Im ersten Schritt werden die ersten 30 Zeichen eingefügt, dann ein br-Kindknoten erzeugt und dann ein weiterer Textknoten, der den Rest enthält.
Antwort 12 von rfb
funktioniert zwar vermutlich trotzdem, aber ein ; fehlt im Script:
...
var zelle=document.getElementsByTagName("td");
...
Antwort 13 von rfb
neue Version:
ein Fehler beseitigt (das letzte Zeichen der ersten Zeile wurde abgeschnitten)
bei sehr langen Texten wird mehrfach umgebrochen
<script type="text/javascript">
<!--
function trenne(wo) {
var zelle=document.getElementsByTagName("td");
for (var j=0; j<zelle.length; j++) {
var txt=zelle[j].firstChild.data;
if (txt.length>wo) {
zelle[j].firstChild.data=txt.slice(0,wo);
do {
txt=txt.slice(wo);
var br=document.createElement("br");
zelle[j].appendChild(br);
var t=document.createTextNode(txt.slice(0,wo));
zelle[j].appendChild(t);
} while (txt.length>wo);
}
}
}
//-->
</script>
Antwort 14 von disco
danke rfb.
klappt an sich super (auf einer statischen html-seite). aber leider nicht auf dem dynamischen jsp anteil meiner seite.
ich vermute mal, dass es daran liegt, dass deine funktion ausgeführt wird, bevor meine jsp-variablen den string ins <td> feld setzen.
gibt es da eine möglichkeit trenne() erst dann aufzurufen, wenn alles andere (inkl. der jsp-verarbeitung) durchgelaufen ist?
klappt an sich super (auf einer statischen html-seite). aber leider nicht auf dem dynamischen jsp anteil meiner seite.
ich vermute mal, dass es daran liegt, dass deine funktion ausgeführt wird, bevor meine jsp-variablen den string ins <td> feld setzen.
gibt es da eine möglichkeit trenne() erst dann aufzurufen, wenn alles andere (inkl. der jsp-verarbeitung) durchgelaufen ist?
Antwort 15 von Fonda
Darf ich Dich mal fragen, warum Du es nicht in direkt in Java machen willst? Es gibt nämlich weder eine einfachere noch eine bessere Lösung. Wahrscheinlich gibt es überhaupt nicht einmal eine einzige andere brauchbare Lösung.
Übrigens wird Java Skript, wenn überhaupt, erst dann ausgeführt, wenn die JSP-Seite den Server längst verlassen hat.
Gruß,
Fonda
Übrigens wird Java Skript, wenn überhaupt, erst dann ausgeführt, wenn die JSP-Seite den Server längst verlassen hat.
Gruß,
Fonda
Antwort 16 von disco
ich hab schon herausgefunden warum es nicht geht:
http://www.jsp-develop.de/knowledgebase/print/271/
im nachinein ist mir auch eingefallen, dass JS clientseitig ist, weswegen meine frage blödsinn war.
ich weiss nicht wie du programmierst, aber im normalfall versucht man zwischen logik und anzeige zu trennen. weswegen ich versuche die probleme, die den reinen auswurf als HTML-Code betreffen, dort zu lösen wo sie entstehen. schon alleine für die kosten.
ich sehe auch ein, dass das in manchen fällen vielleicht mehr nerven raubt und zeit kostet, als da fix ne serverseitige lösung zu finden. aber das macht es auch oft für nachfolgende programmierer schwerer, die nur die jsp-seiten bearbeiten und keinen plan von java oder den methoden dahinter haben, weil sie nur die variablennamen kennen (müssen).
ansonsten nochmal danke rfb.
http://www.jsp-develop.de/knowledgebase/print/271/
im nachinein ist mir auch eingefallen, dass JS clientseitig ist, weswegen meine frage blödsinn war.
ich weiss nicht wie du programmierst, aber im normalfall versucht man zwischen logik und anzeige zu trennen. weswegen ich versuche die probleme, die den reinen auswurf als HTML-Code betreffen, dort zu lösen wo sie entstehen. schon alleine für die kosten.
ich sehe auch ein, dass das in manchen fällen vielleicht mehr nerven raubt und zeit kostet, als da fix ne serverseitige lösung zu finden. aber das macht es auch oft für nachfolgende programmierer schwerer, die nur die jsp-seiten bearbeiten und keinen plan von java oder den methoden dahinter haben, weil sie nur die variablennamen kennen (müssen).
ansonsten nochmal danke rfb.
Antwort 17 von Fonda
Zitat:
ich weiss nicht wie du programmierst, aber im normalfall versucht man zwischen logik und anzeige zu trennen.
ich weiss nicht wie du programmierst, aber im normalfall versucht man zwischen logik und anzeige zu trennen.
Kannst Du doch durch eine benutzerdefinierte Funktion, oder was immer es entsprechendes in Java gibt ..