Ignorer <br> avec CSS?


114

Je travaille sur un site qui a des sauts de ligne insérés comme <br> dans certains titres. En supposant que je ne puisse pas modifier le code HTML source, y a-t-il un moyen avec CSS que je puisse ignorer ces pauses?

Je suis en train d'optimiser le site sur mobile, donc je n'ai pas vraiment envie d'utiliser JavaScript.


1
@Ben Johnson mk2: La réponse à votre question: "Je voudrais une solution à la réponse de @Aneesh Karthik C pour Firefox et Opera" est que ce n'est pas possible avec l'utilisation d' bréléments! Les raisons sont déjà expliquées de nombreuses fois! Dans ma réponse, je vous ai montré une méthode alternative pour atteindre l'objectif de manière valide, robuste et multi-navigateurs.
Netsurfer

Réponses:


198

Avec css, vous pouvez "masquer" les balises br et elles n'auront aucun effet:

br {
    display: none;
}

Si vous ne voulez en cacher que dans un type de titre spécifique, rendez votre css plus spécifique.

h3 br {
    display: none;
}

11
Assurez-vous de jeter un œil à la réponse d'Aneesh également, elle est pertinente et corrige un problème qu'enobrev n'a pas pris en compte dans le sien.
Rick Calder

3
D'accord, la réponse d'Aneesh est un ajout fantastique. stackoverflow.com/a/18040142/14651
enobrev

2
Cette solution ne fonctionne pas pour Firefox. Si le <br/> n'a pas d'espace autour de lui, il combine les mots autour de <br/> ensemble. Voici l' exemple Vous pouvez voir la discussion à ce sujet ci- dessous
shinesecret

1
Si votre objectif est la conception réactive, la seule solution multi-navigateurs est celle de @ Netsurfer. Il ne répond pas à la question exactement comme indiqué, mais il atteint l'objectif dans tous les navigateurs modernes.
Andrew Lundin

94

Remarque: cette solution ne fonctionne que pour les navigateurs Webkit, qui appliquent de manière incorrecte des pseudo-éléments aux balises à fermeture automatique.

En complément des réponses ci-dessus, il convient de noter que dans certains cas, il faut insérer un espace au lieu de simplement ignorer <br> :

Par exemple, les réponses ci-dessus tourneront

Monday<br>05 August

à

Monday05 August

comme je l'avais vérifié en essayant de formater mon calendrier hebdomadaire des événements. Il est préférable d'insérer un espace après «lundi». Cela peut être fait facilement en insérant ce qui suit dans le CSS:

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

Cela fera

Monday<br>05 August

ressembler

Monday 05 August

Vous pouvez modifier l' contentattribut br:afterà ', 'si vous voulez séparer par des virgules, ou mettez tout ce que vous voulez dans ' 'pour en faire le delimiter! Au fait

Monday, 05 August

a l'air bien ;-)

Voir ici pour une référence.

Comme dans les réponses ci-dessus, si vous voulez le rendre spécifique à une balise, vous le pouvez. Comme si vous voulez que cette propriété fonctionne pour la balise <h3>, ajoutez simplement un h3chacun avant bretbr:after , par exemple.

Cela fonctionne le plus généralement pour une pseudo-étiquette.


2
donc très très génie!
jon

1
Bravo, en pensant aux conséquences de simplement le désactiver!
Rick Calder

10
Bon point mais cela semble fonctionner uniquement avec les navigateurs Webkit (Chrome & Safari) avec Firefox et IE cette technique ne fonctionne pas, vérifiez le jsfiddle.net/nicooprat/ZHxNA avec Firefox et IE ... toutes les idées comment remplacer un br avec un espace pour qu'il fonctionne avec tous les principaux braowsers?
firepol

6
@firepol: En fait, Firefox et IE font les choses "correctement" car <br />c'est un élément sur lequel un pseudo-élément n'est pas censé fonctionner . Et contentne fonctionne que sur des pseudo-éléments.
ScottS

7
C'est une très mauvaise solution, principalement à cause de ce que @ScottS a déjà écrit. "Content" est censé fonctionner uniquement avec des pseudo-éléments, et les pseudo-éléments ne sont pas censés fonctionner avec des balises à fermeture automatique. Cela peut fonctionner pour le moment, mais je n'oserais pas appeler cette solution à l'épreuve du temps.
nd_macias

