【问题标题】:Styling the hint on a HTML5 input field using required attribute使用必需属性对 HTML5 输入字段的提示进行样式设置
【发布时间】:2011-08-05 08:01:51
【问题描述】:

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

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

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

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

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

干杯, 托马斯。

【问题讨论】:

  • 我刚刚在 FF4 中检查了它,提示实际上是静态定位的:它不跟随输入,无论你滚动到哪里都停留在屏幕上 - 不是很好!当我滚动时,它实际上吓坏了并且到处都是!
  • 在 FF3.6 中完全没有出现。似乎在 Chrome 中运行良好。
  • 除了语义之外,使用“required”属性的主要原因之一是让浏览器处理它。如果您想使用自己的代码进行验证,请不要使用它。如果可访问性是您主要关心的问题,请使用“aria-required=true”

标签: css forms html input required


【解决方案1】:

您可以使用以下伪选择器在 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】:

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

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

    这样做的关键原则是,您必须为无效事件添加处理程序(注意:无效事件不会冒泡)然后阻止默认交互。这将删除浏览器的原生错误气泡,您可以在所有 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>
    

    【讨论】:

      【解决方案3】:

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

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

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

      然后提示不再出现,但我的其他 div 工作正常。

      我还被引导相信提示出现在 HTML 文档标签之外。由于 html div 的样式也对提示没有影响。有趣的东西。

      这仅适用于 Chrome。

      【讨论】:

      • 这很有趣,好像他们还没有弄清楚这个。
      • 有趣...可能不是未来的证据。
      【解决方案4】:

      如果你指的是 Opera 和 Chrome 使用的提示,那么恐怕你不能。

      【讨论】:

      • 肯定有……因为上面网站上出现的和我网站上出现的完全不同。在我的网站上,它们出现在一个圆角透明框中。
      • 貌似you can style them in Chrome,很奇怪。
      • 我几乎不会称之为样式 :-)
      • 之所以可以在 Chrome 中设置样式,是因为 chrome 使用 JavaScript 将其放在页面上……它实际上是 标签之外的
        元素。我在测试我的 CSS 重置规则时发现了这一点。不过,你真的不能做太多,没有足够的类钩子。
      猜你喜欢
      • 2011-07-12
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 1970-01-01
      • 1970-01-01
      • 2014-08-15
      • 1970-01-01
      • 2013-09-17
      相关资源
      最近更新 更多