给定两个 css 的颜色值, 求两个颜色之间的 10 个等分色

2015-07-25 10:45:28 +08:00
 xxxpara

1.给定两个css的颜色值,比如#ccc和#f0bc89,求两个颜色之间的10个等分色。(通道颜色,有正则切分,有进制转换)

这道题怎么做?

4149 次点击
所在节点    前端开发
13 条回复
loveuqian
2015-07-25 10:50:17 +08:00
这是前端题?用前端来做?不是应该考设计的嘛。。。
xxxpara
2015-07-25 10:56:26 +08:00
@loveuqian 确实是前端的。。据说是BAT社招里面的笔试题
YuJianrong
2015-07-25 10:56:35 +08:00
通道颜色正则切分啥的是什么鬼?
YuJianrong
2015-07-25 10:57:44 +08:00
@xxxpara 哦,那有啥难的,css颜色的几种表示解析出来做个线性插值不就好了……
gonghao
2015-07-25 11:00:41 +08:00
#ccc rgb(r1, g1, b1)
#f0bc89 rgb(r2, g2, b2)

然后 `rn = (r2 - r1) / 10 * n` 类似

这可以算作一种平均等分的算法,只是题设中那俩方法没听懂……
P233
2015-07-25 11:01:27 +08:00
用 Sass 的 mix 函数吧

mix(#ccc, #f0bc89, 90%)
mix(#ccc, #f0bc89, 80%)
mix(#ccc, #f0bc89, 70%)
...
mix(#ccc, #f0bc89, 10%)
Biwood
2015-07-25 11:09:12 +08:00
先把十六进制表示法转换成十进制表示法,#ccc 转换 rgb(204, 204, 204),#f0bc89 转换成 rgb(240,188,137),然后求每个通道的差十等分的值,如果我对等分色的理解没错的话
Biwood
2015-07-25 12:33:27 +08:00
按照上面的思路写了一个例子,不知道是不是正确答案 http://jsbin.com/paqilexuqi/edit?js,output
guesskiss
2015-07-25 13:47:07 +08:00
转换成rgb和hsv只是一种思路,我突然想到,既然是前端问题,那就设置两个div不同背景色,设置他们的opacity为10等分覆盖在一起不就行了么
otakustay
2015-07-25 14:25:14 +08:00
直觉告诉我等分色要用hsl色来做,rgb搞不定……

像 @guesskiss 说的可以用opacity做,其实背景是白色的时候,opacity原理还是往ssl上靠的
learnshare
2015-07-25 15:06:29 +08:00
HSL 来做
YuJianrong
2015-07-26 00:36:08 +08:00
@otakustay 这个直觉是错的,颜色过渡应该用rgb而不是hsl。hsl过度的话hue飘过去感觉很怪的。
khowarizmi
2015-07-26 03:32:13 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/208215

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX