你能用CSS定位<br />吗?

dc3*_*dc3 150 html css line-breaks

是否可以<br/>使用CSS 定位换行符?

每次有一个换行符时我想要一条1px的虚线.我使用自己的CSS自定义网站,无法更改设置的HTML,否则我会使用其他方式.

我不认为这是可能的,但也许有人知道的方式.

Tör*_*bor 164

BR生成换行符,它只是一个换行符.由于此元素没有内容,因此只有少数样式适用于它,例如clearposition.您可以设置BR边框但不会看到它,因为它没有视觉尺寸.

如果你想在视觉上分开两个句子,那么你可能想要使用专门用于此目标的水平标尺.既然你不能改变标记,我恐怕只使用CSS你无法实现这一点.

看起来,它已经在其他论坛上讨论过了.从Re中提取:使用CSS设置BR元素的高度:

[T]他导致BR有点奇怪的状态,一方面它不被视为普通元素,而是作为生成内容中的\ A的实例,但另一方面它被视为一个普通的元素(有限的子集)允许CSS属性.

我还在CSS 1规范中找到了一个澄清(没有更高级别的规范提到它):

当前的CSS1属性和值无法描述'BR'元素的行为.在HTML中,'BR'元素指定单词之间的换行符.实际上,元素被换行符替换.CSS的未来版本可以处理添加和替换的内容,但基于CSS1的格式化程序必须特别处理'BR'.

格兰特瓦格纳的测试表明,没有办法BR像你可以用其他元素做的那样.还有一个在线网站,您可以在浏览器中测试结果.

更新

pelms做了一些进一步的调查,并指出 IE8(在Win7上)和Chrome 2/Safari 4b可以让你BR有点风格.事实上,我使用IE Net Renderer的IE8引擎检查了IE演示页面,但它确实有效.

更新2 C69做了一些进一步的调查,而且事实证明,你可以样式标记br相当严重(虽然不是跨浏览器),但是这不会影响断行本身,因为它似乎属于父容器.


Rok*_*Rok 45

尝试以下方法,我使用另一个高回报率的回复2将它放在一起,它对我来说非常有用:

br
{   content: "A" !important;
    display: block !important;
    margin-bottom: 1.5em !important;
}
Run Code Online (Sandbox Code Playgroud)

  • 似乎不适用于 Edge 和 IE,但它们不是真正的浏览器。 (4认同)
  • 它适用于最新版本的 Edge。我认为这是因为他们现在基于 Chromium。 (2认同)

Ber*_*fez 25

您需要为<br>标签设置样式有一个很好的理由.

如果它是您不希望(或不能)更改的代码的一部分,并且您希望<br>不显示此特定内容.

.xxx br {display:none}
Run Code Online (Sandbox Code Playgroud)

可以节省很多时间,有时也可以节省一天.


Gra*_*ner 19

为了未来可能错过我评论的访客的利益:

br {
    border-bottom:1px dashed black;
}
Run Code Online (Sandbox Code Playgroud)

不起作用.

它已在IE 6,7和8,火狐2,3&3.5B4,Safari浏览器3和4为Windows,歌剧9.6&10(阿尔法)和谷歌浏览器(版本2)进行了测试,并没有以任何的工作他们.如果将来有人发现某个浏览器确实支持某个<br>元素的边框,请随时更新此列表.

还要注意我尝试了很多其他的东西:

br {
    border-bottom:1px dashed black;
    display:block;
}

br:before { /* and :after */
    border-bottom:1px dashed black;
    /* content and display added as per porneL's comment */
    content: "";
    display: block;
}

br { /* and :before and :after */
    content: url(a_dashed_line_image);
}
Run Code Online (Sandbox Code Playgroud)

其中,以下内容适用于Opera 9.6和10(alpha)(感谢porneL!):

br:after {
    border-bottom:1px dashed black;
    content: "";
    display: block;
}
Run Code Online (Sandbox Code Playgroud)

当它仅在一个浏览器中支持时不是很有用,但我总是觉得看到不同的浏览器如何实现规范很有趣.

  • :没有内容之前不存在.添加`content:""; 显示:阻止`到第二个规则. (3认同)

Roy*_*ico 10

