472 votes

Comment faire un saut de ligne à partir de css, sans utiliser <br /> ?

sortie :

hello
How are you

code :

<p>hello <br> How are you </p>

Comment obtenir le même résultat sans <br> ?

443voto

Vincent Robert Points 16530

Impossible avec la même structure HTML, vous devez avoir quelque chose pour distinguer entre Hello y How are you .

Je suggère d'utiliser span que vous afficherez ensuite sous forme de blocs (tout comme un fichier de type <div> en fait).

p span {
  display: block;
}

<p><span>hello</span><span>How are you</span></p>

41 votes

Notez également le montant de la majoration supplémentaire - la <br /> existe pour une très bonne raison. Si vous voulez un saut de ligne parce qu'il s'agit de paragraphes séparés, il suffit de les marquer comme tels.

8 votes

Vous pouvez avoir besoin de lignes structurées sans utiliser réellement de paragraphes. Pour baliser un poème, une chanson ou une adresse par exemple

2 votes

C'est vrai, mais un poème est l'exemple canonique pour quand <br> est le balisage correct. Les portées d'un poème seraient "fausses".

443voto

Joey Adams Points 13049

Vous pouvez utiliser white-space: pre; pour que les éléments agissent comme <pre> qui préserve les nouvelles lignes. Exemple :

p {
  white-space: pre;
}

<p>hello 
How are you</p>

Notez que pour IE, cela ne fonctionne que dans IE8+.

156 votes

Souvent mieux que pre est pre-line qui permet l'emballage.

16 votes

Pour en savoir plus sur les différences entre pré-ligne et pré-enveloppe, voir developer.mozilla.org/fr/US/docs/Web/CSS/white-space

1 votes

J'ai préféré pre dans mon cas, car je peux aussi utiliser text-overflow

140voto

Simon_Weaver Points 31141

Utilice <br/> comme d'habitude, mais le cacher avec display: none quand vous ne le voulez pas.

Je pense que la plupart des personnes qui se posent cette question veulent utiliser le css / responsive design pour décider si un saut de ligne apparaît ou non à un endroit spécifique. (et n'ont rien de personnel contre <br/> )

Bien que ce ne soit pas immédiatement évident, vous pouvez en fait appliquer display:none à un <br/> pour le masquer, ce qui permet d'utiliser des requêtes média en tandem avec des balises BR sémantiques.

<div>
  The quick brown fox<br />
  jumps over the lazy dog
</div>

@media screen and (min-width: 20em) {
  br {
    display: none; /* hide the BR tag for wider screens (i.e. disable the line break) */
  }
}

Cette fonction est utile dans le cadre d'un design réactif, lorsque vous devez forcer le texte à s'inscrire sur deux lignes à un point de rupture précis.

Exemple de jsfiddle

8 votes

Simon, vous avez raison - l'exemple que vous citez est exactement la raison pour laquelle j'ai cherché à répondre à cette question et l'exemple que vous avez donné. display: none est de loin la plus appropriée et la plus utile.

9 votes

Notez que pour les cas où cela ferait courir les mots ensemble, vous pouvez utiliser quelque chose comme display: inline-block; width: 1em; au lieu de none .

2 votes

Vous pourriez même appliquer une classe à l <br class='foo'> si vous avez besoin de plus de contrôle, mais ne soyez pas trop fou !

131voto

marvin_dpr Points 625

Il existe plusieurs options pour définir le traitement des espaces blancs et des sauts de ligne. Si l'on peut mettre le contenu dans, par exemple, un fichier de type <p> tag il est assez facile d'obtenir ce que l'on veut.

Para préserver les sauts de ligne mais pas les espaces blancs utiliser pre-line (pas pre ) comme dans :

<style>
 p {
     white-space: pre-line; /* collapse WS, preserve LB */
   }
</style>

<p>hello
How are you</p>

Si vous souhaitez un autre comportement, choisissez l'une de ces options (WS=WhiteSpace, LB=LineBreak) :

     white-space: normal;   /* collapse WS, wrap as necessary, collapse LB */
     white-space: nowrap;   /* collapse WS, no wrapping,       collapse LB */
     white-space: pre;      /* preserve WS, no wrapping,       preserve LB */
     white-space: pre-wrap; /* preserve WS, wrap as necessary, preserve LB */
     white-space: inherit;  /* all as parent element */

SOURCE : W3 Schools

5 votes

Parfait. devrait être la réponse choisie.

1 votes

Je crois que c'est ce que le PO recherche.

67voto

David Latapie Points 161

El " \a " en CSS génère un retour chariot. Il s'agit de CSS, pas de HTML, donc cela devrait être plus proche de ce que vous voulez : pas de majoration supplémentaire .

Dans un blockquote Dans l'exemple ci-dessous, vous affichez à la fois le titre et le lien source et vous séparez les deux par un retour chariot ( "\a" ):

blockquote[title][cite]:after {
  content:attr(title)"\a"attr(cite)
}

0 votes

Fantaisiste, mais totalement inutile pour la question posée.

18 votes

+1 parce qu'il s'agit uniquement d'une CSS et qu'il n'est pas recommandé d'utiliser les balises pre, br ou de changer le mode d'affichage en bloc (ce qui ajoute un comportement différent, qui pourrait être interrompu si le parent est en display:flex et est donc un hack dans ce contexte). Ce n'est pas très compliqué, c'est juste une technique moderne. Si vous voulez exactement le même balisage, mais qu'il réagisse différemment, c'est la voie à suivre.

0 votes

Une idée brillante. Notez le " - n'utilisez pas de guillemets simples ' parce que vous voulez permettre à la \a pour être analysé comme un caractère spécial.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X