javascript – 使用gulp-spritesmith属性生成a:hover规则而不是类选择器

我使用gulp-spritesmith来生成我的精灵,我遇到了一个问题:
我想将一些生成的样式作为悬停规则的属性,而不是类选择器.在mouseover事件上添加类看起来很丑,我不认为它是一个解决方案.

例如:

.icon-sr_ext_icon_right {
  background-image: url(/imgs/static/external_sprite.png);
  background-position: -300px -100px;
  width: 50px;
  height: 50px;
}
.icon-sr_ext_icon_right_hovered {
  background-image: url(/imgs/static/external_sprite.png);
  background-position: -222px -200px;
  width: 50px;
  height: 50px;
}

成为:

.icon-sr_ext_icon_right {
  background-image: url(/imgs/static/external_sprite.png);
  background-position: -300px -100px;
  width: 50px;
  height: 50px;
}
.icon-sr_ext_icon_right:hover{
  background-image: url(/imgs/static/external_sprite.png);
  background-position: -222px -200px;
  width: 50px;
  height: 50px;
}

这是我的gulp任务代码:

gulp.task('external_sprite', function() {
    var spriteData =
        gulp.src(paths.external.sprite)
            .pipe(plugins.debug( { title: "Processing image for external sprite:" } ) )
            .pipe(plugins.spritesmith({
                imgName: 'external_sprite.png',
                imgPath: '/imgs/static/external_sprite.png',
                cssName: 'external_sprite.css'
            }));

    spriteData.img.pipe(gulp.dest('./www/imgs/static/'));
    spriteData.css.pipe(gulp.dest('./' + paths.external.src)); 
});

解决方法:

我找到了一种如何使用sass技术自动创建悬停效果样式的方法.简单地说,生成sprite,而不是将生成的css导入另一个sass文件并扩展所需的类:

@import 'external_sprite';
.icon-sr_ext_icon_right:hover {
    @extend .icon-sr_ext_icon_right_hovered;
}

另一种方式是由issue on github中插件的主要贡献者提出的.想法是使用cssOpts.cssClass:

cssOpts: {
  cssSelector: function (item) {
    // If this is a hover sprite, name it as a hover one (e.g. 'home-hover' -> 'home:hover')
    if (item.name.indexOf('-hover') !== -1) {
      return '.sprite-' + item.name.replace('-hover', ':hover');
    // Otherwise, use the name as the selector (e.g. 'home' -> 'home')
    } else {
      return '.sprite-' + item.name;
    }
  }
}

但是,如果要设置样式文件的.scss扩展名,则此解决方案无效.

上一篇:demo-ui 源码分析 知识点总结


下一篇:iOS自制火柴人动画CC_Sprite程序员自己做动画