【发布时间】:2014-04-03 13:59:59
【问题描述】:
开发一个应用程序,我必须突出显示在input[type=text] 中输入的字符。字符也可以是spaces 和tabs。这就是我不想为文本添加颜色而是背景颜色的原因,以便我的用户知道元素中写入了某些内容。
我没有什么可以帮助你回答的,但是我想要实现的手工制作的图片和一个 jsfiddle 链接,我将与那些不介意帮助我的人一起尝试achieving我的目标是免费的。
【问题讨论】:
开发一个应用程序,我必须突出显示在input[type=text] 中输入的字符。字符也可以是spaces 和tabs。这就是我不想为文本添加颜色而是背景颜色的原因,以便我的用户知道元素中写入了某些内容。
我没有什么可以帮助你回答的,但是我想要实现的手工制作的图片和一个 jsfiddle 链接,我将与那些不介意帮助我的人一起尝试achieving我的目标是免费的。
【问题讨论】:
::first-line 伪元素 (适用于 Webkit 浏览器)
一种选择是使用::first-line伪元素,如下:
input[type="text"]::first-line {
background-color: gold;
}
我应该注意,这仅适用于 Webkit web browsers,包括 Safari、Chrome 和 Opera15+。
5.12.1 The :first-line pseudo-element
:first-line伪元素只能附加到 block container element。
但是CSS level 3 spec 声明:
7.1. The ::first-line pseudo-element
在 CSS 中,
::first-line伪元素只有在 附加到块状容器,例如块盒,inline-block, 表格标题或表格单元格。
因此,基于 CSS level 3 规范 ::first-line 适用于 inline-block 元素。由于基于 Webkit 的网络浏览器将 <input> 元素显示为 inline-block,我们可以使用 inputs 上的伪元素来选择文本。
而其他一些网络浏览器(包括 Firefox)将input 显示为inline,这就是为什么::first-line 对此类网络浏览器上的input 元素没有影响。
我对@987654329@ 元素做了一个小测试。
text-shadow 值这似乎不是一个真正的解决方案,但我们可以通过使用多个text-shadow 值来伪造效果,如下所示:
input[type="text"] {
text-shadow: 0 0 50px gold,
0 0 50px gold,
0 0 50px gold,
0 0 50px gold,
0 0 50px gold,
0 0 50px gold,
0 0 50px gold,
0 0 50px gold,
0 0 50px gold,
0 0 50px gold;
}
WORKING DEMO (或者什么fancier)
<div> & ::first-line
作为一个选项,您可以将contenteditable 属性用于<div> 元素,并使用appearance 属性将文本输入的用户代理默认样式表应用于<div> 元素,如下所示:
<div contenteditable="true" class="text-input form-control">
text with background-color
</div>
然后,您可以使用:first-line 伪元素来分配背景颜色:
.text-input {
display: inline-block;
width: auto;
min-width: 200px;
-webkit-appearance: textfield;
-moz-appearance: textfield;
appearance: textfield;
white-space: nowrap;
}
.text-input:first-line {
background-color: gold;
}
缺点:
<div> 元素的 Enter 键和/或通过 JavaScript 按下该键来提交表单。jQuery 版本:
$('.text-input').keypress(function(e){
if (event.keyCode == 10 || event.keyCode == 13) {
e.preventDefault();
// Submit the form
}
});
您必须获取 content editable <div> 的内容,并在通过 JavaScript 提交表单时将该值分配给隐藏的 <input> 元素。例如,检查下面的链接:
最后,您可以使用 JavaScript 创建/调整输入元素下方的彩色框。
在这种方法中,我们将<input> 包装为具有零宽度 彩色子元素的relative 定位包装器,然后使用absolute 定位从文档正常流中删除输入并将它放在彩色盒子上。
当我们开始输入文本输入时,相同的内容将被插入到下面的彩色框中,因此彩色框的宽度与文本的宽度相匹配。
还有一件事:
输入不应有任何边框、背景甚至默认appearance。最好用另一个元素包裹彩色框本身,并为该元素应用适当的样式,使其看起来像一个真正的输入元素。
就是这样!
这里是使用 jQuery highlightTextarea plugin 的上述逻辑的a sort of implementation。它可能不适合 <input> 元素,因为它是为 <textarea>s 设计的。
【讨论】:
<input> 是一个空的 HTML 标记。但是,有 Javascript 解决方案可以达到相同的效果。我会继续寻找原因,我会更新答案。
text-shadow 的解决方法,它在 Firefox 上确实有效(而且看起来很不错)。在 IE 上不太好。
el.select()。【讨论】: