美文网首页让前端飞
你不知道的CSS(一)——灵活的背景

你不知道的CSS(一)——灵活的背景

作者: HappyAdu | 来源:发表于2016-11-13 16:13 被阅读0次

**参考资料**

- 《CSS揭秘》

-  w3school

----------

## 背景 ##

很多时候,我们都需要对某个元素设置背景图片,许多同学都写过这样的代码:

```

background-position:top right;

```

但你是否有过疑惑,这里的`top`和`right`是代表的哪儿的`top`和`right`呢?你可能知道,每个元素是一个盒子,每一个盒子有四条边界:外边距边界margin edge, 边框边界border edge, 内边距边界padding edge 与 内容边界content edge。 就像这样:

![box][1]

而背景图片只会出现在content-box、padding-box 或 border-box 区域。

![background-origin][2]

那么`background-position`属性指定的到底是哪个矩形边框的右上角呢?

默认情况下,`background-position`是以`padding-box`为准的,这样边框才不会遮住背景图片。因此,`top` `right`默认指的是`padding-box`的右上角。值得一提的是,现在`background`添加了一个属性——`background-origin`,他可以设置值改变`background-position`的基准。`background-origin`的值有三个,分别是: `content-box `、 `padding-box` 、`border-box`。

一般来说,基于DRY原则,我们可以结合`background-position`和`background-origin`使得代码精简,比如:

padding:10px;

background: url("code-pirate.svg") no-repeat #58a bottom right; // 或 100% 100%

background-origin:content-box;

这样是针对一种常见情况,偏移量和容器的内边距一致。因为如果不像上面这样,比如像下面这样,每改变一次padding,那么就不得不改变三处。

padding:10px;

background: url("code-pirate.svg") no-repeat #58a;

background-position: bottom 10px right 10px;

但是,请注意,这里我们使用了`background-position`的扩展语法,即先声明方向,在声明距该方向的值。如:

background-position:top 10px left 20px;

使用扩展语法,我们可以轻松解决距离某方向多少的问题而不用管容器的大小。但是我们还是要考虑某些不支持这种语法的浏览器,所以要提供回退机制,比如这样老套的将`right` `bottom`定位值写进`background`的简写属性中:

background:url("code-pirate.svg") no-repeat right bottom  #58a ;

background-position:right 20px bottom 10px;

那么,还有方法能够实现这种扩展语法类似的行为(即偏移某方向一定的距离)吗?

答案是肯定的,有,就是calc()方案。

calc函数允许我们执行这类运算,即

background:url("code-pirate.svg") no-repeat ;

background-position:calc(100% - 20px) calc(100% - 10px);

事实上,calc()函数可以进行加减乘除四类运算,只不过加减需要在符号前后各加一个空白符,不然浏览器就会解析错误。既然要用它,兼容性就是一个不得不考虑的问题,不过幸运的是,浏览器对calc()的兼容性还算不错,在IE9+、FF4.0+、Chrome19+、Safari6+都得到较好支持,但是同样需要在其前面加上各浏览器厂商的识别符,不过可惜的是,移动端的浏览器支持很少,几乎全军覆没。

.elm {

/*Firefox*/

-moz-calc(expression);

/*chrome safari*/

-webkit-calc(expression);

/*Standard */

calc();

}

了解到calc()这个神奇的工具,你是否想到了这个可以用于做自适应布局,是的,关于自适应布局,之前我知道的只有box-sizing,现在貌似它也可以。但是具体,我还没研究过,所以,这里就不讲了。

[1]: http://ogj5ruq17.bkt.clouddn.com/boxmodel%20%281%29.png

[2]: http://ogj5ruq17.bkt.clouddn.com/background-origin.gif

相关文章

  • 你不知道的CSS(一)——灵活的背景

    **参考资料** - 《CSS揭秘》 - w3school ---------- ## 背景 ## 很多时候,我们...

  • css使用背景灵活展示雪碧图

    雪碧图是把各种小图标集合在一起的png图片,通过background-position来展示雪碧图中不同位置的小图...

  • 灵活的背景定位

    background-position的扩展语法方案background-position属性允许我们制定背景图片...

  • CSS 灵活的背景定位(三种方案)

    1.background-position 方案 它允许我们指定背景图像距离任意角的偏移量,只要我们在偏移量前面指...

  • CSS教程汇总

    CSS揭秘实用技巧总结 不止于 CSS 灵活运用CSS开发技巧 前端基础篇之CSS世界 你未必知道的49个CSS知...

  • CSS样式

    CSS背景 CSS字体 CSS链接 CSS 列表 CSS 表格 CSS轮廓 CSS背景 1、背景色 ba...

  • Html-CSS 背景设置

    CSS 背景 CSS 背景属性用于定义HTML元素的背景。CSS 属性定义背景效果: background-col...

  • css的背景

    css的背景 background-attachment 设置背景图像是否固定或者随着也没的其余部分滚动 back...

  • CSS的背景

    一、背景颜色 background-color 一般默认是透明色(transparent) 二、背景图片 ba...

  • 3、灵活的背景定位

    插入背景图时,为了保证图片与盒子边距有一定的距离,可以直接使用background-position属性的扩展语法...

网友评论

    本文标题:你不知道的CSS(一)——灵活的背景

    本文链接:https://www.haomeiwen.com/subject/dfzzuttx.html