我知道你不能编辑HTML,但如果你可以修改CSS,你可以添加javascript吗?

如果是这样,你可以包括jquery,那么你可以做

<script language="javascript">
$(document).ready(function() {
    $('br').append('<span class="myclass"></span>');
});
</script>
Run Code Online (Sandbox Code Playgroud)


pel*_*lms 10

br { padding: 1px 8px; border-bottom: 1px dashed #000 }
Run Code Online (Sandbox Code Playgroud)

在IE8中呈现如下...虽然在一个浏览器中没有很多用处.

IE 8截图

(注意我正在使用IE 8.0.7100(在Win7 RC上),如果这有任何区别)

也,

br:after { content: "..." }  
br { content: "" }`
Run Code Online (Sandbox Code Playgroud)

要么,

br:after {
    border: 1px none black;
    border-bottom-style: dashed;
    content: "";
    padding: 0 6px 0;
}
Run Code Online (Sandbox Code Playgroud)

br { content: "" }

在Chrome 2/Safari 4b中给出了一个虚线,但是丢失了换行符(除非有人能想出一种方法来重新引入它)使它变得无用.

例如
IE8测试,Chrome/Safari测试其他测试


Kri*_*ris 5

我自己的测试最终表明br标签不喜欢成为 CSS 的目标。(2023 年 Safari 中仍然如此)

但是,如果您可以添加样式,那么您也许还可以在页面标题中添加一个 scrip 标签?.js链接到执行类似操作的外部:

function replaceLineBreaksWithHorizontalRulesInElement( element )
{
    const brs = element.querySelectorAll( 'br' );
    for ( let br of brs )
    {
        const hr = document.createElement( 'hr' );
        br.parentNode.replaceChild( hr, br );
    }
}
Run Code Online (Sandbox Code Playgroud)

简而言之,这不是最佳方案,但这是我的解决方案。

  • @Török:我发布的答案并不纯粹是为了OP,而是为了每个发现此页面有类似问题的人。 (2认同)

Dav*_*ton 5

2019 年 9 月 13 日更新:

<br>像这样设置标签样式的目的是制作一个“更大”的换行符(即,在两行之间留出一点额外的空间)。

“oldbig”类(如下)已在 Chrome 66.0.3359.181、Firefox Quantum 60.0.2、Edge 42.17134.1.0 和 IE 11.48.17134.0 中测试并正常工作,以将<br>. 不幸的是,它在 Chrome 76 及其衍生版本(大约 2019 年 8 月)中崩溃了。症状是不再显示行之间的额外空间。

“newbig” 类在当前版本的 Chrome (76.0.3809.132)、Opera、Firefox、Edge、IE、Brave 和 Palemoon 中经过测试并正常工作:

br.oldbig {line-height:190%;vertical-align:top;}
br.newbig {display:block;content:"";margin-top:0.5em;line-height:190%;vertical-align:top;}
Run Code Online (Sandbox Code Playgroud)

这是一个演示:

br.oldbig {line-height:190%;vertical-align:top;}
br.newbig {display:block;content:"";margin-top:0.5em;line-height:190%;vertical-align:top;}
Run Code Online (Sandbox Code Playgroud)
br.oldbig {line-height:175%;vertical-align:top;}
br.newbig {display:block;content:"";margin-top:0.5em;line-height:190%;vertical-align:top;}
Run Code Online (Sandbox Code Playgroud)

这是结果,显示在 Chrome v.76 中:

截屏


ric*_*ent 2

BR 是行内元素,而不是块元素。

所以,你需要:

 br.Underline{
    border-bottom:1px dashed black;
    display: block;
  }
Run Code Online (Sandbox Code Playgroud)

否则,对此类事情稍微挑剔的浏览器将拒绝将边框应用于 BR 元素,因为内联元素没有边框、填充或边距。

  • @richard:你真的测试过这个吗?如果是的话,哪个浏览器?我在 IE 6、7 和 8、Firefox 2、3 和 3.5B4、适用于 Windows 的 Safari 3 和 4、Opera 9.6 和 10(测试版)和 Google Chrome(版本 1)中尝试过,但在其中任何一个中都不起作用。 (2认同)