您可以使用CSS定位<br />吗?


160

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

我希望每次换行时都有一个1px的虚线。我正在使用自己的CSS自定义网站,并且无法更改设置的HTML,否则我将使用其他方式。

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


Answers:


169

BR产生一个换行符,它只是一个换行符。由于此元素没有内容,因此只有很少的样式可以应用在上面,例如clearposition。您可以设置BR的边框,但看不到它,因为它没有视觉尺寸。

如果您想在视觉上将两个句子分开,那么您可能想要使用用于此目标的水平标尺。由于您无法更改标记,因此恐怕仅使用CSS就无法实现。

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

[T]导致BR处于某种奇怪的状态,因为一方面,它不被视为普通元素,而是作为生成内容中\ A的实例,但另一方面,它被视为这是一个普通元素,允许在其中使用CSS属性(该属性的有限子集)。

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

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

Grant Wagner的测试表明,无法BR像其他元素一样进行样式设置。也有一个在线网站,您可以在浏览器中测试结果

更新资料

pelms进行了进一步的研究,并指出 IE8(在Win7上)和Chrome 2 / Safari 4b可以使您进行一些样式设置BR。确实,我使用IE Net Renderer的IE8引擎检查了IE演示页面,并且该页面可以正常工作。

Update 2 c69进行了一些进一步的研究,结果表明您可以为标记设置br较大的样式(尽管不是跨浏览器),但这不会影响换行符本身,因为它似乎属于父容器。


好答案。如果不是跨浏览器,则不值得尝试设置其样式,除非您仅针对一个浏览器(也许仅针对移动设备)。否则,修改HTML以允许样式设置(<p>标签,有人吗?)似乎很有意义
2016年

49

尝试以下操作,我使用Update 2将它与另一个获得高分答复的答案放在一起,它对我来说非常理想:

br
{   content: "A" !important;
    display: block !important;
    margin-bottom: 1.5em !important;
}

在Edge和IE上似乎无法使用,但它们不是真正的浏览器。
小丑

31

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

当它是代码的一部分时,您不想(或不能)更改,并且您不想<br>显示此特定内容。

.xxx br {display:none}

可以节省很多时间,有时甚至可以节省您的一天。


20

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

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

不起作用。

它已经在IE 6、7和8,Firefox 2、3和3.5B4,适用于Windows的Safari 3和4,Opera 9.6和10(alpha)和Google Chrome(版本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);
}

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

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

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


3
:before不存在不存在的内容。添加content:""; display:block到第二条规则。
Kornel

10

我知道您无法编辑HTML,但是如果可以修改CSS,可以添加JavaScript吗?

如果是这样,您可以包括jquery,然后您可以

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

1
您想说$('br')。before('<span class =“ myclass”> </ span>');
molokoloco 2011年

10
br { padding: 1px 8px; border-bottom: 1px dashed #000 }

如下所示在IE8中呈现...虽然在一种浏览器中使用并不多。

IE 8屏幕截图

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

也,

br:after { content: "..." }  
br { content: "" }`

要么,

br:after {
    border: 1px none black;
    border-bottom-style: dashed;
    content: "";
    padding: 0 6px 0;
}

br { content: "" }

在Chrome 2 / Safari 4b中用虚线表示,但失去了换行符(除非有人能提出重新引入的方法),这使它变得越来越没有用了。

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


那很有意思。我无法在IE8下重现该内容。您是否可以在线举一个示例,将其作为IE8中的嵌入式图像?
viam0Zah

添加了链接-Win7使用的IE8版本稍有不同,以防造成任何不同。
pelms

1
@pelms谢谢,我用IENetRenderer检查了IE测试页,它的确显示了边框BR。谢谢,我用您的测试结果更新了答案。
viam0Zah

2

我自己的测试最终表明,br标签不喜欢以CSS为目标。

但是,如果您可以添加样式,那么您还可以在页面标题中添加一个脚本标签吗?链接到外部.js执行以下操作:

function replaceLineBreaksWithHorizontalRulesInElement( element )
{
    elems = element.getElementsByTagName( 'br' );
    for ( var i = 0; i < elems.length; i ++ )
    {
        br = elems.item( i );
        hr = document.createElement( 'hr' );
        br.parentNode.replaceChild( hr, br );
    }
}

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


dc3写道:“很遗憾,我无法更改html。
viam0Zah

2
@Török:我发布的答案不仅是针对OP,而是针对所有发现此问题的人。
克里斯(Kris)

2

这似乎解决了问题:

<!DOCTYPE html>

<style type="text/css">
#someContainer br { display:none }
#someContainer br + a:before { content:"|"; color: transparent; letter-spacing:-100px; border-left: 1px dashed black; margin:0 5px; }
</style>

<div id="someContainer"><a>link</a><br /><a>link</a><br /><a>link</a></div>

1

BR是内联元素,不是块元素。

因此,您需要:

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

否则,由于内联元素没有边框,内边距或边距,因此对此类事情比较挑剔的浏览器将拒绝为您的BR元素添加边框。


内联元素确实具有边框,内边距和边距-仅以其他方式起作用。
viam0Zah

我正在尝试使用Firebug在Fx中进行操作。我也尝试过,但是对我没有用。我注意到换行符标记中的斜杠不是浮动的(如果这是正确的术语),即br和/之间没有空格。这是一个因素吗?我以为必须有一个空间。无论如何,我还是在萤火虫中编辑了html来解决此问题,但还是一无所获。无论如何,感谢大家的帮助-以前从未使用过此网站,我非常惊讶我得到这么快的回复。您来到这里的好社区。
dc3

2
@richard:您是否实际测试过该浏览器?我在IE 6、7和8,Firefox 2、3和3.5B4,适用于Windows的Safari 3和4,Opera 9.6和10(测试版)和Google Chrome(版本1)中进行了尝试,但在任何一个版本中均无法使用。
Grant Wagner,2009年

1

更新9/13/2019:

设置<br>标签样式的目的是为了使“更大”的换行(即,各行之间留有一些多余的空间)。

已对“ oldbig”类(如下)进行了测试,并在Chrome 66.0.3359.181,Firefox Quantum 60.0.2,Edge 42.17134.1.0和IE 11.48.17134.0中正常工作。不幸的是,它破解了Chrome版本76及其衍生版本(大约在2019年8月)。症状是行之间的多余空间不再显示。

在最新版本的Chrome(76.0.3809.132),Opera,Firefox,Edge,IE,Brave和Palemoon的最新版本中,“ newbig”类已经过测试并可以正常工作:

br.oldbig {line-height:190%;vertical-align:top;}
br.newbig {display:block;content:"";margin-top:0.5em;line-height:190%;vertical-align:top;}

这是一个演示:

br.oldbig {line-height:175%;vertical-align:top;}
br.newbig {display:block;content:"";margin-top:0.5em;line-height:190%;vertical-align:top;}
<p style="max-width:20em">This is a paragraph which demonstrates the difference 
 between a line-break which occurs when the text exceeds the max-width, and a 
 line-break forced by a &lt;br&gt; tag here:<br>
 and a line break forced by a &lt;br class=oldbig&gt; tag here:<br class=oldbig>
 and a line break forced by a &lt;br class=newbig&gt; tag here:<br class=newbig>
 This is the next line after the &lt;br class=newbig&gt; tag (but still 
 part of the same paragraph).</p>
<p style="max-width:20em">And this is another paragraph, entirely.</p>

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

屏幕截图


0

这将起作用,但仅在IE中有效。我在IE8中测试过。

br {

  border-bottom: 1px dashed #000000;
  background-color: #ffffff;
  display: block;
  }

0

我把一个<br>标签为<span>标签,并能够使用display:none;<span>,以控制时不使用<br>使用媒体查询标签。


为什么不直接针对目标<br>而不是将其包装在一个范围内呢?
加文

0

古老的问题,但这是一个非常整洁的解决方案,可能仍被那些仍在怀疑是否有可能的人使用:):

br{
    content: '.';
    display: inline-block;
    width: 100%;
    border-bottom: 1px dashed black;
}

使用此修复程序,您还可以删除网站上的BR(只需将宽度设置为0px)


-2

为什么不只使用HR标签?完全根据您的需求量身定制。Kinda喜欢在桌上摆着汤匙时尝试制作叉子来吃汤。


并非适用于所有用例,因为hr是一个障碍元素-因此样式受到限制
Thariama 2010年

1
显然他想使用clear:all,请参阅Gabor的出色答复。因此,您的前叉隐喻毫无意义。
eddy147
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.