具有交替行和行号的文本区域

Posted

技术标签:

【中文标题】具有交替行和行号的文本区域【英文标题】:Textarea with alternate rows and line numbers 【发布时间】:2019-02-21 11:28:41 【问题描述】:

我正在尝试使用交替行和行号绘制textarea。 获得行号的一个非常简单的解决方案如下 - 请参阅 here 了解更多详细信息。

textarea 
  background: url(http://i.imgur.com/2cOaJ.png);
  background-attachment: local;
  background-repeat: no-repeat;
  padding-left: 35px;
  padding-top: 10px;
  border-color: #ccc;
<textarea rows="10" cols="40"></textarea>

虽然有一个 textarea 与备用行只是一个简单的 as

textarea 
  background-image: linear-gradient(#F1F1F1 50%, #F9F9F9 50%);
  background-size: 100% 4rem;
  border: 1px solid #CCC;
  width: 100%;
  height: 400px;
  line-height: 2rem;
  margin: 0 auto;
  padding: 4px 8px;
<textarea rows="10" cols="40"></textarea>

两种解决方案都可以,但将它们结合起来就很棘手,因为两者都使用background 来破解行号和备用行背景。

【问题讨论】:

你能把两个文本区域并排放置,滚动条在外面,包含 div 吗? 【参考方案1】:

您可以通过将 textarea 包装在 div 中来组合它们,然后将剥离的背景样式分配给该包装 div,这样 2 个背景就像分层一样。

textarea 
  background: url(http://i.imgur.com/2cOaJ.png);
  background-attachment: local;
  background-repeat: no-repeat;
  padding-left: 35px;
  padding-top: 10px;
  border-color: #ccc;

  font-size: 13px;
  line-height: 16px;


.textarea-wrapper 
  display: inline-block;
  background-image: linear-gradient(#F1F1F1 50%, #F9F9F9 50%);
  background-size: 100% 32px;
  background-position: left 10px;
<div class="textarea-wrapper">
  <textarea rows="10" cols="40"></textarea>
</div>

我设置为 display: inline-block 的包装 div 像一个内联元素一样包装了 textarea,我将背景渐变放置在距离顶部 10px 的位置,以便为您提供 padding-top。

您可能需要调整渐变的背景大小以使其正确匹配textarea 的行高。

更新 对于@DavidThomas 的观点,为了帮助将您的文本与交替渐变对齐,背景大小的高度值应该是文本区域的行高的 2 倍(请参阅更新的 sn-p)。但更难的是让它与图像编号对齐。

【讨论】:

如果您输入字符,然后按回车键换行,您会看到数字与行高不一致。您需要考虑 &lt;div&gt;&lt;textarea&gt; 具有不同的 fontfont-sizeline-height @DavidThomas 查看更新。主要问题是将所有内容与具有数字的图像对齐。但他的问题是关于合并图像背景......没有准确排列。【参考方案2】:

您可以为同一个元素使用多个背景。

CSS 允许您通过background-image 属性为一个元素添加多个背景图像。

在你的情况下:

textarea 
  width: 100%;
  min-height: 100px;
  background: url(http://i.imgur.com/2cOaJ.png) top -12px left / auto no-repeat, 
              linear-gradient(#F1F1F1 50%, #F9F9F9 50%) top left / 100% 32px;
  border: 1px solid #CCC;
  box-sizing: border-box;
  padding: 0 0 0 30px;
  resize: vertical;
  line-height: 16px;
  font-size: 13px;


body 
  margin: 0;
&lt;textarea rows="10" cols="40"&gt;&lt;/textarea&gt;

【讨论】:

这种方法的问题是,在输入字符后,按回车换行,然后继续输入用户只能在备用行号上输入文本,这是一个有点奇怪的用户经验(i.stack.imgur.com/oeFYQ.png);也:填充。 :) 你是对的。我只是在这里提供了一个合并两个图像的解决方案。

以上是关于具有交替行和行号的文本区域的主要内容,如果未能解决你的问题,请参考以下文章

实现可调整大小的文本区域?

检测具有轮廓的文本区域后从图像中提取文本

基于浏览器的 IDE - 具有代码完成功能的文本区域?

Javascript / jQuery 获取我正在输入的文本区域的 id [重复]

如何在 IE 中禁用的文本区域上启用滚动条

在一页上的文本区域中写入,在另一页中显示文本数据[关闭]