忽略CSS?


114

我正在一个网站上,其中<br>某些标题插入了换行符。假设我无法编辑源HTML,是否有CSS可以忽略这些中断的方法?

我正在移动网站的优化,所以我真的不想使用JavaScript。


1
@Ben Johnson mk2:您的问题的答案是:“我想为@Aneesh Karthik C对于Firefox和Opera的答案提供解决方案”是,使用br元素是不可能的!原因已经被多次解释!在我的回答中,我向您展示了一种以有效,健壮和跨浏览器的方式实现目标的替代方法。
Netsurfer 2014年

Answers:


198

使用css,您可以“隐藏” br标签,它们不会起作用:

br {
    display: none;
}

如果只想在特定的标题类型中隐藏某些内容,只需使CSS更具体即可。

h3 br {
    display: none;
}

11
确保也查看Aneesh的答案,这是相关的,并解决了enobrev在他的考虑中没有考虑的问题。
里克·卡尔德

3
同意,Aneesh的答案是非常好的补充。 stackoverflow.com/a/18040142/14651
enobrev

2
此解决方案不适用于Firefox。如果<br/>周围没有空格,则它将<br/>周围的单词组合在一起。这是示例,您可以在下面
shinesecret 2014年

1
如果您的目标是响应式设计,则唯一的跨浏览器解决方案是@Netsurfer。它不能完全按照所陈述的方式回答问题,但可以在所有现代浏览器中实现目标。
安德鲁·伦丁2014年

94

注意:此解决方案仅适用于Webkit浏览器,该浏览器将伪元素错误地应用于自动关闭标签。

作为上述答案的补充,值得注意的是,在某些情况下,需要插入一个空格而不是仅仅忽略<br>

例如上述答案将变成

Monday<br>05 August

Monday05 August

正如我在尝试格式化每周活动日历时所验证的那样。最好在“星期一”之后插入一个空格。通过在CSS中插入以下内容,可以轻松完成此操作:

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

这将使

Monday<br>05 August

看起来像

Monday 05 August

如果要用逗号分隔,可以将content属性更改为,也可以在其中br:after添加', '任何要' '用作分隔符的属性!顺便说说

Monday, 05 August

看起来很整洁;-)

请参阅此处以获取参考。

与上述答案一样,如果要使其特定于标签,则可以。就像您希望该属性用于tag一样<h3>,只需h3br和之前添加一个each即可br:after

它最常用于伪标签。


2
真是太天才了!
2013年

1
做得好,实际上是在考虑禁用它的后果!
里克·卡尔德

10
很好,但这似乎仅适用于具有Firefox和IE的Webkit浏览器(Chrome和Safari),此技术无效,请检查Firefox和IE 的jsfiddle.net/nicooprat/ZHxNA ...有关如何替换br的任何想法有一个空间以便它可以与所有主要浏览器一起使用?
firepol

6
@firepol:实际上,Firefox和IE正在做“正确”的事情,因为a <br />伪元素不应该使用的元素。并且content仅适用于伪元素。
ScottS 2014年

7
这是非常错误的解决方案,主要是因为@ScottS已经写了什么。“内容”应该仅与伪元素一起使用,而伪元素不应该与自闭标签一起使用。这可能暂时可行,但我不敢将此解决方案称为过时的。
nd_macias 2014年


12

这是我的方法:

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

6

如果希望空白方法起作用,则可以使用span元素代替br,因为它取决于伪元素,这些元素对于替换元素而言“未定义”。

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

演示

只需将适当的span元素设置为即可实现换行display:block

通过在HTML标记中使用ID和/或类,您可以轻松地通过CSS定位span元素的每个单个或组合,或使用CSS选择器(如)nth-child()

因此,您可以例如通过使用媒体查询来响应布局来定义不同的断点。

您还可以通过Javascript(jQuery)轻松添加/删除/切换类。

这种方法的“优势”在于它的鲁棒性-在支持伪元素的每种浏览器中都可以使用(请参阅:我可以使用-CSS生成的内容)。

或者,也可以通过伪元素添加换行符:

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

演示


4
您是否错过了问题的这一部分:“假设我无法编辑源HTML”?
ScottS 2014年

1
@ScottS:不,我没有。也许您错过了这一部分:“我想为@Aneesh Karthik C的Firefox和歌剧答案提供解决方案”(因为发起赏金的不是OP)。答案是,使用<br>,至少不是跨浏览器,是不可能的。所以我展示了一个替代方案。
Netsurfer 2014年

