我正在为一个网站工作,其中某些标题中插入了换行符<br>
。 假设我无法编辑源HTML,那么是否有一种CSS方法可以忽略这些换行符?
我正在优化移动网站,因此我不想使用JavaScript。
我正在为一个网站工作,其中某些标题中插入了换行符<br>
。 假设我无法编辑源HTML,那么是否有一种CSS方法可以忽略这些换行符?
我正在优化移动网站,因此我不想使用JavaScript。
CSS可以“隐藏”br标签,使其不产生效果:
br {
display: none;
}
如果你只想隐藏某个特定标题类型中的一些内容,只需让你的CSS更具体即可。
h3 br {
display: none;
}
注意:此解决方案仅适用于Webkit浏览器,在自闭合标签上错误地应用伪元素。
作为上述答案的补充,值得注意的是,在某些情况下,需要插入一个空格而不仅仅是忽略<br>
:
例如,上述答案会将
Monday<br>05 August
至
Monday05 August
当我试图格式化我的每周事件日历时,我已经验证过:"Monday"后面插入一个空格是更好的。可以通过在CSS中插入以下内容来轻松实现:
br {
content: ' '
}
br:after {
content: ' '
}
这将会使得
Monday<br>05 August
看起来像
Monday 05 August
如果您想使用逗号分隔,可以在br:after
中的content
属性中更改为', '
,或者在' '
之间放置任何您想要的内容作为分隔符!顺便说一下
Monday, 05 August
看起来很整洁;-)
参考此处。
如前面的答案所述,如果您想使其针对特定标签有效,则可以执行。例如,如果您希望该属性适用于标签<h3>
,只需在br
和br:after
之前添加一个h3
即可。
它最常用于伪标签。
<br />
是一个伪元素不应该使用的元素之一。而 content
只能用于伪元素。 - ScottS如果你添加了样式
br{
display: none;
}
那么这将起作用。不确定它是否适用于较旧版本的IE。
这是我的做法:
br {
display: inline;
content: ' ';
clear:none;
}
br
替换为span
。 - reveltspan
元素代替 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) 简单地添加/ 删除/ 切换类。
这种方法的“优势”是其稳健性-适用于支持伪元素的所有浏览器(请参阅:Can I use - CSS Generated content)。
作为替代方案,还可以通过伪元素添加换行:
span.break:before {
content: "\A";
white-space: pre;
}
<br>
是不可能的,至少不是跨浏览器的。所以我展示了一种替代方法。 - Netsurfer<br>
标签?”这个问题已经有了答案。即使您控制HTML,也不意味着您想要更改它。但在响应式设计中,通常希望控制换行(而不是自动换行)。在这种情况下,通过CSS(媒体查询)控制空格或不控制空格的方法至少是实现目标的“一种方法”。 - Netsurfer我觉得这样看起来更好:
一些文字,一些文字,一些文字
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>
For that you can just do like this:
br{display: none;}
如果它在某个 PRE 标签中,那么你可以这样做。如果你想让 PRE 标签像常规块元素一样运作,可以使用以下 CSS:
pre {white-space: normal;}
或者你可以像Aneesh Karthik C那样遵循风格:
br {content: ' '}
br:after {content: ' '}
我认为你明白了
::before
和::after
)对于像br
这样的"替换元素"来说至少是"未定义"的事实。因此,你永远无法依赖一致的浏览器行为!你唯一能做的就是不要在这些元素上使用伪元素! - Netsurfer在这里检查示例。这个CSS适用于 Firefox(26.0)、Opera(12.15)、Chrome(32.0.1700)和Safari(7.0)。
br {
content: " ";
float:right;
}
br
标签的内容属性简直就是胡说八道!而且我仍然看不出你的回答与“条件空格和换行符”有什么关系?也许你可以再进一步解释一下? - Netsurferbr
元素周围已经有空格了。如果你删除这些空格,你会发现添加任何空格都不起作用。(http://jsfiddle.net/P6NZd/21/) - ScottSbr
元素,第一个和最后一个之前都有空格。正是这些空格使得你的解决方案看起来是有效的,但实际上并不是这样。当你去掉那些空格时,就像我在修改后的例子中所做的那样,你会发现你的解决方案在Firefox中根本没有添加任何空格。 - ScottSdisplay:contents
。br {
display:contents;
}
请查看https://developer.mozilla.org/zh-CN/docs/Web/CSS/display-box
[display:contents;] 这些元素本身不会产生特定的框。它们被伪框和其子框所替代[...] 大多数浏览器将从可访问性树中删除具有内容显示值的元素。[...] 不再被屏幕阅读技术宣布。
虽然这个问题似乎已经解决了,但是被接受的答案在Firefox上并没有解决我的问题。 Firefox(以及可能的IE,尽管我没有尝试过)在读取“content”标签的内容时会跳过空格。虽然我完全理解Mozilla为什么要这样做,但它确实带来了一些问题。 我找到的最简单的解决方法是使用不间断空格而不是常规空格,如下所示。
.noLineBreaks br:before{
content: '\a0'
}
看一下吧。
before
元素在 br
上?你甚至在 fiddle 的 html 中都没有 br
。问题的一部分是 before
在某些浏览器上无法在 br
上使用。 - ScottS
br
元素是不可能的!原因已经被解释了无数次!在我的答案中,我向你展示了一种替代方法,以有效、健壮并且跨浏览器地实现目标。 - Netsurfer