Come inserire un'interruzione di riga prima di un elemento utilizzando CSS


170

Mi sembra di aver visto un modo, usando la proprietà content CSS, di inserire un tag di interruzione di riga prima di un elemento. Ovviamente questo non funziona:

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

Ma come si fa?


2
Il CSS non serve per aggiungere o modificare il contenuto, ma per controllare la visualizzazione del contenuto.
Todd Moses,

40
Mi sembra che il layout e il flusso (si potrebbe considerare anche l'interruzione di riga) rientrano sicuramente nel dominio dei CSS.
Trevor,

12
CSS è assolutamente per aggiungere o modificare il contenuto quando è un elemento di stile coerente che fa parte del tuo tema. Soprattutto con i sistemi di gestione dei contenuti come Wordpress che non ti consentono di modificare i tuoi contenuti, è molto utile. Ecco perché esiste la proprietà "content". Per l'aggiunta e / o la modifica di contenuti.
Fei Lauren,

Risposte:


266

È possibile utilizzare la \A sequenza di escape nel contenuto generato da psuedo-element. Maggiori informazioni nelle specifiche CSS2.

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

Potrebbe anche essere necessario aggiungere white-space:pre;a #restart.

nota: \Aindica la fine di una linea.

ps Un altro trattamento da essere

:before { content: ' '; display: block; }

11
Prova anche a white-space: pre-wrap; se vuoi che il tuo testo sia a capo.
Jazzy,

6
Brillante. Va notato, tuttavia, che affinché questo funzioni - #restartdeve anche esseredisplay: inline;
Troy Alford il

23
Questo non ha funzionato per me, ho usato :before { content: ' '; display: block; }invece.
Bogdanio,

1
Per qualche motivo nessuna delle soluzioni funziona con gli inline-blockelementi. Semplicemente non passeranno alla riga successiva. L'unica soluzione era in realtà aggiungere un vuoto <div></div>nell'HTML.
Adam Reis,

2
Se la linea non si interrompe, puoi usare la proprietà 'white-space': before {content: '\ A'; spazio bianco: pre; }
Amr

35

Se #restartè un elemento inline (ad es. <span>, <em>Ecc.), Puoi trasformarlo in un elemento a blocchi usando:

#restart { display: block; }

Ciò avrà l'effetto di garantire un'interruzione di linea sia prima che dopo l'elemento.

Non è possibile che CSS inserisca qualcosa che agisce come un'interruzione di riga solo prima di un elemento e non dopo. Potresti forse causare un'interruzione di linea prima come effetto collaterale di altri cambiamenti, ad esempio float: left, o clear: leftdopo un elemento fluttuante, o anche qualcosa di pazzo come, #restart:before { content: 'a load of non-breaking spaces'; }ma questa probabilmente non è una buona idea nel caso generale.


1
Non può essere display: block - perché allora avrei bisogno di visualizzare una larghezza per l'elemento per mantenere il suo sfondo in esecuzione su tutta la pagina. Deve essere in grado di impostare automaticamente la larghezza dell'elemento.
mheavers

3
Un float: leftelemento potrebbe essere di qualche utilità, poiché si restringono per adattarsi e iniziare su una nuova linea. Altrimenti, ciò che desideri potrebbe non essere possibile.
bobince,

downvoted perché a volte gli sviluppatori lavorano in un grande progetto in cui non hanno il controllo o non possono prendere una decisione per applicare un'altra soluzione.
Eyurdakul,

19

Questo funziona per me:

#restart:before {
    content: ' ';
    clear: right;
    display: block;
}

Per qualche motivo, i vari caratteri Unicode per la nuova riga non funzionavano per me ..? Questa soluzione ha funzionato, grazie!
Gene Bo,

1
Sì, ma cosa succede quando devi inserire del testo anche all'interno del contenuto !? risposta
Sándor Zuboly,

12

Inserisci un carattere di nuova riga unicode nello pseudo elemento precedente:

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

11

I seguenti CSS hanno funzionato per me:

/* newline before element */
#myelementId:before{
    content:"\a";
    white-space: pre;
}

