<br> mit CSS ignorieren?

114

Ich arbeite an einer Site, in die Zeilenumbrüche eingefügt sind <br> in einigen Überschriften . Angenommen, ich kann den Quell-HTML-Code nicht bearbeiten. Gibt es eine Möglichkeit, diese Unterbrechungen mit CSS zu ignorieren?

Ich bin mobil und optimiere die Website, sodass ich JavaScript nicht wirklich verwenden möchte.

Evanss
quelle
1
@Ben Johnson mk2: Die Antwort auf Ihre Frage: "Ich hätte gerne eine Lösung für die Antwort von @Aneesh Karthik C auf Firefox und Oper" ist, dass es mit der Verwendung von brElementen nicht möglich ist ! Die Gründe werden bereits mehrfach erklärt! In meiner Antwort habe ich Ihnen eine alternative Methode gezeigt, um das Ziel auf gültige, robuste und browserübergreifende Weise zu erreichen.
Netsurfer

Antworten:

197

Mit CSS können Sie die br-Tags "ausblenden" und sie haben keine Auswirkung:

br {
    display: none;
}

Wenn Sie nur einige innerhalb eines bestimmten Überschriftentyps ausblenden möchten, machen Sie Ihr CSS einfach spezifischer.

h3 br {
    display: none;
}
enobrev
quelle
11
Schauen Sie sich auch Aneeshs Antwort an, sie ist relevant und behebt ein Problem, das Enobrev in seiner Antwort nicht berücksichtigt hat.
Rick Calder
3
Einverstanden, Aneeshs Antwort ist eine fantastische Ergänzung. stackoverflow.com/a/18040142/14651
enobrev
2
Diese Lösung funktioniert nicht für Firefox. Wenn das <br/> keinen Platz um sich herum hat, kombiniert es Wörter um <br/> miteinander. Hier ist das Beispiel Sie können Diskussion darüber unten sehen
Shinesecret
1
Wenn Ihr Ziel Responsive Design ist, ist @ Netsurfer's die einzige browserübergreifende Lösung. Es beantwortet die Frage nicht genau wie angegeben, erreicht jedoch das Ziel in allen modernen Browsern.
Andrew Lundin
94

Hinweis: Diese Lösung funktioniert nur für Webkit-Browser, die Pseudoelemente fälschlicherweise auf selbstschließende Tags anwenden.

Als Ergänzung zu den obigen Antworten ist anzumerken, dass in einigen Fällen ein Leerzeichen eingefügt werden muss, anstatt nur zu ignorieren <br>:

Zum Beispiel werden sich die obigen Antworten drehen

Monday<br>05 August

zu

Monday05 August

wie ich überprüft hatte, während ich versuchte, meinen wöchentlichen Veranstaltungskalender zu formatieren. Ein Leerzeichen nach "Montag" wird bevorzugt eingefügt. Dies kann einfach durch Einfügen von Folgendem in das CSS erfolgen:

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

Das wird machen

Monday<br>05 August

aussehen wie

Monday 05 August

Sie können das contentAttribut in ändern br:after, ', 'wenn Sie durch Kommas trennen möchten, oder alles, was Sie möchten, in ' 'das Trennzeichen einfügen! Apropos

Monday, 05 August

sieht ordentlich aus ;-)

Siehe hier für eine Referenz.

Wie in den obigen Antworten können Sie dies tun, wenn Sie es tag-spezifisch machen möchten. Wenn Sie möchten, dass diese Eigenschaft für ein Tag funktioniert <h3>, fügen Sie einfach h3jeweils ein vor brund hinzu br:after.

Es funktioniert am allgemeinsten für ein Pseudo-Tag.

Host-Website-auf-iPage
quelle
2
so sehr sehr genial!
Jon
1
Gut gemacht, tatsächlich über die Konsequenzen nachdenken, wenn man es einfach deaktiviert!
Rick Calder
10
Guter Punkt, aber dies scheint nur mit Webkit-Browsern (Chrome & Safari) mit Firefox und IE zu funktionieren. Diese Technik funktioniert nicht. Überprüfen Sie jsfiddle.net/nicooprat/ZHxNA mit Firefox und IE mit einem Leerzeichen, damit es mit allen Haupt-Braowsern funktioniert?
Firepol
6
@firepol: Eigentlich, Firefox und IE sind , Dinge zu tun „richtige“ als <br />eines ist Element , das ein Pseudoelement nicht an Arbeit soll . Und contentfunktioniert nur mit Pseudoelementen.
ScottS
7
Dies ist eine sehr falsche Lösung, hauptsächlich aufgrund dessen, was @ScottS bereits geschrieben hat. "Inhalt" soll nur mit Pseudoelementen funktionieren, und Pseudoelemente sollen nicht mit selbstschließenden Tags funktionieren. Dies mag vorerst funktionieren, aber ich würde es nicht wagen, diese Lösung als zukunftssicher zu bezeichnen.
nd_macias
16

