使用必需属性在HTML5输入字段上设置提示样式

时间:2011-04-14 07:55:38

标签: css forms html5 input required

使用required属性时,是否可以设置HTML5输入字段上显示的提示的样式。如果您不确定我在说什么,请单击此表单上的提交,而不填写任何内容。您应该有一个提示弹出窗口。

http://24ways.org/examples/have-a-field-day-with-html5-forms/24ways-form.html

我检查了CSS源代码,但没有看到有关提示的任何内容。

我发现以重置方式设置div元素的样式会影响它的显示方式。但我不知道如何专门针对它。

请注意:我不是指占位符。

干杯, 托马斯。

4 个答案:

答案 0 :(得分:13)

为什么你可以使用div-selector设置错误气泡的原因是Chrome 11/12中的一个错误,它应该是fixed in newer version。有一些伪类来设置Chrome 12中的错误气泡(可能还有Safari6)(:: - webkit-validation-bubble等)。您可以在following document中找到完整的HTML结构,包括伪元素选择器和一些样式示例。

请注意,这是HTML5表单约束验证和非标准的webkit扩展。如果要在所有支持HTML5验证的浏览器中使用一种方式设置错误消息样式,则必须使用JavaScript。

这个的关键原则是你必须为invalid-event添加一个处理程序(注意:无效事件不会冒泡),然后阻止默认交互。这将删除浏览器本机错误气泡,您可以在所有HTML5浏览器中实现自定义可设置样式的UI。

//Note: that we use true for useCapture, because invalid does not bubble
document.addEventListener('invalid', function(e){
    //prevent the browser from showing his error bubble
    e.preventDefault();
    //now you can implement your own validation UI (showError is a Custom method which has to be implemented by you
    showError(e.target, $.prop(e.target, 'validationMessage');
}, true);

上面的代码将为当前表单中的所有无效元素调用showError。如果您只想对第一个无效元素执行此操作,则可以执行以下操作:

document.addEventListener('invalid', (function(){
    var isFirst = true;
    return function(e){
        //prevent the browser from showing his error bubble
        e.preventDefault();
        //now you can implement your own validation UI
        if(isFirst){
            showError(e.target, $.prop(e.target, 'validationMessage');
            //set isFirst to false
            isFirst = false;
            //reset isFirst to true, so user can try to submit invalid forms multiple times
            setTimeout(function(){
                isFirst = true;
            }, 9);
        }
    };
})(), true);

如果您在网站上使用jQuery,我建议您使用webshims lib。 webshims lib在所有浏览器(包括IE6)中实现HTML5约束验证,并提供了一个简单的扩展,用于生成简单的自定义样式验证消息。 JS代码如下所示:

$(document).bind('firstinvalid', function(e){
    $.webshims.validityAlert.showFor( e.target ); 
    //prevent browser from showing native validation message 
    return false; 
});

$.webshims.validityAlert.showFor生成的HTML结构如下所示:

<span class="validity-alert" role="alert"> 
    <span class="va-arrow"><span class="va-arrow-box"></span></span> 
    <span class="va-box">Error message of the current field</span> 
</span>

答案 1 :(得分:6)

您可以使用以下伪选择器在webkit中设置验证气泡的样式:

::-webkit-validation-bubble
::-webkit-validation-bubble-top-outer-arrow
::-webkit-validation-bubble-top-inner-arrow
::-webkit-validation-bubble-message

对于Mozilla浏览器,还没有办法。如果您要更改文字,则Mozilla会支持x-moz-errormessagehttps://developer.mozilla.org/en/HTML/element/input#section_5

答案 2 :(得分:2)

我找到了一种禁用显示提示的方法。

基本上我发现它们在div元素中,如果我将它添加到顶部,我会重置。

div { display: none; }
body div { display: block; }

然后提示不再显示,但其余的div工作正常。

我也被认为提示出现在HTML文档标记之外。因为使用html div的样式也不会对提示产生影响。有趣的东西。

这仅适用于Chrome。

答案 3 :(得分:0)

如果您指的是Opera和Chrome使用的提示,那么我担心您不能。