¿Ignorar <br> con CSS?


114

Estoy trabajando en un sitio que tiene saltos de línea insertados como <br>en algunos de los títulos. Suponiendo que no puedo editar el HTML de origen, ¿hay alguna forma con CSS que pueda ignorar estos saltos?

Estoy optimizando el sitio para dispositivos móviles, por lo que realmente no quiero usar JavaScript.


1
@Ben Johnson mk2: La respuesta a su pregunta: "Me gustaría una solución a la respuesta de @Aneesh Karthik C para firefox y opera" es que no es posible con el uso de brelementos. ¡Las razones ya se explican en numerosas ocasiones! En mi respuesta les mostré un método alternativo para lograr el objetivo de manera válida, robusta y entre navegadores.
Netsurfer

Respuestas:


198

Con CSS, puede "ocultar" las etiquetas br y no tendrán ningún efecto:

br {
    display: none;
}

Si solo desea ocultar algunos dentro de un tipo de encabezado específico, simplemente haga que su css sea más específico.

h3 br {
    display: none;
}

11
Asegúrese de echar un vistazo a la respuesta de Aneesh también, es relevante y soluciona un problema que enobrev no consideró en el suyo.
Rick Calder

3
De acuerdo, la respuesta de Aneesh es una adición fantástica. stackoverflow.com/a/18040142/14651
enobrev

2
Esta solución no funciona para Firefox. Si <br/> no tiene espacio alrededor, entonces combina palabras alrededor <br/> juntas. Aquí está la muestra . Puede ver la discusión al respecto a continuación
shinesecret

1
Si su objetivo es un diseño receptivo, la única solución entre navegadores es la de @ Netsurfer. No responde a la pregunta exactamente como se indica, pero logra el objetivo en todos los navegadores modernos.
Andrew Lundin

94

Nota: Esta solución solo funciona para navegadores Webkit, que aplican incorrectamente pseudoelementos a etiquetas de cierre automático.

Como apéndice a las respuestas anteriores, vale la pena señalar que en algunos casos es necesario insertar un espacio en lugar de simplemente ignorar <br>:

Por ejemplo, las respuestas anteriores se convertirán

Monday<br>05 August

a

Monday05 August

como había verificado mientras trataba de formatear mi calendario de eventos semanales. Se prefiere insertar un espacio después de "Lunes". Esto se puede hacer fácilmente insertando lo siguiente en el CSS:

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

Esto hará

Monday<br>05 August

parece

Monday 05 August

Puede cambiar el contentatributo br:aftera ', 'si desea separarlo por comas, o poner lo que quiera dentro ' 'para convertirlo en el delimitador. Por cierto

Monday, 05 August

luce ordenado ;-)

Consulte aquí para obtener una referencia.

Como en las respuestas anteriores, si desea que sea específico de la etiqueta, puede hacerlo. Como si desea que esta propiedad funcione para la etiqueta <h3>, simplemente agregue h3cada uno antes bry br:after, por ejemplo.

Funciona más generalmente para una pseudoetiqueta.


2
¡Muy, muy genio!
jon

1
¡Bien hecho, pensando en las consecuencias de simplemente desactivarlo!
Rick Calder

10
Buen punto, pero esto parece funcionar solo con navegadores Webkit (Chrome y Safari) con Firefox e IE, esta técnica no funciona, verifique jsfiddle.net/nicooprat/ZHxNA con Firefox e IE ... alguna idea sobre cómo reemplazar un br con un espacio para que funcione con todos los principales braowsers?
Firepol

6
@firepol: En realidad, Firefox e IE están haciendo las cosas "correctamente", ya que <br />es un elemento en el que se supone que un pseudo-elemento no debe funcionar . Y contentsolo funciona con pseudo-elementos.
ScottS

7
Esta es una solución muy incorrecta, principalmente por lo que @ScottS ya escribió. Se supone que el "contenido" solo funciona con pseudoelementos y no se supone que los pseudoelementos funcionen con etiquetas de cierre automático. Esto puede funcionar por ahora, pero no me atrevería a llamar a esta solución preparada para el futuro.
nd_macias

16

Si agrega en el estilo

br{
    display: none;
}

Entonces esto funcionará. Sin embargo, no estoy seguro de si funcionará en versiones anteriores de IE.


3
esto fue publicado antes y tiene menos votos .. ¿por qué?
Mr_Green