2
不,我没有错过这一部分(OP与赏金以及对Aneesh答案的关注不同)。但是Aneesh的答案是在整个问题的范围内,即“使用CSS忽略<br>吗?” 这似乎相当明显,如果一个人拥有HTML的实际控制人,则只需删除<br>元素可以解决这个问题(可能用空格代替)。因此整个问题所关注的整个问题是什么时候无法控制html ; 由于增加了规定,他们真的不希望使用javascript(无论出于何种原因)来解决它而变得更加复杂。
ScottS

问题“如何忽略<br>CSS?” 已经回答了。而且只有在您控制了并不意味着要这样做的HTML时,您才想对其进行更改。但是在响应式设计中,通常希望控制换行(自动换行除外)。在这种情况下,具有空白或不受CSS控制的方法(媒体查询)至少是实现该目标的“一种方法”。
Netsurfer 2014年

现在,上述解决方案在Firefox中不再起作用,这对我来说效果更好。
Christos Hrousis'3

3

对我来说看起来像这样更好:

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

为此,您可以这样做:

br{display: none;}

并且如果它在某些PRE标签内,则可以,并且如果您希望PRE标签的行为类似于常规的block元素,则可以使用以下CSS:

pre {white-space: normal;}

或者,您可以遵循Aneesh Karthik C的样式, 例如:

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

我想你明白了


我认为您错过了伪元素之类的问题::before::after而对于“替换元素”之类的伪元素至少是“未定义的” br。因此,永远不会有任何人可以依靠的一致浏览器行为!您唯一可以做的就是不要将伪元素与这些元素一起使用!
Netsurfer 2014年

1

根据您的问题,要使用Aneesh Karthik C方法为Firefox和Opera解决此问题,您需要添加“ float”“ right”属性。

在此处查看示例。该CSS可在Firefox(26.0),Opera(12.15),Chrome(32.0.1700)和Safari(7.0)中使用

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

我希望这能回答您的问题!


content属性仅对CSS伪元素有效。因此,在您的演示中绝对没有用!并且已经解决了如何“中和” a br(不止一次)。问题是关于条件空白。并且由于这需要使用伪元素,因此不适用于br
Netsurfer 2014年

如果您仔细阅读了问题。您将了解答案。我已经看到上面的答案,最好将其设置为display:none来避免<br>。但是,关于第二个问题,他想知道他如何解决FF和Opera for Aneesh解决方案中即将出现的问题。
shinesecret 2014年

我不仅仔细阅读了问题,还仔细阅读了所有答案和评论。的内容属性br简直是废话!我仍然看不到您的其余答案与“条件空白和行brekas”有什么关系?也许您可以进一步解释一下?
Netsurfer

1
您的示例具有误导性,因为br元素周围已经有空格。如果删除这些,您将发现它无法添加任何空间。
ScottS

1
在您的示例中,您具有三个br元素,第一个和最后一个元素之前和之后都有空格。正是那些空格使您的解决方案似乎在起作用,而实际上却并非如此。当您删除这些空格时,就像我在修改后的示例中所做的那样,您可以看到您的解决方案根本没有在Firefox中添加任何空格。
ScottS 2014年

0

尽管这个问题似乎已经解决了,但是接受的答案并没有在Firefox上为我解决问题。Firefox(可能还有IE,尽管我没有尝试过)在读取“内容”标签的内容时会跳过空格。尽管我完全理解Mozilla为什么会这样做,但确实带来了很多问题。我发现最简单的解决方法是使用不可破坏的空间,而不是常规的空间,如下所示。

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

看看吧


1
为什么您的小提琴上没有before元素br?您甚至br在小提琴中的html中都没有。问题的部分原因是在某些浏览器before中无法正常使用br
ScottS 2014年

如规范中所述,这是预期的行为:2.5.1通用解析器惯用语
Netsurfer 2014年

Tha一定很奇怪,当我在项目中应用它时,它就会起作用。我的文字不是全部HTML,但是我要更改的内容来自数据库。抱歉,我的助手没有帮助。
Santo Guevarra 2014年

0

是的,您可以忽略这一点<br>。在响应式设计的情况下,尤其是在移动设备上需要删除中断的情况下,可能会需要这样做。

的HTML

<h2>

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

</h2>

移动示例CSS

/* Resize the browser window to check */

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

查看此Codepen:https://codepen.io/fluidbrush/pen/pojGQyM


-1

您只需将其转换为评论即可。

或者您可以这样做:

br {
display: none;
}

但是,如果您不想要它,为什么要放在那里?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.