Wenn Sie im Stil hinzufügen

br{
    display: none;
}

Dann wird das funktionieren. Ich bin mir nicht sicher, ob es in älteren IE-Versionen funktioniert.

Tim B. James
quelle
3
Dies wurde früher gepostet und hat weniger Stimmen. Wie kommt es?
Mr_Green
Manchmal werden wir einfach ignoriert; (
Tim B James
@ TimBJames es funktioniert nicht in FIREFOX Sie können meinen detaillierten Kommentar oben
Shinesecret
12

So mache ich es:

br { 
    display: inline;
    content: ' ';
    clear:none;
}
Neo
quelle
6

Sie können spanElemente anstelle von verwenden, brwenn die Leerraummethode funktionieren soll, da dies von Pseudoelementen abhängt, die für ersetzte Elemente "nicht definiert" sind.

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

Der Zeilenumbruch wird einfach durch Einstellen des entsprechenden Span-Elements auf erreicht display:block.

Durch die Verwendung von IDs und / oder Klassen in Ihrem HTML-Markup können Sie problemlos jedes einzelne oder jede Kombination von Span-Elementen per CSS ausrichten oder CSS-Selektoren wie verwenden nth-child() .

Sie können also z. B. verschiedene Haltepunkte definieren, indem Sie Medienabfragen für ein ansprechendes Layout verwenden.

Sie können Klassen auch einfach mit Javascript (jQuery) hinzufügen / entfernen / umschalten.

Der "Vorteil" dieser Methode ist ihre Robustheit - funktioniert in jedem Browser, der Pseudoelemente unterstützt (siehe: Kann ich verwenden - CSS-generierter Inhalt ).

Alternativ ist es auch möglich, einen Zeilenumbruch über Pseudoelemente hinzuzufügen:

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

DEMO

Netsurfer
quelle
4
Haben Sie diesen Teil der Frage verpasst: "Vorausgesetzt, ich kann das Quell-HTML nicht bearbeiten"?
ScottS
1
@ ScottS: Nein, habe ich nicht. Vielleicht haben Sie den Teil verpasst: "Ich hätte gerne eine Lösung für die Antwort von @Aneesh Karthik C auf Firefox und Oper" (da derjenige, der das Kopfgeld gestartet hat, nicht der OP ist). Und die Antwort darauf ist, dass es mit <br>, zumindest nicht browserübergreifend, nicht möglich ist . Also habe ich eine Alternative gezeigt.
Netsurfer
2
Nein, ich habe diesen Teil nicht verpasst (dieses OP unterscheidet sich von Kopfgeld und dem Fokus auf Aneeshs Antwort). Aber Aneeshs Antwort steht im Zusammenhang mit der ganzen Frage: "Mit CSS ignorieren?" Es scheint ziemlich offensichtlich, dass, wenn man die tatsächliche Kontrolle über das HTML hat, das Problem durch einfaches Löschen der <br>Elemente gelöst wird (vermutlich durch Leerzeichen ersetzt). Das ganze Problem, mit dem sich die Frage als Ganzes befasst, ist, wenn man nicht die Kontrolle über das HTML hat ; kompliziert durch die zusätzliche Bedingung, dass sie wirklich kein Javascript (aus welchem ​​Grund auch immer) verwenden wollten, um es zu lösen.
ScottS
Die Frage "Wie <br>mit CSS zu ignorieren ?" wurde bereits beantwortet. Und nur wenn Sie die Kontrolle über den HTML-Code haben, heißt das nicht, dass Sie ihn ändern möchten. Beim reaktionsschnellen Design ist es jedoch häufig wünschenswert, die Kontrolle über Zeilenumbrüche (außer dem automatischen Zeilenumbruch) zu haben. In solchen Fällen ist die Methode, Leerzeichen zu haben oder nicht durch CSS (Medienabfragen) gesteuert zu werden, mindestens "eine Methode", um das Ziel zu erreichen.
Netsurfer
Dies funktionierte jetzt besser für mich, da die oben genannten Lösungen in Firefox nicht mehr funktionieren.
Christos Hrousis
3

Für mich sieht das besser aus:

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>

Ruslan P.
quelle
1

Dafür können Sie einfach so vorgehen:

br{display: none;}

und wenn es sich in einem PRE-Tag befindet, können Sie und wenn Sie möchten, dass sich das PRE-Tag wie ein reguläres Blockelement verhält, können Sie dieses CSS verwenden:

pre {white-space: normal;}

Oder Sie können dem Stil von Aneesh Karthik C folgen wie:

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

Ich denke du hast es verstanden

dawadisuren
quelle
Ich denke, Sie haben den Punkt verpasst, den Pseudoelemente mögen ::beforeund ::afterzumindest "undefiniert" für "ersetzte Elemente" mögen br. Es wird also niemals ein konsistentes Browserverhalten geben, auf das man sich verlassen kann! Das einzige, was Sie tun können, ist, keine Pseudoelemente mit diesen Elementen zu verwenden!
Netsurfer
1

Um dieses Problem für Firefox und Opera mithilfe des Aneesh Karthik C- Ansatzes zu lösen, müssen Sie gemäß Ihrer Frage das Attribut "float" right "hinzufügen.

Überprüfen Sie das Beispiel hier. Dieses CSS funktioniert in Firefox (26.0), Opera (12.15), Chrome (32.0.1700) und Safari (7.0).

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

Ich hoffe das wird deine Frage beantworten !!

Shinesecret
quelle
Die Eigenschaft content wirkt sich nur auf CSS-Pseudoelemente aus. Es ist also in Ihrer Demo absolut nutzlos! Und wie man a "neutralisiert", brwird bereits beantwortet (mehr als einmal). Die Frage betrifft bedingte Leerzeichen . Und da dies die Verwendung von Pseudoelementen erfordert, funktioniert es nicht mitbr .
Netsurfer
Wenn Sie die Frage sorgfältig lesen. Sie werden die Antwort verstehen. Ich habe die Antwort oben gesehen, die am besten zu vermeiden ist, indem Sie sie einfach so einstellen, dass sie angezeigt wird: keine. Aber gemäß der zweiten Frage, bei der er herausfinden möchte, wie er Probleme lösen kann, die in der Lösung von FF und Opera for Aneesh auftreten.
Shinesecret
Ich habe nicht nur die Frage, sondern auch alle Antworten und Kommentare sehr sorgfältig gelesen. Inhaltseigenschaft für brist einfach Unsinn! Und ich kann immer noch nicht sehen, was der Rest Ihrer Antwort mit "bedingten Leerzeichen und Linienbrekas" zu tun hat? Vielleicht können Sie es bitte weiter erläutern?
Netsurfer
1
Ihr Beispiel ist irreführend, da Sie bereits Leerzeichen um die brElemente haben. Wenn Sie diese entfernen, werden Sie feststellen, dass das Hinzufügen von Speicherplatz nicht funktioniert.
ScottS
1
In Ihrem Beispiel haben Sie drei brElemente mit Leerzeichen vor und nach dem ersten und letzten. Es sind diese Bereiche, die den Anschein erwecken, dass Ihre Lösung funktioniert, obwohl dies nicht der Fall ist. Wenn Sie diese Leerzeichen entfernen, wie ich es in meinem überarbeiteten Beispiel getan habe, können Sie feststellen, dass Ihre Lösung in Firefox überhaupt kein Leerzeichen hinzufügt.
ScottS
0

Obwohl diese Frage bereits gelöst zu sein scheint, hat die akzeptierte Antwort das Problem für mich in Firefox nicht gelöst. Firefox (und möglicherweise IE, obwohl ich es nicht ausprobiert habe) überspringt Leerzeichen, während der Inhalt des Tags "content" gelesen wird. Ich verstehe zwar vollkommen, warum Mozilla das tun würde, aber es bringt einige Probleme mit sich. Die einfachste Problemumgehung, die ich gefunden habe, bestand darin, nicht unterbrechbare Leerzeichen anstelle von regulären Leerzeichen zu verwenden, wie unten gezeigt.

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

Schau mal rein .

Santo Guevarra
quelle
1
Warum hat deine Geige das beforeElement nicht auf einem br? Sie haben nicht einmal eine brin Ihrem HTML auf der Geige. Ein Teil des Problems ist, dass beforees brin einigen Browsern nicht funktioniert .
ScottS
Das ist durchaus erwartetes Verhalten, wie in der Spezifikation angegeben: 2.5.1 Allgemeine Parser-Redewendungen
Netsurfer
Das ist sicherlich komisch, es funktioniert, wenn ich es in meinem Projekt anwende. Mein Text ist jedoch nicht nur HTML. Der Inhalt, den ich ändere, stammt aus einer Datenbank. Entschuldigung, meine Antwort hat dann nicht geholfen.
Santo Guevarra
0

Ja, das können Sie ignorieren <br>. Dies ist möglicherweise erforderlich, insbesondere bei reaktionsschnellem Design, bei dem Sie Pausen für mobile Geräte entfernen müssen.

HTML

<h2>

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

</h2>

CSS für mobile Beispiele

/* Resize the browser window to check */

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

Schauen Sie sich diesen Codepen an:
https://codepen.io/fluidbrush/pen/pojGQyM

Flüssigkeitsbürste
quelle
-1

Sie können es einfach in einen Kommentar umwandeln.

Oder Sie können dies tun:

br {
display: none;
}

Aber wenn du es nicht willst, warum legst du das dort hin?

BASE - Programmierung
quelle