background 属性是CSS中用于设置元素背景的属性,最简单的background属 性名,是针对背景若干设定的合并简写,最早的CSS只能使用单一背景图片,而在现在却可以设置多个背景图片。而不用图片的话,最早的background 只能使用纯色填充,现在却可以使用各种渐变效果。现在所用的模型来自于CSS Backgrounds and Borders Module Level 3所定义的规范,主要分成了8个子属性。

背景颜色之 background-color

background-color是最早,最古老,最…常用的属性之一,取值是唯一的,颜色值。

背景图片之 background-image

background-image顾名思义是设置背景“图片”的,这里的图片并非我们通常意义上理解的“图片”,而是由CSS Image Values and Replaced Content Module所规定的一系列内容,用以替代CSS2中所规定的background-image属性与list-style-image属性中的url参数,或者作为伪元素content的值。现在浏览器也没有完全实现这些,可用的包括url()引用图片,和渐变“图片”,然后以逗号分隔所有图片(如果有)。

CSS 渐变

CSS渐变分成两种,linear-gradient()的线性渐变和radial-gradient()的 径向渐变。两个渐变在早期不同浏览器上的实现语法大相径庭,所以用的人较少,还是倾向于使用图片,现在各个浏览器的显示和实现已经基本趋向于一致,而且在 手机端也有比较好的实现,在移动端开发完全可以广泛使用了(但是在兼容IE9-的时候还是╮(╯_╰)╭),下面是详细介绍,也可以用生成器来搞定啦。整站下载

线性渐变:linear-gradient(<angle>, <start>[, <stop>]+);

  • <angle> 可以选择 to top、to bottom、to left、to right这4个关键字和 *deg 设置, 0deg(↓)就相当于 to bottom, 90deg(←) 相当于 to left,以此类推。
  • <start>,<stop> 的值则为<color>[ <position>]?,第一个和最后一个颜色不用写<position>,中间的颜色如果不写的话,所有的颜色就会平均分布。

径向渐变:
radial-gradient([ [ <shape> || <size> ] [ at <position> ]? , | at <position>, ]? <color-stop> [ , <color-stop> ]+)

我本想把这个语法简写一下的…减来简去发现还是这么写就好了(毕竟人家规范就是这么写的,果然深思熟虑过)…从后往前说

  • <color-stop> 和线性渐变一样,<color>[ <position>]?,也可以设定多个颜色值,而不写位置的话,就按照规定的值平均分布。
  • 颜色前面一大串:定义径向渐变的圆心、位置和渐变模式。
    • <shape> 是形状,可选值为ellipses(椭圆)或者circles(正圆),如果整个元素是个正方形的话,两个形状就都一样啦。
    • <size> 是尺寸,可以定义渐变的数值半径,如果形状是椭圆的话,需要填写两个尺寸值,按顺序是水平半径和垂直半径,此时尺寸可以写百分数。
    • 尺寸另外还有4个关键字可用:closest-side(最近的边)、farthest-side(最远的边)、closest-corner(最近的角)、farthest-corner(最远的角),这4个关键字是指圆心相对于元素而言的,顾名思义想一下就好。
    • <position> 是圆心位置,需要在位置前面加上at,可以用position常用的关键字,也可以使用数值定义。

比如如下三行代码,就是等价的:

radial-gradient(yellow, green);
radial-gradient(ellipse at center, yellow 0%, green 100%);
radial-gradient(farthest-corner at 50% 50%, yellow, green);

重复渐变:repeating-linear-gradient()repeating-radial-gradient()

  • 用法同上,只是这回是重复渐变了而已。这里有一些很漂亮的Demo,当然它主要是为展示background-blend-mode属性建立的。

背景重复之 background-repeat

background-repead用于设置背景的重复方式,可选值有下面几种:

  • no-repeat 不重复,等价于no-repeat no-repeat
  • repeat-X X轴方向(横向)重复,等价于repeat no-repeat
  • repeat-Y Y轴方向(纵向)重复,等价于no-repeat repeat
  • repeat 重复平铺,等价于repeat repeat
    除了这4个常用的,还有两个…大概没什么人用,兼容性也不是很好的取值:
  • round 图像在指定方向平铺,会根据显示空间的大小缩放图像(什么时候缩放,什么时候增减平铺的数量是由浏览器决定的)
  • space 图像会尽可能重复,但不裁剪,第一张和最后一张固定在元素两端,剩下的均匀分布。此时background-position属性被忽视。另外只有在图像大过元素的时候会发生裁剪。

背景固定之 background-attachment

