Ignorare <br> con CSS?


114

Sto lavorando su un sito che ha delle interruzioni di riga inserite come <br>in alcune intestazioni. Supponendo che non riesca a modificare il codice HTML sorgente, esiste un modo con i CSS per ignorare queste interruzioni?

Sto ottimizzando il sito da dispositivi mobili, quindi non desidero utilizzare JavaScript.


1
@Ben Johnson mk2: La risposta alla tua domanda: "Vorrei una soluzione alla risposta di @Aneesh Karthik C per firefox e opera" è che non è possibile con l'uso di brelementi! Le ragioni sono già state spiegate numerose volte! Nella mia risposta ti ho mostrato un metodo alternativo per raggiungere l'obiettivo in modo valido, robusto e cross browser.
Netsurfer

Risposte:


198

Con css, puoi "nascondere" i tag br e non avranno effetto:

br {
    display: none;
}

Se vuoi nasconderne solo alcuni all'interno di un tipo di intestazione specifico, rendi il tuo CSS più specifico.

h3 br {
    display: none;
}

11
Assicurati di dare un'occhiata anche alla risposta di Aneesh, è rilevante e risolve un problema che enobrev non ha considerato nel suo.
Rick Calder

3
D'accordo, la risposta di Aneesh è un'aggiunta fantastica. stackoverflow.com/a/18040142/14651
enobrev

2
Questa soluzione non funziona per Firefox. Se <br/> non ha spazio intorno, combina le parole intorno <br/>. Ecco l' esempio Puoi vedere la discussione al riguardo di seguito
shinesecret

1
Se il tuo obiettivo è il responsive design, l'unica soluzione cross-browser è @ Netsurfer's. Non risponde alla domanda esattamente come dichiarato, ma raggiunge l'obiettivo in tutti i browser moderni.
Andrew Lundin

94

Nota: questa soluzione funziona solo per i browser Webkit, che applicano erroneamente pseudo-elementi ai tag a chiusura automatica.

In aggiunta alle risposte precedenti, vale la pena notare che in alcuni casi è necessario inserire uno spazio invece di ignorare semplicemente <br>:

Ad esempio, le risposte di cui sopra cambieranno

Monday<br>05 August

per

Monday05 August

come avevo verificato mentre cercavo di formattare il mio calendario degli eventi settimanale. È preferibile inserire uno spazio dopo "lunedì". Questo può essere fatto facilmente inserendo quanto segue nel CSS:

br  {
    content: ' '
}
br:after {
    content: ' '
}

Questo farà

Monday<br>05 August

Assomiglia a

Monday 05 August

È possibile modificare l' contentattributo br:afterper ', 'se si vuole separare da una virgola, o mettere tutto quello che vuoi all'interno ' 'per renderlo il delimitatore! A proposito

Monday, 05 August

sembra pulito ;-)

Vedi qui per un riferimento.

Come nelle risposte precedenti, se vuoi renderlo specifico per tag, puoi farlo. Ad esempio, se vuoi che questa proprietà funzioni per il tag <h3>, aggiungi semplicemente uno h3prima bre br:after, ad esempio.

Funziona più generalmente per uno pseudo-tag.


2
così molto molto geniale!
jon

1
Ben fatto, in realtà pensando alle conseguenze di disabilitarlo semplicemente!
Rick Calder

10
Buon punto ma questo sembra funzionare solo con i browser Webkit (Chrome e Safari) con Firefox e IE questa tecnica non funziona, controlla jsfiddle.net/nicooprat/ZHxNA con Firefox e IE ... qualche idea su come sostituire un br con uno spazio in modo che funzioni con tutti i principali braowser?
firepol

6
@firepol: In realtà, Firefox e IE stanno facendo le cose "corrette" in quanto <br />è un elemento su cui uno pseudoelemento non dovrebbe funzionare . E contentfunziona solo su pseudo-elementi.
ScottS

7
Questa è una soluzione molto sbagliata, principalmente a causa di ciò che @ScottS ha già scritto. "Contenuto" dovrebbe funzionare solo con pseudo-elementi, e lo pseudo-elemento non dovrebbe funzionare con tag a chiusura automatica. Per ora potrebbe funzionare, ma non oserei definire questa soluzione a prova di futuro.
nd_macias

16

