So fügen Sie mit CSS einen Zeilenumbruch vor einem Element ein

170

Ich habe das Gefühl, mithilfe der CSS-Content-Eigenschaft einen Zeilenumbruch-Tag vor einem Element einzufügen. Offensichtlich funktioniert das nicht:

#restart:before { content: '<br/>'; }

Aber wie machst du das?

mheavers
quelle
2
CSS dient nicht zum Hinzufügen oder Bearbeiten von Inhalten, sondern zum Steuern der Anzeige von Inhalten.
Todd Moses
40
Es scheint mir, dass Layout und Ablauf (Zeilenumbrüche könnten ebenfalls berücksichtigt werden) definitiv im Bereich von CSS liegen.
Trevor
12
CSS ist absolut zum Hinzufügen oder Bearbeiten von Inhalten gedacht, wenn es ein konsistentes Stilelement ist, das Teil Ihres Themas ist. Insbesondere bei Content-Management-Systemen wie Wordpress, mit denen Sie Ihre Inhalte nicht bearbeiten können, ist dies äußerst nützlich. Deshalb existiert die Eigenschaft "content". Zum Hinzufügen und / oder Bearbeiten von Inhalten.
Fei Lauren

Antworten:

266

Es ist möglich, die \A Escape-Sequenz im von Pseudoelementen generierten Inhalt zu verwenden. Lesen Sie mehr in der CSS2-Spezifikation.

#restart:before { content: '\A'; }

Sie können auch hinzufügen müssen white-space:pre;zu #restart.

Hinweis: \ABezeichnet das Ende einer Zeile.

ps Eine andere Behandlung zu sein

:before { content: ' '; display: block; }
Bücherregal
quelle
11
Versuchen Sie auch Leerzeichen: Pre-Wrap; Wenn Sie möchten, dass Ihr Text umbrochen wird.
Jazzy
6
Brillant. Es sollte jedoch beachtet werden, dass dies auch funktionieren #restartmuss - muss auch seindisplay: inline;
Troy Alford
23
Das hat bei mir nicht funktioniert, ich habe es :before { content: ' '; display: block; }stattdessen verwendet.
Bogdanio
1
Aus irgendeinem Grund funktioniert keine der Lösungen mit inline-blockElementen. Sie werden einfach nicht in die nächste Zeile gehen. Die einzige Lösung bestand darin, ein Leerzeichen <div></div>im HTML- Code anzuhängen .
Adam Reis
2
Wenn die Zeile nicht unterbrochen wurde, können Sie die Eigenschaft 'Leerzeichen' verwenden: before {content: '\ A'; Leerraum: vor; }
Amr
35

Wenn #restartein Inline - Element (zB <span>, <em>etc) , dann können Sie es in einem Blockelement drehen mit:

#restart { display: block; }

Dies bewirkt einen Zeilenumbruch sowohl vor als auch nach dem Element.

Es gibt keine Möglichkeit, CSS etwas einfügen zu lassen, das nur vor einem Element und nicht danach wie ein Zeilenumbruch wirkt . Sie könnten vielleicht einen Zeilenumbruch vorher als Nebeneffekt anderer Änderungen verursachen, zum Beispiel float: leftoder clear: leftnach einem schwebenden Element oder sogar etwas Verrücktem, #restart:before { content: 'a load of non-breaking spaces'; }aber dies ist im allgemeinen Fall wahrscheinlich keine gute Idee.

Bobince
quelle
1
Es kann nicht angezeigt werden: block - da ich dann eine Breite für das Element anzeigen müsste, damit sein Hintergrund nicht über die gesamte Seite läuft. Es muss in der Lage sein, die Breite für das Element automatisch festzulegen.
Mheavers
3
Ein float: leftElement kann von Nutzen sein, da es verkleinert wird und in einer neuen Zeile beginnt. Andernfalls ist das, was Sie möchten, möglicherweise nicht möglich.
Bobince
Downvoted-Ursache Manchmal arbeiten Entwickler in einem großen Projekt, in dem sie keine Kontrolle haben oder keine Entscheidung treffen können, eine andere Lösung anzuwenden.
Eyurdakul
19

Das funktioniert bei mir:

#restart:before {
    content: ' ';
    clear: right;
    display: block;
}
Hutorny
quelle
Aus irgendeinem Grund funktionierten die verschiedenen Unicode-Zeichen für die neue Zeile bei mir nicht. Diese Lösung hat es geschafft - danke!
Gene Bo
1
Ja, aber was passiert, wenn Sie auch Text in den Inhalt einfügen müssen? Antwort
Sándor Zuboly
12

Fügen Sie einfach ein Unicode-Zeilenumbruchzeichen in das vorherige Pseudoelement ein:

#restart:before { content: '\00000A'; }
Jesse Kinsman
quelle
11

Folgendes CSS hat für mich funktioniert:

/* newline before element */
#myelementId:before{
    content:"\a";
    white-space: pre;
}
rluks
quelle
Ausgezeichnete Idee mit einfachem CSS
NaveenDA
Arbeitete als Zauber für mich. Ich benutze dies:content: 'bar: \a' attr(data-description);
Jimmy Adaro
Dies ist die richtige Antwort 👍
cronoklee
10

Es gibt zwei Gründe, warum Sie generierte Inhalte nicht wie gewünscht über CSS hinzufügen können:

  1. Generierter Inhalt akzeptiert Inhalt und kein Markup. Markup wird nicht ausgewertet, sondern nur angezeigt.

  2. :beforeund :aftergenerierter Inhalt wird innerhalb des Elements hinzugefügt, sodass selbst das Hinzufügen eines Leerzeichens oder Buchstabens und das Definieren als blocknicht funktioniert.

