zoukankan      html  css  js  c++  java
  • CSS Sprites技术

    CSS Sprites技术,国内很多人也叫雪碧图,因为sprite麻 (你买一瓶雪碧就看得到大大的sprite字样了)

    主要用于将网站的零碎图标的img标签取代,因为每个img标签引用的src就会造成一个http请求,将这些零碎的小图标合并到一起,

    成为一张大图,就会一下子缩减数十个http并发请求量.

    使用注意:它主要是对logo和其它一些设计的各种独特图标的加载优化而用的,如果用在网站的一些静态大图上反而会导致一个请求的http数据量过大,拖慢加载.

    并且现在越来越多流行的方案是css字体图标svg标识等解决方案,它们是矢量(本体很小,且不会因放大而变形和不清晰)的,且有成熟开源的库 如fontawesome等

    原理:

    • background-image
    • backgorund-position

    当然我们不会笨到每个项目都费心的用ps先把图片拼接起来,然后一个图标一个图标去调整计算css position 截取需要的图标

    我们可以给出需要这样处理的单个图标,然后直接得到需要的每个的css样式

    比如我们可以使用在线的工具

    Site:http://spritegen.website-performance.org/
    
    Chinese Version:http://spritegen.website-performance.org/?action=home&lang=cn&change=Change

    或者 我们可以使用开源的小工具软件(windows下exe文件)

    https://github.com/iwangx/sprite

    当然还有更好的选择前端工作流的grunt 的 task 的配置

    使用grunt spritsmith 插件,自动化的生成需要的css,从而彻底的把我们从css图片整合中解放出来

    (注意 @2x的图片需要保证是像素分辨率需要正好是1倍图的2倍数,即需要是偶数,否则会造成生成的css定位不准确)

    github项目地址: https://github.com/Ensighten/grunt-spritesmith 

    在gruntfile.js里 定义任务

    module.exports = function (grunt) {
      grunt.initConfig({
        sprite:{
          all: {
            src: 'path/to/your/sprites/*.png',
            dest: 'destination/of/spritesheet.png',
            destCss: 'destination/of/sprites.css'
          }
        }
      });
    
      // Load in `grunt-spritesmith`
      grunt.loadNpmTasks('grunt-spritesmith');
    }

    代码clips:

    使用grunt jit来自动创建加载任务
    // Automatically load required Grunt tasks
      require('jit-grunt')(grunt, {
        cdnify: 'grunt-google-cdn',
        sprite: 'grunt-spritesmith'
      });
    
    
    initConfig({})  里
    加入任务
    sprite: {
                all: {
                    src: 'app/images/icons/*.png',
                    retinaSrcFilter: 'app/images/icons/*@2x.png',
                    dest: 'app/images/spritesheet.png',
                    retinaDest: 'app/images/spritesheet@2x.png',
                    destCss: 'app/styles/_spritesheet.retina.scss',
                    padding: 2,
                    algorithm: 'top-down',
                    cssVarMap: function(sprite) {
                        sprite.name = 'icon-' + sprite.name;
                    },
                    algorithmOpts: {
                        sort: false
                    }
                }
            }

    /style
    main.scss 引入
    @import "spritesheet.retina";
    @include retina-sprites($retina-groups); //媒体查询 传入图片选项组
  • 相关阅读:
    Python unittest单元测试框架总结
    RabbitMQ集群搭建
    mysql之mysqldump——备份与还原
    新版本Ubuntu本地提权漏洞复现
    Flash 零日漏洞复现(CVE-2018-4878)
    申论之道
    上海失业金
    C# GUID有什么用?
    C#通过接口或者父类可以调用子类的方法或者属性吗?
    C# 按逗号分隔字符串&强制类型转换string转double
  • 原文地址:https://www.cnblogs.com/isdom/p/webclips016.html
Copyright © 2011-2022 走看看