Se aggiungi lo stile

br{
    display: none;
}

Allora funzionerà. Non sono sicuro se funzionerà nelle versioni precedenti di IE.


3
questa è stata postata in precedenza e hanno meno voti .. come mai?
Mr_Green

A volte veniamo semplicemente ignorati; (
Tim B. James,

@TimBJames non funziona in FIREFOX puoi controllare il mio commento dettagliato sopra
shinesecret

12

Ecco come lo faccio:

br { 
    display: inline;
    content: ' ';
    clear:none;
}

6

È possibile utilizzare spanelementi invece di brse si desidera che il metodo dello spazio bianco funzioni, poiché dipende da pseudo-elementi che sono "non definiti" per gli elementi sostituiti.

HTML

<p>
   To break lines<span class="line-break">in a paragraph,</span><span>don't use</span><span>the 'br' element.</span>
</p>

CSS

span {white-space: pre;}

span:after {content: ' ';}

span.line-break {display: block;}

span.line-break:after {content: none;}

DEMO

L'interruzione di riga si ottiene semplicemente impostando l'elemento span appropriato su display:block.

Utilizzando ID e / o classi nel markup HTML puoi facilmente indirizzare ogni singola o combinazione di elementi span tramite CSS o utilizzare selettori CSS come nth-child().

Quindi, ad esempio, puoi definire diversi punti di interruzione utilizzando le media query per un layout reattivo.

E puoi anche semplicemente aggiungere / rimuovere / attivare / disattivare le classi tramite Javascript (jQuery).

Il "vantaggio" di questo metodo è la sua robustezza: funziona in tutti i browser che supportano pseudo-elementi (vedi: Posso usare - Contenuti generati da CSS ).

In alternativa è anche possibile aggiungere un'interruzione di riga tramite pseudo-elementi:

span.break:before {  
    content: "\A";
    white-space: pre;
}

DEMO


4
Ti sei perso questa parte della domanda: "Supponendo che non posso modificare il codice HTML di origine"?
ScottS

1
@ ScottS: No, non l'ho fatto. Forse ti sei perso la parte: "Vorrei una soluzione alla risposta di @Aneesh Karthik C per firefox e opera" (poiché colui che ha iniziato la taglia non è l'OP). E la risposta a questa domanda è che non è possibile con <br>, almeno non cross-browser. Quindi ho mostrato un'alternativa.
Netsurfer

