CSS3+DIV网页样式与布局从入门到精通(微课精编版)
上QQ阅读APP看书,第一时间看更新

4.3 定义渐变背景样式

视频讲解

基于CSS3的渐变背景与渐变图片相比,最大的优点是便于修改,同时支持无级缩放,过渡更加自然。CSS3支持线性渐变和径向渐变,下面分别进行介绍。

4.3.1 线性渐变

创建线性渐变,至少需要两种颜色,可选择设置一个起点或一个方向。简明语法格式如下。

     linear-gradient( angle, color-stop1, color-stop2, …)

参数简单说明如下。

☑ angle:用来指定渐变的方向,可以使用角度或者关键字来设置。关键字包括4个,说明如下。

● to left:设置渐变从右到左,相当于270deg。

● to right:设置渐变从左到右,相当于90deg

● to top:设置渐变从下到上,相当于0deg

● to bottom:设置渐变从上到下,相当于180deg。该值为默认值。

提示:如果创建对角线渐变,可以使用类似于to top left(从右下到左上)的关键字来实现。

☑ color-stop:用于指定渐变的色点,包括一个颜色值和一个起点位置,颜色值和起点位置以空格分隔。起点位置可以为一个具体的长度值(不可为负值),也可以是一个百分比值,如果是百分比值则参考应用渐变对象的尺寸,最终会被转换为具体的长度值。

【示例1】本示例为<div id="demo">对象应用了一个简单的线性渐变背景,方向从上到下,颜色由白色到浅灰,效果如图4.19所示。

     <style type="text/css">
     #demo {
         width:300px;
         height:200px;
         background: linear-gradient(#fff, #333);
     }
     </style>
     <div id="demo"></div>

图4.19 应用简单的线性渐变效果

提示:针对示例1,用户可以继续尝试做下面的练习,实现通过不同的设置得到相同的设计效果。

