我已经四处寻找,但自己无法找到解决方案。我正在尝试制作一个基本的可编辑代码编辑器,对于行号,我选择使用每行一个段落,并在CSS伪元素中设置计数器。
.editor {
display: inline-block;
border: 1px black solid;
font-family: "Consolas", "Monaco", "Courier New", monospace;
counter-reset: line;
width: 90%;
height: 350px;
overflow: scroll;
padding-left: 0;
margin-left: 0;
z-index: 1;
}
.editor p {
display: block;
counter-increment: line;
background-color: #FFF;
text-align: left;
margin: 0px;
z-index: 2;
outline: none;
}
.editor p:before {
display: inline-block;
width: 2em;
height: 100%;
border-right: 1px black solid;
padding-right: 1em;
margin-right: 1em;
content: counter(line);
color: #FFF;
background-color: #006;
text-align: right;
/*-webkit-user-select: none;
user-select: none;*/
}
<div class="editor" contenteditable="true" spellcheck="false">
<p>Some paragraph</p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Maecenas aliquet nunc non pulvinar luctus. Cras finibus turpis at arcu mollis, nec fermentum mi pretium. Aliquam suscipit lacus sapien, eu fringilla enim malesuada quis. Sed ut tincidunt erat.
In posuere vulputate venenatis. Mauris quis porta magna. Phasellus pharetra in nisl et luctus. Etiam in ultrices risus. Morbi vel dapibus ex. Suspendisse gravida libero non malesuada congue. Pellentesque ut nunc diam.</p>
<p> </p>
<p> </p>
<p> </p>
</div>
问题在于,如果段落有点长,剩下的文本将会出现在我的计数器伪元素下面。我希望将:before计数器扩展到与段落相同的高度。
我尝试在段落上使用position:relative
,并在p:before
伪元素上使用position:absolute; height:100%
,就像这里所解释的那样: 如何使伪元素检测非伪元素的高度?
在我的情况下,这种方法不起作用,因为我不希望p:before
元素超过并覆盖段落,我只想要与当前行为相同,只是希望p:before
元素以相同的高度延伸。
我也不希望这条线超过包装容器的宽度。我尝试了许多方法,但未能找到解决方案。