我们都知道background-position属性用来指定背景图片应该出现的位置,可以使用关键字、绝对值和相对值进行指定。在CSS Sprites中,这个属性使用比较频繁,使用过程中,我常混淆,经常切不到自己想要的效果,于是决定好好理解其工作机制,这篇文章就是介绍background-position属性是如何指定背景图片和背景区域的位置关系。

注意:segmentfault对CodePen嵌入支持度不是很好,为使文章整洁,我将嵌入代码全部删除,完整体验请猛戳此处

background-position

我使用ps制作了一张400px × 400px的图片作为背景图片。

此处应有代码,猛戳此处!

为了更好理解background-position属性定位的机制,我们可以将指定背景区域想象为一个平面直角坐标系,原点在左上角,x轴正方向从左到右,y轴正方向从上到下,这点和平常向上为y轴正方向的坐标系有所不同。在这个坐标系中,通过指定x、y的坐标值定位一个点,此点即是背景图片的左上角。

此处应有代码,猛戳此处!

如上图所示,background-position指定值200px300px,即x为200px,y为300px,此点所在位置就是背景图片的左上角,因为部分背景图片因溢出背景区域被裁剪,就只剩下200px × 100px的左上角部分。

此处应有代码,猛戳此处!

可以指定正值就当然可以指定负值,如上所示,此时左上角被定位在(0px, -300px)处,因为向上为y轴负方向,背景图片上半的300px就因溢出被切除了,只留下400px × 100px的下部分。

此处应有代码,猛戳此处!

除了使用绝对值,也可以使用相对值指定。使用相对值时,定位方式直观上不好理解。但应清楚,最基本的方法是根据绝对值定位。使用相对值时它会将其转换,最终还是根据绝对值指定背景图片的左上角,转化的依据是x = (容器的宽度-图片的宽度) * percentX;y = (容器的高度-图片的高度) * percentY。上图经过计算,背景图片左上角被定位在(-200px, 0px)处,故背景图片被切除一半。

此处应有代码,猛戳此处!

我们也可以通过关键字topbottomleftrightcenter指定background-position属性,大家应该都喜欢这种简单明了的方式吧。一般指定两个关键字,如果只有一个,则另一个默认是center。这种方式也最终将转化成绝对值定位,不过先会转换成百分比,topbottomleftrightcenter分别相当于0%100%0%100%50%。上图中的background-position: right bottom;background-position: 100% 100%;效果是一模一样的。

CSS Sprites

使用上面介绍的理解方式,相信还是很好理解background-position的定位原理的。我想,background-position多数使用场景应该就是CSS Sprites了。CSS Sprites是一种网页图片应用处理方式,将一个页面涉及到的零星图片都包含到一张大图中去。这样一来,当访问该页面时,客户端只需要向服务器请求少量的图片,图片越多请求次数越少,造成延迟的可能性也就越小,能有效减轻服务器的压力;接下来应用CSS属性的background-imagebackground-position的组合进行背景定位,用数字精确地定位出背景图片的位置。


参考资料

CSS学习(二):背景图片如何定位?的更多相关文章

  1. css代码添加背景图片常用代码

    css代码添加背景图片常用代码 1 背景颜色 { font-size: 16px; content: ""; display: block; width: 700px; heigh ...

  2. Html CSS学习(五)position定位 原

    Html CSS学习(五)position定位 position用来对元素进行定位,其值有以下几种: static:无特殊定位,对象遵循正常文档流,top,right,bottom,left等属性不会 ...

  3. Vue项目打包发布后CSS中的背景图片不显示

    相信有很多同学在学习vue的刚开始都遇到过项目打包发布后发现CSS中的背景图片不显示,具体如何解决只需要更改bind的配置即可 修改 build/utils.js 中的 generateLoaders ...

  4. 用extract-text-webpack-plugin提取出来的css文件中背景图片url的不正确的问题

    在一个main.js中require一个scss文件,scss文件中用了背景图片,图片url是用的相对路径,用extract-text-webpack-plugin插件提取出的css文件背景图片路径不 ...

  5. 【Python全栈-CSS】CSS实现网页背景图片自适应全屏

    CSS实现网页背景图片自适应全屏 功能:实现能自适应屏幕大小又不会变形的背景大图,而且背景图片不会随着滚动条滚动而滚动. 以下是用CSS实现的方法: <html> <head> ...

  6. CSS 背景图片的定位和缩放

    在 CSS 中,利用 background-image 属性我们可以指定元素的背景图片,例如: .example { background-image: url(image/some.png); ba ...

  7. 【CSS学习】--- 背景

    一.前言 元素的背景区域包括:元素的内容.内边距和边框区域. CSS中用于设置背景的属性有: background-color 设置背景颜色 background-image 设置背景图片 backg ...

  8. css如何使背景图片水平居中

    CSS中定位背景图片的属性是:background-position,用法background-position 属性设置背景图像的起始位置. 你要水平居中可以: div{background-pos ...

  9. css 中的背景图片小技巧和存在的坑

    body 的背景图设置 第一种 :这种情况下背景图片可以缩放 但是不能完全等比缩放 background: url(imgs/1.jpg)no-repeat; background-position: ...

随机推荐

  1. VS 返回值被忽略的解决方法

    •问题 用 Visual Studio 编写 C++ 代码的时候,一旦用到 scanf , freopen 等函数的时候,编译器总会不合时宜的给你提示 "返回值被忽略",那么该如何 ...

  2. 微服务从代码到k8s部署应有尽有系列(十、错误处理)

    我们用一个系列来讲解从需求到上线.从代码到k8s部署.从日志到监控等各个方面的微服务完整实践. 整个项目使用了go-zero开发的微服务,基本包含了go-zero以及相关go-zero作者开发的一些中 ...

  3. Sublime Text 3 build 3103 注册码

    分享几个ST3的注册码,第一个我注册到自己电脑上,亲测可用,剩余几个没有测试.→原文链接 -– BEGIN LICENSE -–Michael BarnesSingle User LicenseEA7 ...

  4. LGP6008题解

    题意有点儿绕? 容易发现,题意相当于在说,如果某一格有水,那么 ban 掉上一行后,让与其连同的所有格子被画上水. 所以我们从上到下枚举行,依次 ban 掉每一行,然后数连通块个数即可. 需要注意的是 ...

  5. powerful number筛

    心血来潮跑来实现以下这个东西 我们应该知道杜教筛的理论是 \(f * g=h\),那么问题在于如何找 \(g\). 之前的blog应该提到过可以令 \(g(p)=-f(p)\),这样一来 \(h\) ...

  6. LGP2522题解

    双倍经验题. 柯以看成是P3455的扩展. 首先这个范围内是数我们柯以用类似二维前缀和的思想,看成: \(ans(a,b,c,d)=ans(1,b,1,d)+ans(1,a-1,1,c-1)-ans( ...

  7. 在命令行运行 python 抛出 ModuleNotFoundError 的解决方法

    所要运行的 py 文件在子目录中,并且该文件引用了另一个子目录中的 py 模块.类似这样: 原因 在运行环境下, a.py 找不到 b.py 所以抛出 ModuleNotFoundError. 解决 ...

  8. CentOS7.5环境下Docker基本操作

     1. 查找Docker中Centos镜像文件 docker search centos 2. 下载Docker中Centos镜像文件(默认下载最新版本) docker pull centos 3. ...

  9. Mybatis执行流程浅析

    从三个主要的对象SqlSessionFactoryBuilder->SqlSessionFactory->SqlSession说起 inputStream = Resources.getR ...

  10. RabbitMQ在开发环境搭建-转载

    1.安装erlang. rabbitmq 安装需要erlang 的支持,所有安装rabbitmq 之前需要现安装erlang.下载 erlang: https://www.erlang.org/dow ...