A veces, simplemente nos ignoran; (
Tim B James

@TimBJames no funciona en FIREFOX, puede consultar mi comentario detallado arriba
shinesecret

12

Así es como lo hago:

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

6

Puede usar spanelementos en lugar de brsi desea que funcione el método de espacio en blanco, ya que depende de pseudoelementos que "no están definidos" para los elementos reemplazados.

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

MANIFESTACIÓN

El salto de línea se logra simplemente configurando el elemento de tramo apropiado en display:block.

Al usar ID y / o clases en su marcado HTML, puede apuntar fácilmente a cada uno o combinación de elementos span mediante CSS o usar selectores CSS como nth-child().

Entonces, por ejemplo, puede definir diferentes puntos de interrupción utilizando consultas de medios para un diseño receptivo.

Y también puede simplemente agregar / eliminar / alternar clases mediante Javascript (jQuery).

La "ventaja" de este método es su solidez: funciona en todos los navegadores que admiten pseudoelementos (consulte: ¿Puedo usar - Contenido generado con CSS ).

Como alternativa, también es posible agregar un salto de línea a través de pseudoelementos:

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

MANIFESTACIÓN


4
¿Se perdió esta parte de la pregunta: "Suponiendo que no puedo editar el código fuente html"?
ScottS

1
@ScottS: No, no lo hice. Tal vez te perdiste la parte: 'Me gustaría una solución a la respuesta de @Aneesh Karthik C para firefox y opera' (ya que el que inició la recompensa no es el OP). Y la respuesta a esto es que no es posible con <br>, al menos no entre navegadores. Entonces mostré una alternativa.
Netsurfer

2
No, no me perdí esa parte (ese OP es diferente de la recompensa y el enfoque en la respuesta de Aneesh). Pero la respuesta de Aneesh está en el contexto de toda la pregunta, "¿Ignorar <br> con CSS?" Parece bastante obvio que si uno tiene el control real del html, entonces simplemente eliminar los <br>elementos resuelve el problema (presumiblemente reemplazándolos con espacios). Así que todo el tema que preocupa a la pregunta en su conjunto es cuándo uno no tiene control del html ; complicado por la estipulación agregada de que realmente no querían usar javascript (por cualquier motivo) para resolverlo.
ScottS

La pregunta "¿Cómo ignorar <br>con CSS?" ya fue respondido. Y solo si tienes el control del HTML, eso no significa que quieras cambiarlo. Pero en el diseño receptivo, a menudo es deseable tener el control de los saltos de línea (aparte del ajuste automático). Y en tales casos, el método de tener espacios en blanco o no controlados por CSS (media queries) es al menos "un método" para lograr el objetivo.
Netsurfer

Esto funcionó mejor para mí ahora que las soluciones anteriores ya no funcionan en Firefox.
Christos Hrousis

3

Para mí se ve mejor así:

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

Para eso, puedes hacer lo siguiente:

br{display: none;}

y si está dentro de alguna etiqueta PRE, entonces puede y si desea que la etiqueta PRE se comporte como un elemento de bloque normal, puede usar este CSS:

pre {white-space: normal;}

O puede seguir el estilo de Aneesh Karthik C como:

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

Creo que lo conseguiste


Creo que no entendiste que a los pseudoelementos les gusta ::beforey ::afterson al menos "indefinidos" para "elementos reemplazados" como br. ¡Así que nunca habrá un comportamiento de navegador consistente en el que se pueda confiar! ¡Lo único que puede hacer es no usar pseudo elementos con estos elementos!
Netsurfer

1

Según su pregunta, para resolver este problema para Firefox y Opera usando el enfoque Aneesh Karthik C , debe agregar el atributo "flotar" derecho ".

Mira el ejemplo aquí. Este CSS funciona en Firefox (26.0), Opera (12.15), Chrome (32.0.1700) y Safari (7.0)

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

¡Espero que esto responda a tu pregunta!


La propiedad de contenido solo tiene efecto sobre los pseudoelementos de CSS. ¡Así que es absolutamente inútil en tu demo! Y cómo "neutralizar" a brya está respondido (más de una vez). La pregunta es sobre el espacio en blanco condicional . Y como esto requiere el uso de pseudo elementos, no funciona conbr .
Netsurfer

Si lee la pregunta con atención. Entenderás la respuesta. He visto la respuesta anterior que es la mejor para evitar <br> simplemente configurándola para mostrar: none. Pero según la segunda pregunta, ¿dónde quiere saber cómo puede abordar el problema que se avecina en la solución FF y Opera para Aneesh?
shinesecret

He leído no solo la pregunta, sino también todas las respuestas y comentarios con mucha atención. ¡La propiedad del contenido bres simplemente una tontería! ¿Y todavía no puedo ver qué tiene que ver el resto de su respuesta con "espacios en blanco condicionales y brekas de línea"? ¿Quizás puedas explicarlo más, por favor?
Netsurfer

1
Su ejemplo es engañoso, ya que tiene espacios alrededor de los brelementos. Si los elimina, verá que no funciona para agregar ningún espacio.
ScottS

1
En su ejemplo, tiene tres brelementos, con espacios antes y después del primero y el último. Son esos espacios los que hacen que parezca que su solución está funcionando, cuando en realidad no lo está. Cuando eliminas esos espacios, como hice en mi ejemplo revisado, puedes ver que tu solución no agrega ningún espacio en Firefox.
ScottS

0

Si bien esta pregunta parece que ya se ha resuelto, la respuesta aceptada no me resolvió el problema en Firefox. Firefox (y posiblemente IE, aunque no lo he probado) omite los espacios en blanco mientras lee el contenido de la etiqueta "contenido". Si bien entiendo completamente por qué Mozilla haría eso, trae su parte de problemas. La solución más fácil que encontré fue usar espacios irrompibles en lugar de los regulares, como se muestra a continuación.

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

Echa un vistazo .


1
¿Por qué tu violín no tiene el beforeelemento en a br? Ni siquiera tiene un bren su html en el violín. Parte del problema es que beforeno funciona bren algunos navegadores.
ScottS

Ese es un comportamiento bastante esperado, como se indica en la especificación: 2.5.1
Modismos

Eso es ciertamente extraño, funciona cuando lo aplico en mi proyecto. Sin embargo, mi texto no es todo HTML, el contenido que estoy modificando proviene de una base de datos. Lamento que mi respuesta no haya ayudado, entonces.
Santo Guevarra

0

Sí, puedes ignorar esto <br>. Es posible que lo necesite especialmente en el caso de un diseño receptivo en el que necesite eliminar las interrupciones para los dispositivos móviles.

HTML

<h2>

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

</h2>

CSS para ejemplo móvil

/* Resize the browser window to check */

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

Consulte este Codepen:
https://codepen.io/fluidbrush/pen/pojGQyM


-1

Simplemente puede convertirlo en un comentario.

O puedes hacer esto:

br {
display: none;
}

Pero si no lo quieres, ¿por qué lo pones ahí?

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.