渐变在网站中常常用到:如果你想使得(按钮,标题等)有生气,就可以使用渐变。虽然你应该尽量少的使用渐变,以免网页看起来像是圣诞树一样。以往我们常常使用背景图片来给我们的界面添加渐变效果,而且这种方式还是可以的,但是这种方式显得不那么灵活。因为,每次你想要改变渐变的颜色,大小以及渐变的方向时,你都不得不在图片编辑软件中对图片做修改。
CSS Image Values and Replaced Content Module Level 3允许我们以编程的方式在元素上创建渐变。你可以通过代码来改变渐变的颜色,方向
等,并且是如此的灵活。例如,你可以在元素上以不同的百分比设置color stops
;当元素的尺寸发生改变时,渐变也会做出调整来适应。
在说明书中定义了2种渐变, linear gradients and radial gradients。在前一篇文章中,我们阐述了线性渐变 - CSS3 linear gradients。这篇文章将关注于径向渐变。我们将会阐述所有的基础语法,并会在接近文章尾部的地方,看一下repeating-radial-gradient
。
做个回顾,线性渐变的语法其实是相当简单的:
background-image:linear-gradient(
to bottom right,
rgb(255, 0, 0),
rgb(100, 0, 0) 50%,
rgb(50, 0, 0) 75%,
rgb(150, 0, 0)
);
在括号中,第一行设置了渐变的方向,紧接着设置了一系列的color stops
,渐变在这些color stops
之间自然地流动。上面的示例所创建的渐变 如下图所示:
Screen Shot 2017-07-09 at 6.57.26 PM.png
注意:Oper, Firefox, IE的最新版本全都支持线性渐变的当前语法,即不用使用前缀,然而基于WebKit
的浏览器仍然使用旧的语法。为了兼容旧版本的浏览器和基于WebKit
的浏览器,你应该包含带开发商前缀。
需要注意的是:
to
关键字的方向 与 不带to
关键字的方向 之间的区别。具体请参考我所翻译的上篇文章。完整的代码示例如下:
background-image:-webkit-linear-gradient(top left, rgb(255,0,0), rgb(100,0,0) 50%, rgb(50,0,0) 75%, rgb(150,0,0));
background-image:-moz-linear-gradient(top left, rgb(255,0,0), rgb(100,0,0) 50%, rgb(50,0,0) 75%, rgb(150,0,0));
background-image:-ms-linear-gradient(top left, rgb(255,0,0), rgb(100,0,0) 50%, rgb(50,0,0) 75%, rgb(150,0,0));
background-image:-o-linear-gradient(top left, rgb(255,0,0), rgb(100,0,0) 50%, rgb(50,0,0) 75%, rgb(150,0,0));
background-image:linear-gradient(to bottom right, rgb(255,0,0), rgb(100,0,0) 50%, rgb(50,0,0) 75%, rgb(150,0,0));
径向渐变稍微有点复杂,但是也不需要话费太多时间来适应。其语法形式如下:
radial-gradient(
`size shape` at `position`, // `是分隔符,没有实际的语意
`colour stops`
);
就像线性渐变一样,Opera,Firefox和IE全都支持最新的‘不带前缀的径向渐变语法’。基于WebKit-
的浏览器仍使用旧式的语法(需要带前缀)。旧式的径向渐变语法也是使用相同的values
,但是形式不同:
radial-gradient(
`position`,
`size and shape`,
`colour stops`
);
所以兼容所有浏览器的示例 看起来是 这样子的:
-webkit-radial-gradient(50% 50%, circle, rgb(75, 75, 200), rgb(0, 0, 75));
-moz-radial-gradient(50% 50%, circle, rgb(75, 75, 200), rgb(0, 0, 75));
-ms-radial-gradient(50% 50%, circle, rgb(75, 75, 200), rgb(0, 0, 75));
-o-radial-gradient(50% 50%, circle, rgb(75, 75, 200), rgb(0, 0, 75));
radial-gradient(circle at 50% 50%, rgb(75, 75, 200), rgb(0, 0, 75));
上面示例会创建一个柔和的蓝色渐变(从元素的中心向外渐变),结果如下图:
https://dev.opera.com/articles/css3-radial-gradients/gradients3.png
现在让我们来深入了解下:postion
, size and shape
, colour stops
。
径向渐变发散的起始位置position
指定了:径向渐变的中心点的位置(渐变从哪个位置向外发散)。position
位于at
后,position
可以是关键字和unit values
,指定position
的方式 和 指定CSS中background-position
的方式基本一致。
circle at left top
意味着:把渐变的中心点放置在左上角。https://dev.opera.com/articles/css3-radial-gradients/position1.png
circle at 20% 70%
意味着:把渐变的中心点放置在 距离元素左侧20% 距离元素顶部70% 的位置。https://dev.opera.com/articles/css3-radial-gradients/position2.png
circle at 70px 80px
意味着:把渐变的中心点放置在 距离元素左侧70px 距离元素顶部80px 的位置。https://dev.opera.com/articles/css3-radial-gradients/position3.png
circle at 0%
意味着:把渐变的中心点放置在 元素的左侧边 垂直居中。如果你只指定了一个值,该值会被认为是水平方向上的值,垂直方向上的值默认为50%(也就是垂直居中)。https://dev.opera.com/articles/css3-radial-gradients/position4.png
gradient position
设置任何值,gradient position
会默认为元素的背景区域的中心,即是center center
或者50% 50%
。https://dev.opera.com/articles/css3-radial-gradients/gradients3.png
渐变的size and shape
是通过使用 显式的size
和shape
关键字组合的方式,或者隐式的size
和shape
关键字组合的方式 来设置的。
当使用显式的size
时,你所设置的2个values 是gradient shape
的水平半径和垂直半径。如果你指定了circle
关键字 和 一个值,你会得到一个圆。如果你指定了ellipse
关键字和2个值,或者仅仅指定了2个值,你会得到一个椭圆。你可以使用任意的CSS units
,只要在它所处的情况中合理即可,但是你不能使用百分比。
40px circle
意味着:使 渐变的形状是圆的,而且半径是40px。https://dev.opera.com/articles/css3-radial-gradients/size1.png
2em 4em ellipse
意味着: 使 渐变的形状是椭圆,水平方向的半径是2em,垂直方向的半径是4em。https://dev.opera.com/articles/css3-radial-gradients/size2.png
ellipse cover
为默认值。(下面的部分会介绍cover关键字)当使用隐式的size
时,你可以使用若干个不同的关键字。这些关键字指定了:你想让渐变的形状circle
, ellipse
的最外沿接触到容器的最近角
,最远角
,还是最近边
,最远边
(最近,最远都是相对于position
的位置而定的)。在这个示例中,我们使button为正方形,并且设置渐变中心的位置为:水平35%,垂直25%。
closest-side circle at 35% 25%
会使渐变的最外沿接触到 距离渐变中心最近的 元素的那条边。把circle
更换为ellipse
,会使渐变的最外沿接触到 距离渐变中心最近的 元素的那2条边。你可以使用关键字contain
来代替closest-side
。https://dev.opera.com/articles/css3-radial-gradients/circle-closest-side.png
https://dev.opera.com/articles/css3-radial-gradients/ellipse-closest-side.png
closest-corner circle at 35% 25%
会使渐变的最外沿接触到 距离渐变中心最近的 元素的那个角。把circle
更换为ellipse
,也是同样的效果。https://dev.opera.com/articles/css3-radial-gradients/circle-closest-corner.png
https://dev.opera.com/articles/css3-radial-gradients/ellipse-closest-corner.png
farthest-side circle at 35% 25%
会使渐变的最外沿接触到 距离渐变中心最远的 元素的那条边。把circle
更换为ellipse
,会使渐变的最外沿接触到 距离渐变中心最远的 元素的那2条边。https://dev.opera.com/articles/css3-radial-gradients/circle-farthest-side.png
https://dev.opera.com/articles/css3-radial-gradients/ellipse-farthest-side.png
farthest-corner circle at 35% 25%
会使 渐变的最外沿接触到 距离渐变中心最远的 元素的那个角。不管是circle
还是ellipse
,你都可以使用关键字cover
来代替farthest-corner
。https://dev.opera.com/articles/css3-radial-gradients/circle-farthest-corner.png
https://dev.opera.com/articles/css3-radial-gradients/ellipse-farthest-corner.png
在径向渐变语法的最后部分,你可以指定至少2个color stops
- 这些color stops
指定了沿着渐变方向的不同位置上 是 什么颜色,并且浏览器会填充color stops
之间的颜色。你可以在沿着渐变方向的不同位置上 使用任意的单位,只要合理即可。你也可以使用不同的方式指定颜色(16进制颜色值,关键字,rgb,rgba等等)。每个color stop
之间是 使用逗号分隔的。
#ff0000, #000000
: color stop
最简单的设置是 只使用2个颜色。当color stop
后 没指定position
时,浏览器会 默认第一个color stop
在0%
位置,第二个color stop
在100%
位置(100%即是在最外沿)。https://dev.opera.com/articles/css3-radial-gradients/colour-stop1.png
rgb(255,0,0), rgb(150,150,150) 50%, rgb(0,0,0)
: 这儿我们有3个color stop
,并且是使用RGB来设置颜色的。第一个颜色 在渐变方向上的位置为0%
,最后一个颜色 在渐变方向上的位置为100%
,但是我们还有一个不同的color stop
在 50%
位置。https://dev.opera.com/articles/css3-radial-gradients/colour-stop2.png
rgb(255,0,0) 20px, rgb(150,150,150) 40px, rgb(0,200,0) 60px, rgb(0,0,0) 80px
: 4个color stop
,这次使用pixel values
在渐变方向上 放置 颜色值。你会发现:如果你不指定在渐变起始位置和结束位置上的颜色值,起始位置的颜色值 会采用第一个color stop
的颜色值,同样地 结束位置的颜色值 会采用最后一个color stop
的颜色值。https://dev.opera.com/articles/css3-radial-gradients/colour-stop3.png
让我们来看个实际使用中的示例:
background-image:-webkit-radial-gradient(30% 40%, rgb(255,0,0), rgb(0,0,0));
background-image:-moz-radial-gradient(30% 40%, rgb(255,0,0), rgb(0,0,0));
background-image:-ms-radial-gradient(30% 40%, rgb(255,0,0), rgb(0,0,0));
background-image:-o-radial-gradient(30% 40%, rgb(255,0,0), rgb(0,0,0));
background-image:radial-gradient(circle at 30% 40%, rgb(255,0,0), rgb(0,0,0));
上面示例的效果(活生生的示例) 如下图:
https://dev.opera.com/articles/css3-radial-gradients/radial-gradient.png
当鼠标hover
在按钮上时,按钮稍微下陷。当按钮被点击时,它们会深深的陷入。我通过在鼠标的hover,active
状态下 使用各种inset box shadow
来达到效果。
和线性渐变的方式一样,你可以通过使用相关的repeat property
来创建repeating-radial-gradient
。
repeating-radial-gradient
仅仅是采用 你为径向渐变设置的方式,并重复这个方式 到元素的边界。
background:-webkit-repeating-radial-gradient(center, 30px 30px, #009, #0000FA 50%, #009);
background:-moz-repeating-radial-gradient(center, 30px 30px, #009, #0000FA 50%, #009);
background:-ms-repeating-radial-gradient(center, 30px 30px, #009, #0000FA 50%, #009);
background:-o-repeating-radial-gradient(center, 30px 30px, #009, #0000FA 50%, #009);
background:repeating-radial-gradient(30px circle, #009, #0000FA 50%, #009);
效果如下图:
https://dev.opera.com/articles/css3-radial-gradients/repeating-examples.png
我希望 这篇文章给了你:在你的设计中开始使用径向渐变 所需要知道的所有知识点!请让我们知道:你认为Opera's implementation怎么样 - 回馈总是有帮助的,不论好坏?
你在这儿看到的 并不是径向渐变的使用极限。你可以 在任何你可以使用图片的地方 使用径向渐变,所以你应该尝试在border-image, list-style-image...
中 使用径向渐变。