Es gibt ein ::outsidePseudoelement, das tun kann, was Sie wollen. Es scheint jedoch keine Browserunterstützung zu geben. (Lesen Sie hier mehr: http://www.w3.org/TR/css3-content/#wrapping )

Am besten verwenden Sie hier ein bisschen jQuery:

$('<br />').insertBefore('#restart');

Beispiel: http://jsfiddle.net/jasongennaro/sJGH9/1/

Jason Gennaro
quelle
"Verwenden von CSS". Ich fand eine Antwort ähnlich der von Jesse Kinsman.
RonnyKnoxville
4

Ja, absolut machbar, aber es ist definitiv ein totaler Hack (Leute sehen dich vielleicht schmutzig an, wenn du solchen Code schreibst).

Hier ist der HTML:

<div>lorem ipdum dolor sit <span id="restart">amit e pluribus unum</span></div>

Hier ist das CSS:

#restart:before { content: 'hiddentext'; font-size:0; display:block; line-height:0; }

Hier ist die Geige: http://jsfiddle.net/AprNY/

Hammerbrostime
quelle
+1 Für Kreativität. Ich habe etwas, das ich von einer externen Quelle einbinde, und kann den tatsächlichen HTML-Code nicht ändern ... das scheint gut zu funktionieren :) Danke!
counterbeing
3

Versuche Folgendes:

#restart::before {
  content: '';
  display: block;
}
Benutzer
quelle
Ein Tipp: Fügen Sie mindestens einen einzeiligen Kommentar hinzu, damit Ihre Beiträge nicht standardmäßig im VLQQ landen.
Deduplikator
1

Angenommen, Sie möchten, dass die Zeilenhöhe 20 px beträgt

  .restart:before { 
     content: 'First Line';
     padding-bottom:20px;
  }
  .restart:after { 
    content: 'Second-line';
    position:absolute;
    top:40px;
  }
Kareem
quelle
1

Ich hatte überhaupt kein Glück, eine Pause einzulegen mit: vor. Meine Lösung bestand darin, eine Spanne mit einer Klasse hinzuzufügen und die Pause innerhalb der Spanne zu platzieren. Ändern Sie dann die Klasse in die Anzeige: keine; oder Anzeige: Block nach Bedarf.

HTML

    <div>
         <span class="ItmQty"><br /></span>
         <span class="otherclass">
              <asp:Label ID="QuantityLabel" runat="server" Text="Qty: ">      
              </asp:Label>
         </span>
         <div class="cartqty">
              <asp:TextBox ID="QuantityTextBox" runat="server" Text='<%# Bind("Quantity","{0:#}") %>' Width="50"></asp:TextBox>

         </div>
    </div>

CSS

@media only screen and (min-width: 854px)
{
    .ProjItmQty
    {
        display: block;
        clear: both;
    }
}
@media only screen and (min-width: 1003px)
{
    .ProjItmQty
    {
        display: none;
    }
}

Hoffe das hilft.

Roger
quelle
1

Sie können Ihr Dokument mit <br>Tags füllen und diese wie alle anderen mit CSS aktivieren / deaktivieren:

<style>
.hideBreaks {
 display:none;
}
</style>
<html>
just a text line<br class='hideBreaks'> for demonstration
</html>
JackHammer
quelle
0

Sie können die vorcodierte HTML-Entität auch für einen Zeilenumbruch &#10;in Ihrem Inhalt verwenden. Dies hat den gleichen Effekt.

Henry Gibson
quelle
0
body * { line-height: 127%; }
p:after { content: "\A "; display: block; white-space: pre; }

https://www.w3.org/TR/CSS2/generate.html#x18 Die Inhaltsangabe "Zeilenumbrüche" ... p fügt am Ende von p innerhalb des übergeordneten Blocks (z. B. body ›section›) weder Rand noch Abstand hinzu. p). Der Zeilenumbruch "\ A" erzwingt den Zeilenabstand, der der Zeilenhöhe entspricht.

Mark Stewart
quelle
-1

Fügen Sie ein margin-top:20px;zu hinzu #restart. Oder welche Größe auch immer Sie für angemessen halten. Wenn es sich um ein Inline-Element handelt, müssen Sie es hinzufügen display:blockoder display:inline-blockobwohl ich nicht denke, dass es inline-blockmit älteren Versionen von IE funktioniert.

Punkrockbuddyholly
quelle
Nein, das Problem ist, dass der Anzeigetyp des Elements Inline-Block ist, daher muss ich vor dem Element eine Pause einlegen.
Mheavers
Der Anzeigetyp ist bereits Inline-Block. Ich versuche, das, was ich oben gefragt habe, mithilfe der Eigenschaft content zu tun.
Mheavers
Sie können keine HTML-Elemente mit der content-Eigenschaft hinzufügen, dies ist nicht möglich.
Punkrockbuddyholly
weil Ihre Antwort sein Problem nicht gelöst hätte. Schauen Sie sich die Gewinnerantwort an, in der detailliert beschrieben wird, wie mithilfe der content-Eigenschaft (die keine HTML-Elemente akzeptiert) ein Zeilenumbruch bereitgestellt werden kann. Vielleicht war es ein Missverständnis der ursprünglichen Frage.
pdwalker
-1

Anstatt einen Zeilenumbruch manuell hinzuzufügen, können Sie auch implementieren border-bottom: 1px solid #ff0000, der den Rand des Elements übernimmt und nur die border-<side>von Ihnen angegebene Seite rendert.

andy4thehuynh
quelle
2
OP bat um Äquivalenz von <br>, nicht <hr>.
Beni Cherniavsky-Paskin