如何在<input>元素中创建标签?

col*_*rco 41 html forms label placeholder

我想在输入元素中插入一个描述性文本,当用户点击它时,该元素会消失.

我知道这是一个非常常见的技巧,但我不知道该怎么做..

什么是最简单/更好的解决方案?

Ric*_*haw 118

如果您使用的是HTML5,则可以使用该placeholder属性.

<input type="text" name="user" placeholder="Username">
Run Code Online (Sandbox Code Playgroud)

  • 占位符文本不是标签元素的可访问替代品:http://www.w3.org/html/wg/drafts/html/master/forms.html#the-placeholder-attribute (10认同)
  • +1.这个答案应该说明这只是HTML5. (9认同)
  • 此外,根据[本网站](http://caniuse.com/input-placeholder),IE甚至直到IE9才支持此功能. (2认同)

Cor*_*ker 45

<input name="searchbox" onfocus="if (this.value=='search') this.value = ''" type="text" value="search">
Run Code Online (Sandbox Code Playgroud)

一个更好的例子是SO搜索按钮!这就是我从中获取此代码的地方.查看页面源是一个有价值的工具.

  • 您的解决方案略有扩展:<input name ="q"class ="textbox"onfocus ="if(this.value =='search')this.value =''"onblur ="if(this.value ==' ')this.value ='search'"type ="text"value ="search"> (24认同)
  • 你可以使用defaultValue属性,所以你需要在代码中只写一次标签文本(在value属性中),而不是三次:<input type ="text"value ="Search"onfocus ="if(" this.value == this.defaultValue)this.value =''"onblur ="if(this.value =='')this.value = this.defaultValue"> (23认同)

Tex*_*Tex 37

在我看来,最好的解决方案既不涉及图像也不涉及输入的默认值.相反,它看起来像David Dorward的解决方案.

对于没有javascript的屏幕阅读器和用户来说,它很容易实现和降级.

看看这里的两个例子:http: //attardi.org/labels/

我通常在表单上使用第二种方法(labels2).


Que*_*tin 5

常用方法是使用默认值作为标签,然后在字段获得焦点时将其删除。

我真的不喜欢这种方法,因为它涉及可访问性和可用性。

相反,我将从在字段旁边使用标准元素开始。

然后,如果JavaScript是活动的,则在祖先元素上设置一个类,这会导致一些新样式应用该类:

  • 相对放置包含输入和标签的div
  • 绝对放置标签
  • 绝对将输入放置在标签顶部
  • 删除输入的边框并将其背景色设置为透明

然后,每当输入失去焦点时,我都会进行测试以查看输入是否具有值。如果存在,请确保祖先元素具有类(例如“ hide-label”),否则请确保其不具有该类。

只要输入获得焦点,就设置该类别。

样式表将在选择器中使用该类名来隐藏标签(通常使用text-indent:-9999px)。

这种方法为所有用户(包括禁用了JS的用户和使用屏幕阅读器的用户)提供了体面的体验。


小智 5

我将@Cory Walker 提出的解决方案与@Rafael 的扩展放在一起,而@Tex 女巫的单一形式对我来说有点复杂,并提出了一个希望能够实现的解决方案

禁用 javascript 和 CSS 时防错。

它使用表单字段的背景颜色来显示/隐藏标签。

<head>

<style type="text/css">
<!--
    input {position:relative;background:transparent;} 
-->
</style>

<script>
    function labelPosition() {
        document.getElementById("name").style.position="absolute"; 
            // label is moved behind the textfield using the script, 
            // so it doesnt apply when javascript disabled
    }
</script>

</head>
<body onload="labelPosition()">

<form>
        <label id="name">Your name</label>
        <input type="text" onblur="if(this.value==''){this.style.background='transparent';}" onfocus="this.style.background='white'">
</form>

</body>
Run Code Online (Sandbox Code Playgroud)

查看正在运行的脚本: http: //mattr.co.uk/work/form_label.html