background-attachment用于设置背景相对的固定方式,可选值有:

  • scroll 默认值,背景相对于元素固定。
  • fixed 背景相对于整个窗口固定。随着最近全屏大图网站的流行,这种背景固定模式也日渐多见起来。
  • local 背景相对于元素内容固定,如果元素内有滚动条,背景会随着内容滚动。
    local这种模式我们几乎不怎么用到,这里找到一篇文章,作者写了一个Demo,在元素出现滚动条的时候,会在它的可滚动方向出现阴影。虽然是属于交互设计范畴,但随着各个网站更加强调重视用户体验,这种需求是早晚的事,而作者的Demo是非常有趣(且有效率)的实现方式。

背景定位之 background-position

background-positon,顾名思义就是用来定位的…但是这个定位吧…语法很复杂(或者说很随意)。可用的各种指示方向的关键字,也可以用数字单位或者百分比,写法有下面几种:

  • 并列写两个关键字(或值),第一个值代表它的水平位置,第二个值代表它的垂直位置(这个和paddingmarginborder这些先上下再左右的属性刚好是反的…)。另外如果两个都是关键字,那么位置可以交换,也就是说,center left是合法的,然而50% left不行。
  • 只写一个关键字(或值),那么它的第二个值就默认为center(居中)。
  • 三、四值,可以从元素的四周定位,比如离右边10px,底边5px,就可以写成right 10px bottom 5px,两组关键字-值对可以交换位置,也可以用center替代关键字-值。这种写法目前(2016-06)只有FF支持。

背景裁切之 background-clip

background-clip是设定背景所覆盖的范围的属性。可选值有:

  • border-box 默认值,背景延伸到边框下,但是只有当边框的颜色是半透明的时候才能看到延伸过来的背景。
  • padding-box 边框下没有背景。
  • content-box 只有内容下有背景(padding的空间里都没有)

背景原点之 background-origin

background-origin指定了背景图片定位的原点。属性取值与background-clip相同,但是clip是会对背景图片进行裁切,而origin是用于定位的。

可以看这个Demo,展现得比较清晰了。

背景尺寸之 background-size

background-size用来设置背景尺寸,可选值有:

  • 一对值\百分比或auto,百分比是相对于background-origin所设置的尺寸而言的,auto就是图片原本的尺寸,两个数值先宽后高。
  • cover 缩放图片,令其完全覆盖背景区域,可能导致图片某些区域不可见。
  • contain 缩放图片,令其以最大尺寸完整展现在背景区域中,可能导致背景某些区域变成空白。

变形金刚之 background

background是上面8个属性的总和…可以把所有属性写在一起。顺序不限,以空格隔开即可,但有几个需要注意的点:

  • 如果需要设定背景尺寸,写法是<position>/<size>,必须设定 <position> 的同时,以 / 分隔 <position> 和 <size>。
  • background-clipbackground-origin的属性,如果只写了一个值,那么会同时应用在两个属性上,如果写了两个值,那么前者是background-origin,而后者是background-clip
  • 没有设置的会被设为默认值,之后也可以单独设置,这个和padding之类简写的方式相似。

合体战士之多重背景

从CSS3时代开始,CSS背景开始支持多个背景图,设置在一起了。

只要将每张背景图以逗号分开,那么浏览器就会依次加载,并把写在后面的叠在上面。

对于分开设置的背景属性,也可以以逗号分隔,分别设置。但是如果,你只想设置其中某一张图片的特定属性,那你就得把其他的也都写上才行…

以及,背景颜色是唯一的(摊手),在使用background简写的时候,背景颜色要设置在最后一个逗号之后。


还有什么?

还有,在去年最新的Compositing and Blending草案中,提出了混合模式的规范草案,涉及到背景的属性是background-blend-mode,于本文成文时,只有Chrome和FF两大浏览器支持这一属性。

如果各位有玩过Photoshop的话,应该会对Photoshop中的混合模式有所耳闻,二者意思差不多。background-blend-mode的可选参数包括:normal(普通),multiply(正片叠底),screen(滤色),overlay(叠加),darken(变暗),lighten(变亮),color-dodge(颜色减淡),color-burn(颜色加深),hard-light(强光),soft-light(柔光),difference(差值),exclusion(排除),hue(色相),saturation(饱和度),color(颜色),luminosity(明度)。

这些参数的中文都是我根据Photoshop的混合模式直接翻译过来的(繁体用户可以参考这里),规范草案中也给出了每种混合模式的算法和演示效果,因为时间问题我就不一一验证效果了,如果有出入均以实际效果为准。MDN上有实际演示的Demo,我前面提到的那个网站也有很多实际的展示。

当然这些混合模式也可以应用在其他图像(比如SVG)上,我觉得这完全是为了让那些设计师和前端工程师之间少一些争吵多一些真诚(摊手)。

CSS中的背景用法详解的更多相关文章

  1. CSS中Position 的用法详解。

    记得一年前,到一家公司面试的时候,问我position有哪几个属性,我憋半天才回答出2个,大家估计都清楚,就是我们经常用到的2个(relative,absolute). 最近又用到了好多,深入研究了下 ...

  2. Css中display:inline-block用法详解

    display:block就是将元素显示为块级元素 block元素的特点是: 总是在新行上开始: 高度,行高以及顶和底边距都可控制: 宽度缺省是它的容器的100%,除非设定一个宽度 <div&g ...

  3. php中setcookie函数用法详解(转)

    php中setcookie函数用法详解:        php手册中对setcookie函数讲解的不是很清楚,下面是我做的一些整理,欢迎提出意见.        语法:        bool set ...

  4. css3中user-select的用法详解

    css3中user-select的用法详解 user-select属性是css3新增的属性,用于设置用户是否能够选中文本.可用于除替换元素外的所有元素,以下是user-select的主要用法和注意事项 ...

  5. C#中string.format用法详解

    C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...

  6. c++中vector的用法详解

    c++中vector的用法详解 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间 ...

  7. JavaScript中return的用法详解

    JavaScript中return的用法详解 最近,跟身边学前端的朋友了解,有很多人对函数中的this的用法和指向问题比较模糊,这里写一篇博客跟大家一起探讨一下this的用法和指向性问题. 1定义 t ...

  8. Mysql中limit的用法详解

    Mysql中limit的用法详解 在我们使用查询语句的时候,经常要返回前几条或者中间某几行数据,为我们提供了limit这样一个功能. SELECT * FROM table LIMIT [offset ...

  9. JavaScript中this的用法详解

    JavaScript中this的用法详解 最近,跟身边学前端的朋友了解,有很多人对函数中的this的用法和指向问题比较模糊,这里写一篇博客跟大家一起探讨一下this的用法和指向性问题. 1定义 thi ...

随机推荐

  1. VMware 虚拟化编程(3) —VMware vSphere Web Service API 解析

    目录 目录 前文列表 VMware vSphere Web Services API VMware vSphere Web Services SDK vSphere WS API 中的托管对象 Man ...

  2. Java各类型占字节数

    byte 1字节short 2字节int 4字节long 8字节float 4字节double 8字节char 2字节boolean 1字节 其中,换算关系: 1GB=1024MB 1MB=1024K ...

  3. pthon之mock应用

    研发过程中常见分工合作开发接口,但互相之间接口有依赖,这时候便可以使用mock 目录 1.安装 2.使用mock调试自己写的方法 3.使用mock解除依赖关系 1.安装 由于我的是python2.7, ...

  4. Python 使用openpyxl导出Excel表格的时候,使用save()保存到指定路径

    在使用openpyxl导出Excel表格的使用,如何指定导出的路径呢. 使用sava(filename),会保存到当前执行文件的路径下. 使用sava("/tmp/{}.xlsx" ...

  5. Visual Studio关于项目迁移或拉取代码产生的dll黄色感叹号警告问题解决方案

    今天换了台大电脑,准备好好爽一下, 就把笔记本上的项目拷贝到了台式机上, 但是我没有拷贝解决方案整个文件夹,因为其中项目太多了,我就把其中一个项目的文件夹直接拷贝到电脑上,然后就出现了下面的情况. 这 ...

  6. Linux(Ubuntu)常用命令(三)

    查看时间  cal :显示当前日期.  cal :显示全年日历./ cal -y 显示当年日历.  date :显示当前时间. 这几个一般不会用到了解即可. 查看进程信息  ps :显示当前进程. - ...

  7. locale报错,显示中文乱码

    locale: Cannot set LC_CTYPE to default locale: No such file or directorylocale: Cannot set LC_MESSAG ...

  8. BZOJ 1875(DP+矩阵快速幂)

    题面 传送门 分析 容易想到根据点来dp,设dp[i][j]表示到i点路径长度为j的方案数 状态转移方程为dp[i][k]=∑(i,j)∈Edp[j][k−1]" role="pr ...

  9. 当系统开启safe_mode和 open_basedir

    当系统开启safe_mode和 open_basedir,在程序中使用以下语句curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);并且遇到301,302状态吗时 ...

  10. ex2、逻辑回归

    介绍: 在本练习中,您将实现逻辑回归,并将其应用于两个不同的数据集.在开始编程练习之前,我们强烈要求建议观看视频讲座并完成相关主题的问题.要开始练习,您需要下载起始代码并将其内容解压缩到要完成练习的目 ...