☑ 设置一个方向:从上到下,覆盖默认值。

     linear-gradient(to bottom, #fff, #333);

☑ 设置反向渐变:从下到上,同时调整起止颜色位置。

     linear-gradient(to top, #333, #fff);

☑ 使用角度值设置方向。

     linear-gradient(180deg, #fff, #333);

☑ 明确起止颜色的具体位置,覆盖默认值。

     linear-gradient(to bottom, #fff 0%, #333 100%);

【示例2】本示例演示了从左边开始的线性渐变。起点是红色,慢慢过渡到蓝色,效果如图4.20所示。

注意,第一个参数值渐变方向的设置不同。

【示例3】通过指定水平和垂直的起始位置来设计对角渐变。本示例演示了从左上角到右下角的线性渐变,起点是红色,慢慢过渡到蓝色,效果如图4.21所示。

图4.20 设计从左到右的线性渐变效果

图4.21 设计对角线性渐变效果

【示例4】通过指定具体的角度值,可以设计更多渐变方向。本示例演示了从上到下的线性渐变,起点是红色,慢慢过渡到蓝色,效果如图4.22所示。

【补充】

渐变角度是指垂直线和渐变线之间的角度,逆时针方向计算。例如,0deg将创建一个从下到上的渐变,90deg将创建一个从左到右的渐变。注意,渐变起点以负y轴为参考。

但是,很多浏览器(如Chrome、Safari、Firefox等)使用旧的标准:渐变角度是指水平线和渐变线之间的角度,逆时针方向计算。例如,0deg将创建一个从左到右的渐变,90deg将创建一个从下到上的渐变。注意,渐变起点以负x轴为参考。

兼容公式如下。

     90 - x = y

其中,x为标准角度,y为非标准角度。

【示例5】设置多个色点。本示例定义从上到下的线性渐变,起点是红色,慢慢过渡到绿色,再慢慢过渡到蓝色,效果如图4.23所示。

图4.22 设计从上到下的渐变效果

图4.23 设计多色线性渐变效果

【示例6】设置色点位置。本示例定义从上到下的线性渐变,起点是黄色,快速过渡到蓝色,再慢慢过渡到绿色,效果如图4.24所示。

【示例7】CSS3渐变支持透明度设置,可用于创建减弱变淡的效果。本示例演示了从左边开始的线性渐变。起点是完全透明,起点位置为30%,慢慢过渡到完全不透明的红色,为了更清晰地看到半透明效果,增加了一层背景图像进行衬托,演示效果如图4.25所示。

     #demo {
         width:300px; height:200px;
         /* Safari 5.1 - 6 */
         background: -webkit-linear-gradient(left,rgba(255,0,0,0) 30%,rgba(255,0,0,1)),url(images/bg.jpg);
         /* Opera 11.1 - 12*/
         background: -o-linear-gradient(left,rgba(255,0,0,0) 30%,rgba(255,0,0,1)),url(images/bg.jpg);
         /* Firefox 3.6 - 15*/
         background: -moz-linear-gradient(left,rgba(255,0,0,0) 30%,rgba(255,0,0,1)),url(images/bg.jpg);
         /* 标准语法 */
         background: linear-gradient(to right, rgba(255,0,0,0) 30%, rgba(255,0,0,1)),url(images/bg.jpg);
         background-size:cover;      /* 背景图像完全覆盖 */
     }

图4.24 设计多色线性渐变效果

图4.25 设计半透明线性渐变效果

提示:为了添加透明度,可以使用rgba()或hsla()函数来定义色点。rgba()或hsla()函数中最后一个参数可以是从0到1的值,它定义了颜色的透明度:0表示完全透明,1表示完全不透明。

4.3.2 径向渐变

视频讲解

创建一个径向渐变,也至少需要定义两种颜色,同时可以指定渐变的中心点位置、形状类型(圆形或椭圆形)和半径大小。简明语法格式如下。

     radial-gradient(shape size at position, color-stop1, color-stop2, …);

参数简单说明如下。

☑ shape:用来指定渐变的类型,包括circle(圆形)和ellipse(椭圆)两种。

☑ size:如果类型为circle,指定一个值设置圆的半径;如果类型为ellipse,指定两个值分别设置椭圆的x轴和y轴半径。取值包括长度值、百分比、关键字。关键字说明如下。

● closest-side:指定径向渐变的半径长度为从中心点到最近的边。

● closest-corner:指定径向渐变的半径长度为从中心点到最近的角。

● farthest-side:指定径向渐变的半径长度为从中心点到最远的边。

● farthest-corner:指定径向渐变的半径长度为从中心点到最远的角。

☑ position:用来指定中心点的位置。如果提供两个参数,第1个表示x轴坐标,第2个表示y轴坐标;如果只提供1个值,第2个值默认为50%,即center。取值可以是长度值、百分比或者关键字,关键字包括left(左侧)、center(水平居中)、right(右侧)、top(顶部)、center(垂直居中)、bottom(底部)。

注意,position值位于shape和size值后面。

☑ color-stop:用于指定渐变的色点。包括一个颜色值和一个起点位置,颜色值和起点位置以空格分隔。起点位置可以为一个具体的长度值(不可为负值),也可以是一个百分比值,如果是百分比值则参考应用渐变对象的尺寸,最终会被转换为具体的长度值。

【示例1】在默认情况下,渐变的中心是center(对象中心点),渐变的形状是ellipse(椭圆形),渐变的大小是farthest-corner(表示到最远的角落)。本示例仅为radial-gradient()函数设置3个颜色值,则它将按默认值绘制径向渐变效果,如图4.26所示。

图4.26 设计简单的径向渐变效果

提示:针对示例1,用户可以继续尝试做下面的练习,实现通过不同的设置,得到相同的设计效果。

☑ 设置径向渐变形状类型,默认值为ellipse。

     background: radial-gradient(ellipse, red, green, blue);

☑ 设置径向渐变中心点坐标,默认为对象中心点。

     background: radial-gradient(ellipse at center 50%, red, green, blue);

☑ 设置径向渐变大小,这里定义填充整个对象。

     background: radial-gradient(farthest-corner, red, green, blue);

【示例2】本示例演示了色点不均匀分布的径向渐变,效果如图4.27所示。

【示例3】shape参数定义了形状,取值包括circle和ellipse,其中circle表示圆形,ellipse表示椭圆形,默认值是ellipse。本示例设计圆形径向渐变,效果如图4.28所示。

     #demo {
        height:200px;
        background: -webkit-radial-gradient(circle, red, yellow, green);  /* Safari 5.1 - 6.0 */
        background: -o-radial-gradient(circle, red, yellow, green);       /* Opera 11.6 - 12.0 */
        background: -moz-radial-gradient(circle, red, yellow, green);     /* Firefox 3.6 - 15 */
        background: radial-gradient(circle, red, yellow, green);          /* 标准语法 */
     }

图4.27 设计色点不均匀分布的径向渐变效果

图4.28 设计圆形径向渐变效果

【示例4】本示例设计径向渐变的半径为从圆心到离圆心最近的边,如图4.29所示。

     #demo {
         height:200px;
         /* Safari 5.1 - 6.0 */
         background: -webkit-radial-gradient(60% 55%, closest-side,blue,green,yellow,black);
         /* Opera 11.6 - 12.0 */
         background: -o-radial-gradient(60% 55%, closest-side,blue,green,yellow,black);
         /* Firefox 3.6 - 15 */
         background: -moz-radial-gradient(60% 55%, closest-side,blue,green,yellow,black);
         /* 标准语法 */
         background: radial-gradient(closest-side at 60% 55%, blue,green,yellow,black);
     }

注意,radial-gradient()标准函数与各私有函数在设置参数时顺序不同是有区别的。

【示例5】本示例模拟的是太阳初升的效果,如图4.30所示。设计径向渐变中心点位于左下角,半径为最大化显示,定义3个色点,第1个色点设计太阳效果,第2个色点设计太阳余晖,第3个色点设计太空,第1个色点和第2个色点距离为60像素。

     #demo {
         height:200px;
         /* Safari 5.1 - 6.0 */
         background: -webkit-radial-gradient(left bottom, farthest-side, #f00, #f99 60px, #005);
         /* Opera 11.6 - 12.0 */
         background: -o-radial-gradient(left bottom, farthest-side, #f00, #f99 60px, #005);
         /* Firefox 3.6 - 15 */
         background: -moz-radial-gradient(left bottom, farthest-side, #f00, #f99 60px, #005);
        /* 标准语法 */
        background: radial-gradient(farthest-side at left bottom, #f00, #f99 60px, #005);
     }

图4.29 设计最小限度的径向渐变效果

图4.30 模拟太阳初升效果

【示例6】本示例模拟太阳旗效果,如图4.31所示。设计径向渐变中心点位于对象中央,定义两个色点,第1个色点设计太阳效果,第2个色点设计背景,两个色点位置相同。

     <style type="text/css">
     body { background:hsla(207,59%,78%,1.00) }
     #demo {
         height:200px;
         width:300px;
         margin:auto;
         /* Safari 5.1 - 6.0 */
         background: -webkit-radial-gradient(center, circle, #f00 50px, #fff 50px);
         /* Opera 11.6 - 12.0 */
         background: -o-radial-gradient(center, circle, #f00 50px, #fff 50px);
         /* Firefox 3.6 - 15 */
         background: -moz-radial-gradient(center, circle, #f00 50px, #fff 50px);
         /* 标准语法 */
         background: radial-gradient(circle  at center, #f00 50px, #fff 50px);
     }
     </style>
     <div id="demo"></div>

图4.31 模拟太阳旗效果