2
No, non mi sono perso quella parte (quell'OP è diverso dalla taglia e dal focus sulla risposta di Aneesh). Ma la risposta di Aneesh è nel contesto dell'intera domanda, "Ignorare <br> con CSS?" Sembra piuttosto ovvio che se si ha il controllo effettivo dell'html, la semplice eliminazione degli <br>elementi risolve il problema (presumibilmente sostituendoli con spazi). Quindi l'intero problema di cui si occupa la questione nel suo complesso è quando non si ha il controllo dell'html ; complicato dalla clausola aggiunta che non volevano davvero usare javascript (per qualsiasi motivo) per risolverlo.
ScottS

La domanda "Come ignorare <br>con CSS?" era già stato risposto. E solo se hai il controllo dell'HTML ciò non significa che lo vuoi cambiare. Ma nel responsive design è spesso desiderabile avere il controllo delle interruzioni di riga (oltre al ritorno automatico). E in questi casi il metodo per avere uno spazio bianco o non essere controllato dai CSS (media query) è almeno "un metodo" per raggiungere l'obiettivo.
Netsurfer

Questo ha funzionato meglio per me ora che le soluzioni di cui sopra non funzionano più in Firefox.
Christos Hrousis

3

Per me sembra meglio così:

Some text, Some text, Some text

br {
  display: inline;
  content: '';
}

br:after {
  content: ', ';
  display: inline-block;
}
<div style="display:block">
  <span>Some text</span>
  <br>
  <span>Some text</span>
  <br>
  <span>Some text</span>
</div>


1

Per questo puoi semplicemente fare così:

br{display: none;}

e se è all'interno di un tag PRE, puoi farlo e se vuoi che il tag PRE si comporti come un normale elemento di blocco, puoi usare questo CSS:

pre {white-space: normal;}

Oppure puoi seguire lo stile di Aneesh Karthik C come:

br  {content: ' '}
br:after {content: ' '}

Penso che tu abbia capito


Penso che tu abbia perso il punto che piace agli pseudo-elementi ::before e ::aftersono almeno "indefiniti" per "elementi sostituiti" come br. Quindi non ci sarà mai un comportamento del browser coerente su cui fare affidamento! L'unica cosa che puoi fare è non usare pseudo elementi con questi elementi!
Netsurfer

1

Secondo la tua domanda, per risolvere questo problema per Firefox e Opera utilizzando l' approccio C di Aneesh Karthik , devi aggiungere l'attributo "float" right ".

Controlla l' esempio qui. Questo CSS funziona in Firefox (26.0), Opera (12.15), Chrome (32.0.1700) e Safari (7.0)

br {
   content: " ";  
   float:right; 
}

Spero che questo risponda alla tua domanda !!


La proprietà content ha effetto solo sugli pseudo elementi CSS. Quindi è assolutamente inutile nella tua demo! E come "neutralizzare" a brè già risposto (più di una volta). La domanda riguarda lo spazio bianco condizionale . E poiché ciò richiede l'uso di pseudo elementi, non funziona conbr .
Netsurfer

Se leggi attentamente la domanda. Capirai la risposta. Ho visto la risposta sopra che è la migliore da evitare <br> semplicemente impostandola per visualizzare: nessuno. Ma come per la seconda domanda in cui vuole scoprire come può affrontare il problema che sta arrivando in FF e Opera per la soluzione Aneesh.
shinesecret

Ho letto con molta attenzione non solo la domanda, ma anche tutte le risposte e i commenti. La proprietà del contenuto per brè semplicemente una sciocchezza! E ancora non riesco a vedere cosa c'entra il resto della tua risposta con "spazi bianchi condizionali e brekas di linea"? Forse puoi spiegarlo ulteriormente, per favore?
Netsurfer

1
Il tuo esempio è fuorviante, poiché hai già spazi intorno agli brelementi. Se rimuovi quelli, vedrai che non funziona per aggiungere spazio.
ScottS

1
Nel tuo esempio hai tre brelementi, con spazi prima e dopo il primo e l'ultimo. Sono quegli spazi che fanno sembrare che la tua soluzione funzioni, mentre in realtà non lo è. Quando rimuovi quegli spazi, come ho fatto nel mio esempio rivisto, puoi vedere che la tua soluzione non sta aggiungendo alcuno spazio in Firefox.
ScottS

0

Anche se questa domanda sembra essere già stata risolta, la risposta accettata non ha risolto il problema per me su Firefox. Firefox (e forse IE, anche se non l'ho provato) salta gli spazi vuoti durante la lettura del contenuto del tag "content". Anche se capisco completamente perché Mozilla dovrebbe farlo, porta la sua parte di problemi. La soluzione più semplice che ho trovato è stata quella di utilizzare spazi non divisibili invece di quelli normali come mostrato di seguito.

.noLineBreaks br:before{
content: '\a0'
}

Dai un'occhiata .


1
Perché il tuo violino non ha l' beforeelemento su una br? Non hai nemmeno una brnel tuo HTML sul violino. Parte del problema è che beforenon funziona su a brin alcuni browser.
ScottS

Questo è un comportamento abbastanza previsto, come indicato nelle specifiche: 2.5.1
Idiomi

È certamente strano, funziona quando lo applico al mio progetto. Il mio testo non è tutto HTML, tuttavia, il contenuto che sto modificando proviene da un database. Mi dispiace che la mia risposta non sia stata d'aiuto, allora.
Santo Guevarra

0

Sì, puoi ignorarlo <br>. Potrebbe essere necessario soprattutto in caso di design reattivo in cui è necessario rimuovere le interruzioni per i dispositivi mobili.

HTML

<h2>

  Where ever you go <br class="break"> i am there.

</h2>

CSS per esempio mobile

/* Resize the browser window to check */

@media (max-width: 640px) 
{
  .break {display: none;}
}

Dai un'occhiata a questo Codepen:
https://codepen.io/fluidbrush/pen/pojGQyM


-1

Puoi semplicemente convertirlo in un commento ..

Oppure puoi fare questo:

br {
display: none;
}

Ma se non lo vuoi perché lo metti lì?

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.