Ottima idea con css semplice
NaveenDA

Ha funzionato come un incanto per me. Sto usando questo:content: 'bar: \a' attr(data-description);
Jimmy Adaro il

Questa è la risposta corretta cr
cronoklee

10

Esistono due motivi per cui non è possibile aggiungere contenuti generati tramite CSS nel modo desiderato:

  1. il contenuto generato accetta il contenuto e non il markup. Il markup non verrà valutato ma solo visualizzato.

  2. :beforee il :aftercontenuto generato viene aggiunto all'interno dell'elemento, quindi anche l'aggiunta di uno spazio o una lettera e la sua definizione in quanto blocknon funzionerà.

C'è uno ::outsidepseudo elemento che potrebbe fare quello che vuoi. Tuttavia, sembra che non ci sia supporto per il browser. (Leggi di più qui: http://www.w3.org/TR/css3-content/#wrapping )

La scommessa migliore è usare un po 'di jQuery qui:

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

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


"Utilizzo dei CSS". Ho trovato una risposta simile a quella di Jesse Kinsman.
RonnyKnoxville,

4

Sì, totalmente fattibile ma è sicuramente un trucco totale (le persone possono darti sguardi sporchi per scrivere un codice del genere).

Ecco l'HTML:

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

Ecco il CSS:

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

Ecco il violino: http://jsfiddle.net/AprNY/


+1 per la creatività. Ho qualcosa che sto includendo da una fonte esterna e non posso alterare l'HTML reale ... sembra funzionare bene :) Grazie!
Contrattare il

3

Prova quanto segue:

#restart::before {
  content: '';
  display: block;
}

Un consiglio: aggiungi almeno un commento di una riga, in modo che i tuoi post non finiscano nel VLQQ di default.
Deduplicatore,

1

supponendo che l'altezza della linea sia di 20 px

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

1

Non ho avuto fortuna con l'inserimento di una pausa con: prima. La mia soluzione era quella di aggiungere un intervallo con una classe e mettere la pausa all'interno dell'intervallo. Quindi modificare la classe per visualizzare: nessuno; o visualizza: blocca secondo necessità.

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;
    }
}

Spero che questo ti aiuti.


1

Puoi popolare il tuo documento con <br>tag e attivarli \ off con css proprio come tutti gli altri:

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

0

Puoi anche utilizzare l'entità HTML precodificata per un'interruzione di riga &#10;nei tuoi contenuti e avrà lo stesso effetto.


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

https://www.w3.org/TR/CSS2/generate.html#x18 The Content Proerty, "newlines" ... p non aggiungerà margine né riempimento alla fine di p all'interno del blocco padre (ad es. corpo ›sezione› p). L'interruzione di linea "\ A" forza lo spazio della linea, un'altezza della linea in stile equivalente.


-1

Aggiungi un margin-top:20px;a #restart. O qualunque sia il divario dimensionale che ritieni appropriato. Se è un elemento inline dovrai aggiungere display:blocko display:inline-blockanche se non credo inline-blockfunzioni su versioni precedenti di IE.


Nessun problema è che il tipo di visualizzazione dell'elemento è inline-block, quindi devo fare una pausa prima dell'elemento.
mheavers,

il tipo di visualizzazione è già inline-block. Sto provando a fare quello che ho chiesto sopra, usando la proprietà content.
mheavers,

Non puoi aggiungere elementi html usando la proprietà content, non è possibile.
punkrockbuddyholly,

perché la tua risposta non avrebbe risolto il suo problema. Guarda la risposta vincente che descrive in dettaglio un modo per fornire un'interruzione di riga usando la proprietà content (che non accetta elementi html). Forse era un fraintendimento della domanda originale.
pdwalker,

-1

Invece di aggiungere manualmente un'interruzione di linea in qualche modo, puoi fare un attrezzo border-bottom: 1px solid #ff0000che prenderà il bordo dell'elemento e renderizzerà solo il border-<side>lato specificato.


2
OP ha chiesto un equivalente di <br>no <hr>.
Beni Cherniavsky-Paskin,
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.