HTML5输入颜色的默认颜色

Ali*_*sam 42 html5 input colors

input type="color"有一个黑色的默认颜色:#000000.

即使我给它一个空值......

<input type="color" value="" />

...默认颜色始终为黑色.

我希望用户可以选择颜色,但如果他没有,则意味着没有选择颜色,甚至不是白色#FFFFFF.

有没有办法强制input type="color"不要默认黑色?

我可以使用某种"监听器"来检查用户是否第一次更改了颜色,如果没有,则忽略该值,但我想避免使用Javascript.

小智 18

使用hexcode作为value属性时<input type="color">,我注意到的一件事是它必须是六位数,如果你使用白色#fff,它就不起作用.它必须是#ffffff.

通过javascript设置它时会发生同样的事情. document.querySelector('input[type="color"]').value = '#fff'不起作用.颜色保持黑色.你必须使用document.querySelector('input[type="color"]').value = '#ffffff'它来工作.

需要注意的事情.

  • 是的,因为[W3C Spec](http://www.w3.org/TR/html-markup/input.color.html)定义`value`属性必须包含正好7个字符,以`#`开头然后是6个十六进制字符.也不允许使用像`red`,`blue`这样的颜色关键字. (4认同)

ogu*_*gur 6

使用价值:

<input type="color" value="#ff00ff" />
Run Code Online (Sandbox Code Playgroud)

如果你想知道输入是否保持不变,你可以做这样的事情(使用jQuery):

$(function(){
    $('input').change(function(){
       $(this).addClass('changed');
    })
})
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/j3hZB/

  • 那么输入不会得到“改变”的类,你必须使用这个事实作为非选择状态。 (2认同)

Dig*_*art 6

这是我的解决方案,将输入类型从文本切换为颜色:

$(document).on('click', '.dc-color-input-switcher', function() {
  var dcInputColor = $(this).parent().parent().prev();
  if (dcInputColor.attr('type') == 'text') {
    dcInputColor.attr('type', 'color');
  } else {
    dcInputColor.attr('type', 'text');
  }
});

$(document).on('click', '.dc-color-input-clearer', function() {
  var dcInputColor2 = $(this).parent().parent().next();
  if (dcInputColor2.attr('type') == 'color') {
    dcInputColor2.attr('type', 'text');
  }
  dcInputColor2.val('');
});
Run Code Online (Sandbox Code Playgroud)
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<link href="http://netdna.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

<div class="input-group">
  <div class="input-group-btn">
    <div class="btn-group">
      <span title="Empty" class="btn btn-danger dc-color-input-clearer" data-original-title="Empty Field"><i class="fa fa-times"></i></span>
    </div>
  </div>
  <input name="product_tabs[1][0][bg_color]" value="" placeholder="Background Color" class="form-control pre-input-color" type="text">
  <div class="input-group-btn">
    <div class="btn-group">
      <span title="Toggle color picker" class="btn btn-primary dc-color-input-switcher" data-original-title="Switch color picker"><i class="fa fa-paint-brush"></i></span>
    </div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)


Pan*_*har 5

编辑:现在,我已经正确理解了你的问题,我已经更新了我的答案。

尽管W3C 规范定义value属性具有表示颜色的字符串,但它没有定义默认颜色。所以我认为默认颜色的实现是由浏览器决定的。

但是,WhatWG Spec通过此注释回答了您的问题,

注意:当输入类型元素处于颜色状态时,总会有一个颜色被拾取,并且没有办法将值设置为空字符串。

此外,根据您的预期,CSS 语言从未NULL为任何元素定义属性,这使得 不可能将input type='color'NULL作为默认值。

解决方法:

解决方法存在于 Shadow DOM API 中。

在此处输入图片说明

使用 Chrome 开发者工具,我发现我们可以为transparent伪元素::-webkit-color-swatch背景属性赋予颜色-

input[type=color]::-webkit-color-swatch 
{ 
    background-color: transparent !important; 
}
Run Code Online (Sandbox Code Playgroud)

对于上面的 CSS,你的 HTML 应该是这样的 - <input type="color">。现在您不需要任何类型的侦听器来判断用户是否更改了默认颜色。您可以简单地将transparent颜色视为 NULL 颜色,您可以根据它来决定值是否已更改!

我相信你会从 Shadow DOM for Firefox 中找到类似的信息来设置背景的透明值。IE 对我们来说仍然是一个痛苦。

  • 即使选择了颜色,它也始终是透明的 (2认同)
  • 这只是外观的解决方案,而不是 POSTed 值的解决方案。如果在表单中提交此输入类型,则无法知道用户是否选择了颜色。顺便说一句,范围输入类型也是如此,其中 value 属性也被选为默认值的“holder”。IMO 这没有经过适当的考虑。但我可能是错的。相反,我希望如此。因为现在这些类型的输入对我来说几乎没用 (2认同)
  • @JPA:我也遇到过很多情况,最终用户无法选择“未定义”是一个大问题。我还没有找到好的解决方法。我对现有 HTML5 控件最接近的做法是在所有此类控件前面添加一个单选按钮,其中包含选项“使用默认值/未设置”和“自定义值:”。 (2认同)