2013-01-02 11 views
12

Sto cercando un modo per specificare dove una linea dovesse rompere se non può andare bene sulla sua linea in un modo simile a ­ (trattino debole/discrezionale), ma con uno spazio. Ho provato a cercarlo su google, ma non ho ottenuto molti successi rilevanti (principalmente per InDesign nonostante avessi specificato "html"), e quello che ho ottenuto è stato un po 'di persone che dicevano di non sapere in che modo.Interruzione di riga discrezionale in HTML?

Es.

Ciao, il mio nome
è foo.
vs
Ciao,
il mio nome è foo.
ma se lo spazio è disponibile:
Ciao, il mio nome è foo.

Per la specificità, non intendo white-space: normal/nowrap/pre/… e io non voglio forzare una rottura come con <br />.

Sto usando AngularJS, quindi la maggior parte di tutto viene elaborata tramite JavaScript, quindi se c'è un modo facile/efficiente/intelligente per farlo, sarei aperto a questo.

+1

Aiuto possibile: http://stackoverflow.com/questions/226464/soft-hyphen-in-html-wbr-vs-shy – sgeddes

+0

Non conosco un modo sano per questo neanche. Un modo folle sarebbe usare ' ' per ogni spazio * eccetto * quello che si vuole interrompere, ma questo potrebbe rovinare l'intero testo. Se è solo la parte * hello *, però, potrebbe funzionare. – toniedzwiedz

+2

Che dire di un '­ invisibile'? – SLaks

risposta

2

Non credo che ci sia alcun modo nativo per farlo, ma qui è un hack ho usato ogni volta che ho davvero bisogno di questo genere di cose:

var str = "Hello,<br>My name is foo."; 

str = str.replace(/ /g, '&nbsp;').replace(/<br>/g, ' '); 

In sostanza, utilizzare uno spazio unificatore per separare le parole a cui non vuoi rompere.

vederlo qui in azione: http://jsfiddle.net/5xmt6/ (ridimensionare la finestra per vedere come reagisce).


Nota: questo è molto hacky, e introduce una propria serie di problemi; vale a dire: se il viewport diventa estremamente stretto, il resto del testo non verrà avvolto.

+1

Questo è intelligente, ma gran parte di un disastro lo farà haha.grazie per l'idea! – jacob

6

è possibile utilizzare il tag <wbr>.

EDIT: Come accennato nei commenti, si potrebbe usare un zero-width space: &#8203; (Vedi anche: What's the opposite of a nbsp?)

+5

Solo per HTML5.Inoltre, prova a trovare risorse * diverse da * w3schools: D –

+6

Il ['wbr'] (https://developer.mozilla.org/en-US/docs/HTML/Element/wbr) serve per interrompere * all'interno di * una parola.L'OP vuole guidare il browser a rompere tra le parole set –

+1

@pst - IE supporta 'wbr' dalla versione 5.5 –

10

per indicare dove un'interruzione di riga dovrebbe non comparire tra le parole, utilizzare uno spazio no-break, o '  `, tra le parole. Qualsiasi spazio normale è fragile. Quindi puoi scrivere ad es.

Hello,&nbsp;my&nbsp;name is&nbsp;foo. 

Se si preferisce indicare le pause consentite (come per il vostro commento qui sotto), è possibile avvolgere il testo all'interno di un elemento nobr (non standard, ma funziona come un fascino) o all'interno di qualsiasi elemento per il quale si imposta white-space: nowrap , quindi non consente le interruzioni di riga tranne quando esplicitamente forzato o consentito. Dovresti quindi utilizzare il tag <wbr> (non standard, ma ...) o il riferimento di carattere &#8203; o &#x200b; (per ZERO WIDTH SPACE) dopo uno spazio per consentire un'interruzione di riga, ad es.

<nobr>Hello, <wbr>my name <wbr>is foo.</nobr> 

La scelta tra <wbr> e ZERO WIDTH SPACE è un tricky issue, principalmente a causa stranezze IE.

+1

Ad esempio, vorrei fare qualcosa del tipo: 'Ciao, &dbr; il mio nome è foo. (Dove' &dbr; 'è un'interruzione di riga discrezionale, ma per quanto ne so,' &dbr; 'non è reale). – jacob

+0

@jacob, semplicemente non usare le entità truccate. Qual è il problema? –

+1

Desidero specificare esattamente dove deve verificarsi un'interruzione di riga SE è richiesta un'interruzione di riga. Preferirei davvero usare un carattere per specificare dove dovrebbe accadere invece di usare un gruppo di caratteri per specificare dovunque non dovrebbe. – jacob

Problemi correlati