Если вы читаете это, я надеюсь, у вас все хорошо!
У меня есть сырный, базовый c редактор кода , и я пытаюсь найти лучший подход для добавления пространства внизу текстовой области , чтобы пользователь не всегда печатал в самой нижней части текстовой области, например, когда что-то начинает переполняться / прокручиваться. Я думаю, что-то похожее на сам CodePen:)
Этот хитрый, потому что у меня есть два абсолютно позиционированных div, бок о бок (номера строк и строки, соответственно) и У меня синхронизирована прокрутка . Теперь добавьте к этому требование о добавлении некоторого пространства, и я застрял!
Вот подробный макет CodePen, в котором показан мой код незавершенного производства: CodePen: Textarea с Номера строк
$(document).ready(function() {
$(".bulk-editor .editor").bind("input propertychange", function() {
var lineCount = $(this).val().split("\n").length;
$(".lines").text('');
for (var i = 0; i < lineCount; ++i) {
$(".lines").append("<span class='linenum'></span>");
}
});
$('.editor').scroll(function() {
var top = $(this).scrollTop();
$('.lines').scrollTop(top);
});
});
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
html,
body {
height: 100%;
}
.container {
height: 300px;
padding: 16px 0;
}
.bulk-editor {
position: relative;
height: 100%;
width: 100%;
counter-reset: matches;
outline: none;
font-family: monospace;
border: 1px solid #ced4da;
overflow: hidden;
}
.bulk-editor-wrapper {
position: relative;
top: 0;
padding-top: 4px;
height: 100%;
width: 100%;
}
.lines {
position: absolute;
top: 0;
left: 0;
width: 40px;
height: 100%;
line-height: 1.2;
font-size: 1rem;
user-select: none;
outline: none;
border: none;
z-index: 2;
background: #e4e4e4;
overflow: hidden;
padding-top: inherit;
}
.linenum {
display: block;
width: 40px;
text-align: right;
color: #808080;
line-height: inherit;
font-size: inherit;
&::before {
counter-increment: matches;
content: counter(matches);
}
padding-right: 10px;
}
.editor {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
padding-left: 60px !important;
white-space: pre-wrap;
outline: none;
background-color: white;
border: none;
resize: none;
margin: 0;
color: grey;
line-height: 1.2;
font-size: 1rem;
overflow: auto;
padding-top: inherit;
&:focus {
color: black;
}
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<!--Refer to this article https://www.codeproject.com/Tips/5163219/HTML-Line-Numbering-using-textarea -->
<div class="container">
<div class="bulk-editor">
<div class="bulk-editor-wrapper">
<div class="lines"></div>
<textarea class="editor" rows="10" autocorrect="off" spellcheck="false"></textarea>
</div>
</div>
</div>
Я изо всех сил пытаюсь определить правильный подход. Может ли это быть сделано с использованием pure CSS или является более сложным JavaScript решением с использованием событий прокрутки требуется?
Если кто-либо испытал подобное требование и знает здравый подход, я все уши. Большое спасибо!