Has*_*ami 20
::first-line
伪元素(用于Webkit浏览器)一种选择是使用::first-line
伪元素,如下所示:
input[type="text"]::first-line {
background-color: gold;
}
Run Code Online (Sandbox Code Playgroud)
工作演示.
我应该注意,这只适用于Webkit Web浏览器,包括Safari,Chrome和Opera15 +.
根据CSS 2级规范:
所述
:first-line
伪元素只能连接到一个块容器元素.
但CSS级别3规范指出:
在CSS中,
::first-line
伪元素只有在附加到块状容器(例如块框,内联块,表格标题或表格单元格)时才能生效.
因此,基于CSS 3级规范::first-line
适用于inline-block
元素.由于基于Webkit的Web浏览器显示<input>
元素,因为inline-block
我们可以在input
s 上使用伪元素来选择文本.
而其他一些Web浏览器(包括Firefox)显示input
为inline
,这就是为什么对这些Web浏览器::first-line
上的input
元素没有影响的原因.
我做了一个小测试来显示display
input
元素的计算属性.
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;
}
Run Code Online (Sandbox Code Playgroud)
<div>
&::first-line
作为选项,您可以使用元素的contenteditable
属性<div>
,并使用appearance
属性将文本输入的useragent默认样式表应用于<div>
元素,如下所示:
<div contenteditable="true" class="text-input form-control">
text with background-color
</div>
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用: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;
}
Run Code Online (Sandbox Code Playgroud)
缺点:
<div>
和/或通过JavaScript按下提交表单.jQuery版本:
$('.text-input').keypress(function(e){
if (event.keyCode == 10 || event.keyCode == 13) {
e.preventDefault();
// Submit the form
}
});
Run Code Online (Sandbox Code Playgroud)
您必须使内容的内容可编辑, <div>
并<input>
在通过JavaScript提交表单时将该值分配给隐藏元素.例如,请查看以下链接:
最后,您可以使用JavaScript创建/调整input元素下方的彩色框.
在这种方法中,我们<input>
用一个relative
带有零宽度彩色子的定位包装器包装,然后我们通过使用absolute
定位从文档正常流中删除输入并将其放在彩色框上.
当我们开始输入文本输入时,相同的内容将被插入到下面的彩色框中,因此彩色框的宽度与文本的宽度相匹配.
还有一件事:
输入不应具有任何边框,背景甚至默认值appearance
.并且最好用另一个元素包装彩色框本身,并将适当的样式应用于该元素,使其看起来像一个真正的输入元素.
而已!
这是使用jQuery highlightTextarea插件的上述逻辑的一种实现.对于元素而言,它可能看起来不太好,因为它是为s 设计的. <input>
<textarea>