css 背景用法大全

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)上,我觉得这完全是为了让那些设计师和前端工程师之间少一些争吵多一些真诚(摊手)。

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

推荐阅读更多精彩内容