之前就知道了用一张图片来设置页面内的所有背景的技术。原理很简单,利用background-potision精确地定位到图片的位置。好处是减少页面 的http请求数。

老实说,我并不觉得这个技术有多值得推广。虽然是减少了http请求数,但对于99%的网站来说,这个改进基本是看不见的。除了超一流的大网站,流量巨 大,减少http请求数可以看到效果,绝大多数的网站根本不需要这个技术。相较于它带来的几乎看不见的好处,它带来的坏处却很多。首先,要把所有小图片集 中到一张大图片上,这多了一个步骤,而图片之间的位置一旦定好很难进行改动,因为如果一旦要改动一个图片的位置,带来的是一系列图片位置的调整,整个页面 的背景可能会全部崩溃!!!是全部!!!也就是说,它的维护成本,还有适应性都非常地差!而图片之间的摆放,如何让页面内的小图标能最密集地排列从而让整 张图尺寸能尽可能地小也是要考虑的问题,很头疼。

再来讲讲技术实现上的难点。一个很关键的问题是,精确定位图片的位置并不算完,图片的平铺和容器的大小自适应才是一个让人很头疼的问题。也就是说,如果一 个容器的大小很大,而我们对这个容器设的背景很小,我们就要考虑到,如果这个容器大背景一定会平铺,会影响我们的效果。我们可以设置no-repeat来 禁止背景平铺,可是如果容器的大小大到超出了我们设置的最大值,会不会把旁边的图片拉过来接着做背景呢?一个解决方案是给每个自适应大小的容器,在放置背 景图的时候,尽量给背景图周围留下足够大的空白区。可是如此一来,小图片们就会很零散地聚在大图片中,和我们想要让“图片密集地集中在一块儿”的目的相违 背。

怎么办呢?今天看了一下应用这个技术的站点,发现原来他们用了一个1 * 1像素的透明gif图片!这是个很有趣的方法。如果一个大容器中需要一个小图片做背景,他们不会直接对大容器设背景,然后留大量空白,而是给那个1*1的 gif图片取个class或者id,用css控制它的大小和背景。这用得很巧妙。因为对于块级元素来说虽然可以定义大小和长宽,却是独占一行的,如果用 float来让它和其它行内元素呆在一行的话,还需要清除浮动等等,很麻烦。如果是行内元素,却又没办法设置长宽。很好用的inline-block却得 不到IE6的支持,为了兼容我们又不能对元素设置display:inline-block; 好在IE虽然不支持css设置display:inline-block;引擎里却还是对一些元素提供这样的样式支持,包括img,input和 table都是这样的元素。用1*1象素的gif来设置长宽和背景,这样一来,就可以实现display:inline-block了。

总结一下,技术真相是什么呢?就是利用1 * 1像素的透明gif图片来实现大容器中的小背景。

css用一张大图片来设置背景的技术真相相关推荐

  1. css ul li 图标 图片位置定位 背景定位

    css ul li 图标 图片位置定位 背景定位 这是网站页面只有一张背景图片的时代 众多大型网站都是背景图片只用一整张这种模式 背景图片的定位应用广泛 .cases li{ lineheight:2 ...

  2. android取消背景图片,android 设置背景图片

    >**无背景的代码稍显枯燥啊少年: vs2015,vs2019等 再拓展里下载:** ! import java.awt.FlowLayout; import javax.swing.Image ...

  3. html设计渐变的背景图片,html设置背景径向渐变的方法

    html设置背景径向渐变的方法 发布时间:2021-06-04 16:16:47 来源:亿速云 阅读:91 作者:栢白 这篇文章主要介绍了html设置背景径向渐变的方法,具有一定借鉴价值,需要的朋友可 ...

  4. linux qt 背景图片,qt设置背景图片

    <一>http://blog.csdn.net/qq5823996/article/details/6851788 Qt的窗口背景图片有3种方式设置 1.QPalette p; p.set ...

  5. java 设置panel背景图片_jpanel设置背景图片的二个小例子

    import java.awt.*; import javax.swing.*; public class Demo extends JFrame { public Demo() { super(&q ...

  6. java改变背景图片大小,设置背景图片大小相同的的Java应用程序窗口/屏幕

    I would like to set a background image the same size as my window/screen. I would prefer to do this ...

  7. html表格中加背景图片,table设置背景图片,不能100%显示解决方法

    在开发中发现了下面的情况: (1) 如果文件存放为.jsp文件后缀的形式,代码如下所示(index.jsp): 复制代码代码如下: 让表格百分之一百显示 程序运行后,页面中显示的效果如下图所示: 该效 ...

  8. 怎么把html背景图片,css如何设置背景图片?

    在前端开发过程中,为了页面的美观,往往都会给html页面添加背景图片.那么如何利用css设置html中用图片做背景?本文就给大家介绍css怎样设置背景图片. css可以通过background-ima ...

  9. html设置背景图片覆盖不重复

    HTML设置背景图 在css或body的style属性设置背景图片. body{background-image:url(../img/pic_one.jpg) ;/*插入的背景图片的urlbackg ...

最新文章

  1. 使用Maven 打包项目 生成XXX.tar.gz 文件
  2. 如何使用 Cockpit 管理你的树莓派
  3. mysql5.7.23权限问题_部署MySQL5.7时的权限问题
  4. PL/SQL两种case语句写法
  5. Win7中修改Chrome浏览器缓存文件目录
  6. 王飞跃 | 社会机器:历史的起源与目标
  7. 生成一个GitHub的token用于git推送本地库至远程库
  8. python协程第一课(实现爬取自己博客)
  9. angular路由模块(二)
  10. jmeter监控服务器的方法
  11. C语言课程设计--推箱子
  12. eclipse保护眼睛色设置
  13. 电子元件识别 测量
  14. 人脸识别 | AI产品经理需要了解的CV通识(二)
  15. linux磁盘管理——quota磁盘配额GPT分区
  16. C++实验3-税收计算
  17. (转载)多少年来心血的结晶
  18. java.sql.SQLException: No suitable driver found for jdbc
  19. matplotlib之pyplot模块——填充多边形(fill)
  20. git push错误,如何回滚

热门文章

  1. noj大作业c语言扫雷,noj大作业.doc
  2. 如何获取当前刀具号_数控刀具的选用原则,如何使用数控刀具?一文全面介绍数控刀具...
  3. 写屏障是什么_面试官为什么问内存模型总离不开final关键字,该如何应对?
  4. oracle查询排序速度慢,Oracle-请问Oracle SQL排序查询慢如何解决
  5. JAVA 类加载 随记
  6. P2619 [国家集训队2]Tree I
  7. Zabbix linux agent 安装
  8. linux安装mysql(shell一键安装)
  9. 1003 阶乘后面0的数量
  10. 免费的.NET混淆和反编译工具