转载:关于css3中linear-gradient中的百分比

声明:此文章为转载,原文作者:Bressanone_w 点击查看原文

           如有侵权24小时内删除。联系QQ:1522025433

正文

在第二章《背景与边框》中第五节《条纹背景》中,谈到了css3的新属性值linear-gradient,但是这里并不是详细说明这个新属性的用法,这里主要是用它来完成背景条纹,来看看原文中的说明与演示。

假设我们有一条基本的垂直线性渐变,颜色从#fb3过渡到#58a(参见图2-20):

background: linear-gradient(#fb3, #58a);​

                                                               图2-20 我们的起点

抛除兼容性前缀,linear-gradient最简单的声明就是如上代码,接受两个颜色值参数,默认就是垂直渐变的。再来看如下原文:

现在,让我们试着把这两个色标拉近一点(参见图2-21):

background: linear-gradient(#fb3 20%, #58a 80%);

图2-21 渐变现在出现在总高的60% 区域,剩下的部分显示为实色;色标的位置用虚线标示出来了

现在可以看到,在颜色值后面跟多一个对应的百分比值,虚线框中的渐变过渡被压缩了。第一个颜色的实色占了总高度的20%,第二个颜色的实色也占了总高度的20%,而渐变的过度则占了总高度的60%。当看到这里的时候我很好奇也很疑惑,为什么代码中并没有设置一个60%的值而为什么结果会有一个相同的值,书中也没有多说。说到底就是对这个属性的不熟悉,我翻阅mdn上面的文档,找到了这么一句:

linear-gradient( 0deg, blue, green 40%, red ); /* A gradient going from the bottom to top, starting blue, being green after 40% and finishing red */

从注释中可以清楚地知道,百分比是指某个颜色值距离起点的开始位置。默认的渐变方式为从上往下,所以当某个颜色值设置了百分比后,便会从距离顶端相关的距离(百分比计算)开始填充实色。而渐变色会在顶部与尾部的中间填充。我们可以自己来验证相关的例子:

第一个我没有设置任何的百分比

background:linear-gradient(red,orange);

得到的效果是这样的:

                                                                      未设置百分比

由于这个看不出默认的百分比是多少,所以接下来设置了

background:linear-gradient(red0%,orange100%  );

结果发现

                                                                   设置了百分比

效果跟上图并没有区别,所以如果我们不设置百分比的话,默认是根据颜色的个数来给每个颜色值设置的,最后一个颜色的百分比值就是100%,而起始的值就是0%,中间如果再有多个颜色值,则根据100/(个数-1)平均下去。相同的我们可以设置多个值例如

background:linear-gradient(red,orange,yellow,green,blue,indigo,violet);

background:linear-gradient(red0%,orange16.67%,yellow33.33%,green50.00%,blue66.67%,indigo83.33%,violet100%  );

上面这两个代码效果都是一致的

                                                                           效果一致

说了这么多,只知道了默认值,还不知道到底百分比是怎么工作的呢。那现在就再来写例子

首先来定义一个颜色值全部都为0的

background:linear-gradient(red0%,orange0%  );

得到如下效果

                                                                        百分比全为0

还不能看出是什么原因导致的,接下来再设置一个0%  20%的

background:linear-gradient(red0%,orange20%  );

                                                                         0% 20%

再设置一个0%  50%的

background:linear-gradient(red0%,orange50%  );

0% 50%

由此不难看出,红色部分是从顶端就开始着色的,而橙色部分是从设置的距离顶部的百分比位置开始着色,但把橙色设置为0%的时候,便会直接从顶部开始着色,就有了橙色完全遮盖住红色的效果,当橙色百分比值增加的时候,相应的就会产生一个距离,而这个距离的空间在一开始已经被红色着色了,所以才会有了后面的效果。

ps:如果设置第一个颜色的值呢?

我们来设置一下第一个颜色的百分比

background:linear-gradient(red30%,orange50%  );

可以看到红色部分明显加深下沉,这是因为红色被设置了距离顶部30%的距离才开始着色。那为什么前30%也还是红色呢,我自己觉得这是因为在最底层已经铺满了红色(也就是第一个颜色值)的着色了

知道了百分比值的作用,再来看看什么情况下才会产生渐变的过度效果:我们已经知道,当默认不设置百分比的时候,是这样的

                                                                    未设置百分比

将红色设置0%橙色50%后是这样的

                                                                 红色0% 橙色50%

我们再进行修改,将红色改为30%橙色70%看看效果

background:linear-gradient(red30%,orange70%  );

                                                                  红色30% 橙色70%

所以上面的图中可以仔细看出,过度也是有个空间占比的,默认(红色0%,橙色100%)的渐变过渡占比为

                                                                      默认占比

红色0%橙色50%的渐变过渡占比为

                                                             红色0% 橙色50%占比

红色30%橙色70%的渐变过渡占比为

                                                            红色30% 橙色70%占比

所得得出结论,渐变过渡区的占比为总的空间(高度或宽度)减去上下两个着色块空间占比剩下的空间。

我们可以通过设置两个占比各为50%的颜色,看看渐变过渡区是否还存在

background:linear-gradient(red50%,orange50%  );

此时因为空间都被着色给占满了,所以渐变的过度区也几乎没有空间,所以看不到任何的过度效果

PS:如果后一个颜色的百分比设置为比前一个颜色的百分比小呢,又代表什么意思?

下面摘抄自原文

如果某个色标的位置值比整个列表中在它之前的色标的位置值都要小,则该色标的位置值会被设置为它前面所有色标位置值的最大值

所以我们可以知道,如果前面有比当前的颜色值百分比大的,会自动将当前颜色值的百分比设置为前面颜色中的最大百分比值,下面的效果我们就可以知道了

background:linear-gradient(red50%,orange40%    );

其实就相当于

background:linear-gradient(red50%,orange50%    );

根据上面全部所说的,自己简简单单就能通过一个属性做出一个多重颜色线条的背景

background:linear-gradient(red0%,red14.3%,orange0,orange28.6%,yellow0,yellow42.9%,green0,green57.2%,blue0,blue71.5%,indigo0,indigo85.8%,violet0,violet100%    );

                                                                   多重颜色线条

ps:解释一下,总共用了7种颜色。第一个颜色为red,此时整个背景已经由red覆盖,在这里为什么颜色都要设置两次,这是因为每个颜色需要一个起始着色点,然后还需要将两个颜色之间的渐变过渡区域覆盖为实色,消除过度效果。可以想象当没有了实色的覆盖,最终效果会是这样的

background:linear-gradient(red0%,orange16.67%,yellow33.33%,green50%,blue66.67%,indigo83.33%,violet100%    );

                                                                           最终效果

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,080评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,422评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,630评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,554评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,662评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,856评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,014评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,752评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,212评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,541评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,687评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,347评论 4 331
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,973评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,777评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,006评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,406评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,576评论 2 349

推荐阅读更多精彩内容