16

Si vous ajoutez dans le style

br{
    display: none;
}

Ensuite, cela fonctionnera. Je ne sais pas si cela fonctionnera dans les anciennes versions d'IE.


3
cela a été posté plus tôt et a moins de votes .. comment se fait-il?
Mr_Green

Parfois, nous sommes simplement ignorés; (
Tim B James

@TimBJames cela ne fonctionne pas dans FIREFOX, vous pouvez consulter mon commentaire détaillé ci
shinesecret

12

Voici comment je fais:

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

6

Vous pouvez utiliser des spanéléments à la place de brsi vous voulez que la méthode des espaces blancs fonctionne, car elle dépend de pseudo-éléments qui ne sont "pas définis" pour les éléments remplacés.

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

Le saut de ligne est simplement obtenu en définissant l'élément span approprié sur display:block.

En utilisant des identifiants et / ou des classes dans votre balisage HTML, vous pouvez facilement cibler chaque élément ou combinaison d'éléments span par CSS ou utiliser des sélecteurs CSS comme nth-child() .

Ainsi, vous pouvez par exemple définir différents points d'arrêt en utilisant des requêtes multimédias pour une mise en page réactive.

Et vous pouvez également simplement ajouter / supprimer / basculer des classes par Javascript (jQuery).

L '«avantage» de cette méthode est sa robustesse - fonctionne dans tous les navigateurs prenant en charge les pseudo-éléments (voir: Puis-je utiliser - Contenu généré par CSS ).

En alternative, il est également possible d'ajouter un saut de ligne via des pseudo-éléments:

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

DEMO


4
Avez-vous manqué cette partie de la question: "En supposant que je ne peux pas modifier le code source html"?
ScottS

1
@ScottS: Non, je ne l'ai pas fait. Peut-être que vous avez manqué la partie: «Je voudrais une solution à la réponse de @Aneesh Karthik C pour Firefox et l'opéra» (car celui qui a lancé la prime n'est pas l'OP). Et la réponse à cela est que ce n'est pas possible avec <br>, du moins pas avec plusieurs navigateurs. J'ai donc montré une alternative.
Netsurfer

2
Non, je n'ai pas manqué cette partie (cet OP est différent de la prime et de l'accent mis sur la réponse d'Aneesh). Mais la réponse d'Aneesh est dans le contexte de toute la question, à "Ignorer <br> avec CSS?" Il semble assez évident que si l'on a le contrôle réel du html, la simple suppression des <br>éléments résout le problème (probablement en les remplaçant par des espaces). Donc, tout le problème qui préoccupe la question dans son ensemble, c'est quand on n'a pas le contrôle du html ; compliqué par la stipulation ajoutée qu'ils ne voulaient vraiment pas utiliser javascript (pour une raison quelconque) pour le résoudre.
ScottS

La question "Comment ignorer <br>avec CSS?" a déjà répondu. Et seulement si vous contrôlez le HTML, cela ne veut pas dire que vous voulez le changer. Mais dans la conception réactive, il est souvent souhaitable de contrôler les sauts de ligne (autres que l'enroulement automatique). Et dans de tels cas, la méthode pour avoir des espaces blancs ou non contrôlés par CSS (media queries) est au moins "une méthode" pour atteindre l'objectif.
Netsurfer

Cela fonctionnait mieux pour moi maintenant que les solutions ci-dessus ne fonctionnent plus dans Firefox.
Christos Hrousis

3

Pour moi, ça ressemble mieux à ça:

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

Pour cela, vous pouvez simplement faire comme ceci:

br{display: none;}

et s'il est à l'intérieur d'une balise PRE, alors vous pouvez et si vous voulez que la balise PRE se comporte comme un élément de bloc normal, vous pouvez utiliser ce CSS:

pre {white-space: normal;}

Ou vous pouvez suivre le style d' Aneesh Karthik C comme:

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

Je pense que tu l'as


Je pense que vous avez manqué le point que les pseudo-éléments aiment ::beforeet ::aftersont au moins "indéfinis" pour les "éléments remplacés" comme br. Il n'y aura donc jamais de comportement de navigateur cohérent sur lequel on puisse compter! La seule chose que vous pouvez faire, c'est de ne pas utiliser de pseudo éléments avec ces éléments!
Netsurfer

1

Selon votre question, pour résoudre ce problème pour Firefox et Opera en utilisant l' approche Aneesh Karthik C , vous devez ajouter l'attribut "float" right ".

Vérifier la exemple ici. Ce CSS fonctionne dans Firefox (26.0), Opera (12.15), Chrome (32.0.1700) et Safari (7.0)

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

J'espère que cela répondra à votre question !!


La propriété content n'a d'effet que sur les pseudo éléments CSS. C'est donc absolument inutile dans votre démo! Et comment "neutraliser" a brest déjà répondu (plus d'une fois). La question concerne les espaces blancs conditionnels . Et comme cela nécessite l'utilisation de pseudo éléments, cela ne fonctionne pas avecbr .
Netsurfer

Si vous lisez attentivement la question. Vous comprendrez la réponse. J'ai vu la réponse ci-dessus qui est la meilleure pour éviter <br> en le configurant simplement pour afficher: aucun. Mais selon la deuxième question où il veut savoir comment il peut résoudre le problème qui arrive dans la solution FF et Opera pour Aneesh.
shinesecret

J'ai lu très attentivement non seulement la question, mais aussi toutes les réponses et commentaires. La propriété de contenu pour brest tout simplement absurde! Et je ne vois toujours pas ce que le reste de votre réponse a à voir avec "les espaces blancs conditionnels et les brekas de lignes"? Peut-être pouvez-vous l'expliquer davantage, s'il vous plaît?
Netsurfer

1
Votre exemple est trompeur, car vous avez déjà des espaces autour des bréléments. Si vous les supprimez, vous verrez que cela ne fonctionne pas pour ajouter de l'espace.
ScottS

1
Dans votre exemple, vous avez trois bréléments, avec des espaces avant et après le premier et le dernier. Ce sont ces espaces qui donnent l'impression que votre solution fonctionne, alors qu'en fait ce n'est pas le cas. Lorsque vous supprimez ces espaces, comme je l'ai fait dans mon exemple révisé, vous pouvez voir que votre solution n'ajoute aucun espace du tout dans Firefox.
ScottS

0

Bien que cette question semble déjà avoir été résolue, la réponse acceptée n'a pas résolu le problème pour moi sur Firefox. Firefox (et peut-être IE, même si je ne l'ai pas essayé) saute les espaces lors de la lecture du contenu de la balise "content". Bien que je comprenne parfaitement pourquoi Mozilla ferait cela, cela apporte sa part de problèmes. La solution de contournement la plus simple que j'ai trouvée était d'utiliser des espaces incassables au lieu d'espaces réguliers, comme indiqué ci-dessous.

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

Jetez un œil .


1
Pourquoi votre violon n'a-t-il pas l' beforeélément sur un br? Vous n'avez même pas de brcode HTML sur le violon. Une partie du problème est que beforecela ne fonctionne pas sur un brdans certains navigateurs.
ScottS

C'est un comportement assez attendu, comme indiqué dans la spécification: 2.5.1
Idiomes

C'est certainement bizarre, ça marche quand je l'applique dans mon projet. Mon texte n'est pas entièrement HTML, cependant, le contenu que je modifie provient d'une base de données. Désolé ma réponse n'a pas aidé, alors.
Santo Guevarra

0

Oui tu peux ignorer ça <br> . Vous en aurez peut-être besoin en particulier dans le cas d'une conception réactive où vous devez supprimer les pauses pour les appareils mobiles.

HTML

<h2>

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

</h2>

Exemple CSS pour mobile

/* Resize the browser window to check */

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

Découvrez ce Codepen:
https://codepen.io/fluidbrush/pen/pojGQyM


-1

Vous pouvez simplement le convertir en commentaire.

Ou vous pouvez faire ceci:

br {
display: none;
}

Mais si vous ne le voulez pas, pourquoi le mettez-vous là?

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.