【发布时间】:2011-12-25 22:25:36
【问题描述】:
我想只使用 CSS 而没有 JavaScript 或 jQuery 来设置输入框的占位符值。
我该怎么做?
【问题讨论】:
标签: html css placeholder
我想只使用 CSS 而没有 JavaScript 或 jQuery 来设置输入框的占位符值。
我该怎么做?
【问题讨论】:
标签: html css placeholder
你可以为 webkit 做这个:
#text2::-webkit-input-placeholder::before {
color:#666;
content:"Line 1\A Line 2\A Line 3\A";
}
【讨论】:
AFAIK,你不能单独使用 CSS。 CSS 有 content 规则,但即便如此,它也可用于使用伪选择器在元素之前或之后插入内容。如果您使用的是@Blender 指出的 HTML5,则需要使用 javascript 或使用 placeholder 属性。
【讨论】:
正如@Sarfraz 已经提到的 CSS,我将添加 HTML5。
您可以使用 HTML5 placeholder 属性:
<input type="text" placeholder="Placeholder text blah blah." />
【讨论】:
$('#myFieldId').attr('placeholder', 'Search for Stuff');
某些类型的 input 没有 :after 或 :before 伪元素,因此您可以使用带有 SVG 文本元素的背景图像:
input {
background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='50px' width='120px'><text x='0' y='15' fill='gray' font-size='15'>Type Something...</text></svg>");
background-repeat: no-repeat;
}
input:focus {
background-image: none;
}
【讨论】:
如果内容是通过 ajax 加载的,请使用 javascript 来操作占位符。无论如何,每种 css 方法都是 hack-isch。
例如。使用 jQuery:
$('#myFieldId').attr('placeholder', 'Search for Stuff');
【讨论】:
另一种可以实现的方法,并且还没有真正看到任何其他人将其作为选项,而是使用锚点作为输入和标签周围的容器,并通过一些颜色技巧处理标签的移除, #hashtag 和 css a:visited。 (jsfiddle在底部)
您的 HTML 将如下所示:
<a id="Trickory" href="#OnlyHappensOnce">
<input type="text" value="" id="email1" class="inputfield_ui" />
<label>Email address 1</label>
</a>
还有你的 CSS,像这样:
html, body {margin:0px}
a#Trickory {color: #CCC;} /* Actual Label Color */
a#Trickory:visited {color: #FFF;} /* Fake "Turn Off" Label */
a#Trickory:visited input {border-color: rgb(238, 238, 238);} /* Make Sure We Dont Mess With The Border Of Our Input */
a#Trickory input:focus + label {display: none;} /* "Turn Off" Label On Focus */
a#Trickory input {
width:95%;
z-index:3;
position:relative;
background-color:transparent;
}
a#Trickory label {
position:absolute;
pointer-events: none;
display:block;
top:3px;
left:4px;
z-index:1;
}
你可以在 jsfiddle 看到这个工作,注意这个解决方案只允许用户选择一次字段,然后才能永久删除标签。也许不是您想要的解决方案,但绝对是我没有看到其他人提及的可用解决方案。如果您想多次试验,只需将您的#hashtag 更改为新的“未访问”标签即可。
【讨论】:
据我了解,
::-webkit-input-placeholder::before或::-webkit-input-placeholder::after,
添加更多占位符内容不再起作用。 认为它是一个新的 Chrome 更新。
真的很烦人,因为这是一个很好的解决方法,现在我回到只是在占位符中添加大量我想要的行之间的空格。 例如:
<input type="text" value="" id="email1" placeholder="I am on one line. I am on a second line etc etc..." />
【讨论】:
我最近不得不用 google 的搜索框来做这个,这是一个为极端情况保留的极端 hack(生成的选择器略有不同,但我在这个例子中使它工作)
/*
this is just used to calculate the resulting svg data url and need not be included in the final page
*/
var text = placeholder.outerHTML;
var url = "data:image/svg+xml;,"+text.replace(/id="placeholder"/g," ").replace(/\n|([ ] )/g,"");//.replace(/" /g,"\"");
img.src = url;
result.value = url;
overlay.style.backgroundImage = "url('"+url+"')";
svg,img{
border: 3px dashed black;
}
textarea{
width:50%;
height:300px;
vertical-align: top;
}
.wrapper{
position: relative;
display: inline-block;
}
#overlay{
position:absolute;
left:0;
top:0;
right:0;
bottom:0;
pointer-events: none;
background-repeat: no-repeat;
background-position: center left;
}
#my_input:focus + #overlay{
display: none;
}
As SVG <svg id="placeholder"xmlns="http://www.w3.org/2000/svg"width="235"height="13"><text x="0"y="10"font-family="Verdana"font-size="12" fill ="green">Some New Rad Placeholder</text></svg>
<br>
As IMG <img id="img">
<br>
As Data URI <textarea id="result"></textarea><br>
As "Placeholder" <div class="wrapper">
<input id="my_input" />
<div id="overlay">
</div>
【讨论】:
click on link to see placeholder with this code
也是根据this answer:
input{
background-image:url("data:image/svg+xml;utf8,<svg \
xmlns='http://www.w3.org/2000/svg' \
version='1.1' height='50px' width='120px'>\
<text x='0' y='15' \
fill='gray' font-size='15'>Type Email...</text></svg>");
background-repeat: no-repeat;
}
input:focus{
background-image:url("data:image/svg+xml;utf8,<svg \
xmlns='http://www.w3.org/2000/svg' \
version='1.1' height='50px' width='120px'>\
<text x='0' y='15' \
fill='gray' font-size='15'></text></svg>");
background-repeat: no-repeat;
}
【讨论】:
尝试使用:
.input_class:focus::placeholder{
color: transparent;
}
【讨论】:
将您的元标记更改为下面的标记,并在您的 HTML 输入标记中使用占位符属性。
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<input type="text" placeholder="Placeholder text" />
【讨论】: