13

rails中的rgb错误数量的参数问题:

我看到 css 文件中的 rgb 需要 3 个参数,如此处所述

http://www.w3schools.com/cssref/css_colors.asp

但是在我的项目 abc.css.scss 文件中有这样的代码

border: 1px solid rgb(100, 100, 100, 2);
border: 1px solid rgba(0, 0, 0, 0.2);
-webkit-box-shadow: 0px 3px 2px rgba(67, 67, 67, 0.1);
-moz-box-shadow: 0px 3px 2px rgba(67, 67, 67, 0.1);

那么这里发生了什么。我错过了什么吗?

提前致谢!

4

5 回答 5

22

简短而甜蜜的答案是,当您使用时,rgb您不能传递 alpha 属性。使用rgba来使用alpha

于 2018-07-02T17:09:59.640 回答
12

第 4 个参数用于alpha

所以例如rgba(0, 0, 0, .1);

.1是阿尔法/不透明度

为什么他两次声明正确?

border: 1px solid rgb(100, 100, 100, 2); 
/* This is fall back if browser doesn't support `rgba` but 
   here the 4th parameter shouldn't be there, it's making the proerty useless.. */

border: 1px solid rgba(0, 0, 0, 0.2); 
/* Here he is having black color with an alpha of .2 */

因此,rgb使用 4 个参数会使属性值无效,因此您需要从rgb第一个属性中删除最后一个参数

于 2013-05-16T07:58:31.477 回答
9

答案是不言自明的。rgb需要 3 个参数,所以你需要给它 3,而不是 4。

这就是你想要的:

border: 1px solid rgb(100, 100, 100);
border: 1px solid rgba(0, 0, 0, 0.2);
-webkit-box-shadow: 0px 3px 2px rgba(67, 67, 67, 0.1);
-moz-box-shadow: 0px 3px 2px rgba(67, 67, 67, 0.1);

请注意,第一行已更改

如果保留第 4 个参数,则第一行代码将不起作用。它只会被忽略并且没有效果。

看这个例子:你会注意到正方形是黑色的,因为rgb第 4 个参数是无效的,因此不适用

于 2013-05-16T07:54:44.810 回答
1

根据此处的 MDN ,支持 CSS Colors Level 4 的浏览器的行为完全符合 OP 的预期。第 4 个参数是可选的,显然默认为 1,尽管我目前没有看到任何地方专门记录的默认值。那么哪些浏览器支持这个呢?

caniuse.com 有一个间接指示符,RGBA 十六进制表示法,这里。截至今天,它看起来非常积极,> 75%,但我有限的测试表明,对 CSS rgb 函数的第 4 个参数的支持比这要少。我在这里创建了一个 codepen ,它适用于 Windows 上最新的 Firefox 和 Chrome,以及适用于 Android 7 的 Chrome。它还验证了第 4 个参数的默认值为 1。这是 CSS:

body {
  background:linear-gradient(90deg, rgb(255, 0, 153.6, 0),  rgb(255, 0, 153.6) 100%);
}

如果您看到不透明度从 0 变为 1,从左到右,那么它正在工作。它不适用于 iOS 11 上的 Chrome 或 Safari。但是这个使用十六进制表示法的 codepen在我测试过的所有 5 种环境中都可以使用。这是CSS:

body {
  background:linear-gradient(90deg, #FF009900,  #FF0099 100%);
}

有没有人有关于 CSS 颜色级别 4 的这方面及其支持的更具体信息?我添加了两个代码笔来分开测试第4 个 arg带小数的数字。iOS 11 上的 2 个浏览器也不支持。

于 2018-09-10T23:07:39.463 回答
0

在 Sass 中,rgb()rgba()是创建类型为color的变量的函数。当编译成 CSS 时,它看起来与函数语法相同。颜色类型是必要的,以使其有资格与颜色操作函数(lighten()、darken() 等)一起使用。

https://github.com/nex3/sass/blob/ab4b3b918bfa1fc77a9c4378e199ca1ed6f1704c/lib/sass/script/functions.rb#L366

# Creates a {Color} object from red, green, and blue values.
#
# @param red [Number]
#   A number between 0 and 255 inclusive,
#   or between 0% and 100% inclusive
# @param green [Number]
#   A number between 0 and 255 inclusive,
#   or between 0% and 100% inclusive
# @param blue [Number]
#   A number between 0 and 255 inclusive,
#   or between 0% and 100% inclusive
# @see #rgba
# @return [Color]
def rgb(red, green, blue)
  assert_type red, :Number
  assert_type green, :Number
  assert_type blue, :Number

  Color.new([red, green, blue].map do |c|
      v = c.value
      if c.numerator_units == ["%"] && c.denominator_units.empty?
        v = Sass::Util.check_range("Color value", 0..100, c, '%')
        v * 255 / 100.0
      else
        Sass::Util.check_range("Color value", 0..255, c)
      end
    end)
end
declare :rgb, [:red, :green, :blue]

# @see #rgb
# @overload rgba(red, green, blue, alpha)
#   Creates a {Color} object from red, green, and blue values,
#   as well as an alpha channel indicating opacity.
#
#   @param red [Number]
#     A number between 0 and 255 inclusive
#   @param green [Number]
#     A number between 0 and 255 inclusive
#   @param blue [Number]
#     A number between 0 and 255 inclusive
#   @param alpha [Number]
#     A number between 0 and 1
#   @return [Color]
#
# @overload rgba(color, alpha)
#   Sets the opacity of a color.
#
#   @example
#     rgba(#102030, 0.5) => rgba(16, 32, 48, 0.5)
#     rgba(blue, 0.2)    => rgba(0, 0, 255, 0.2)
#
#   @param color [Color]
#   @param alpha [Number]
#     A number between 0 and 1
#   @return [Color]
def rgba(*args)
  case args.size
  when 2
    color, alpha = args

    assert_type color, :Color
    assert_type alpha, :Number

    Sass::Util.check_range('Alpha channel', 0..1, alpha)
    color.with(:alpha => alpha.value)
  when 4
    red, green, blue, alpha = args
    rgba(rgb(red, green, blue), alpha)
  else
    raise ArgumentError.new("wrong number of arguments (#{args.size} for 4)")
  end
end
declare :rgba, [:red, :green, :blue, :alpha]
declare :rgba, [:color, :alpha]

rgb()函数必须恰好有 3 个参数。rgba()函数必须恰好有 2 或 4 个参数,最后一个参数是 0 到 1 之间的值。

于 2013-05-16T12:29:42.093 回答