前言
雪碧图被应用在诸多应用了许多小标志的网站上。相对把每张小标志以.png文件格式文档的方式引入到网页页面上,应用雪碧图只必须引入1张照片,对运行内存和带宽更为友善。
完成
假定大家根据.toolbtn的类,为运用该类的各元素出示1张情况照片:
CSS Code拷贝內容到剪贴板
- <style> .toolbtn {background:url(myfile.png); display:inline-block; height:20px; width:20px } </style>
情况部位,能够根据在background的url()立即界定X,Y轴的值,或根据background-position特性来加上。比如:
CSS Code拷贝內容到剪贴板
- <style>
- #btn1 {background-position: -20px 0px}
- #btn2 {background-position: -40px 0px}
- </style>
id=btn1的元素情况左移20px,id=btn2的元素情况左移40px(假定这两个元素的都加上了toolbtn类,运用了上面款式界定的照片实际效果)
相近的,你还可以应用下面的方法加上hover的情况:
CSS Code拷贝內容到剪贴板
- #btn:hover {background-position: [pixels shifted rightright]px [pixels shifted down]px;}
CSS雪碧的基础基本原理是把你的网站上用到的1些照片整合到1张独立的照片中,从而降低你的网站的HTTP恳求数量。该照片应用CSS background和background-position特性3D渲染(值得1提的是,这也就代表着你的标识变得更为繁杂了,照片是在CSS中界定,而非<img>标识)。
应用css-sprite雪碧图专用工具
将会是最好是用的雪碧图专用工具了,好吧,最少是我用过最好是用的。
最先安裝css-sprite,安裝这里很坑,等我最终再说。
npm install css-sprite
我是应用gulp来搭建前端开发编码,因此还必须安裝gulp和gulp-if,安裝好以后便可以刚开始配备啦。
新建1个task:
全选拷贝放进笔记var gulp = require('gulp');
JavaScript Code拷贝內容到剪贴板
- var gulpif = require('gulp-if');
-
- gulp.task('sprites',function(){
- gulp.src('img/icon/*.png')
- .pipe(sprite({
- name: 'icon',
- style: '_icon.scss',
- format: 'png',
- orientation: 'left-right',
- cssPath: '#{$icon-sprite-path}',
- template: './sprite-tpl.mustache',
- processor: 'scss'
- }))
- .pipe(gulpif('*.png', gulp.dest('img/'), gulp.dest('css/')));
- });
scss的模版应用mustache:
CSS Code拷贝內容到剪贴板
- {{#items}}
- ${{name}}: {{px.offset_x}} {{px.offset_y}} {{px.width}} {{px.height}};
- {{/items}}
-
- @mixin sprite-width($sprite) {
- width: nth($sprite, 3);
- }
-
- @mixin sprite-height($sprite) {
- height: nth($sprite, 4);
- }
-
- @mixin sprite-position($sprite) {
- $sprite-offset-x: nth($sprite, 1);
- $sprite-offset-y: nth($sprite, 2);
- background-position: $sprite-offset-x $sprite-offset-y;
- }
-
- @mixin sprite($sprite) {
- @include sprite-position($sprite);
-
- @include sprite-width($sprite);
- @include sprite-height($sprite);
-
- }
-
- {{#sprite}}
- {{class}} {
- background-repeat: no-repeat;
- overflow: hidden;
- border: none;
- background: url('{{{escaped_image}}}?v=#{$version}');
- @include inline-block();
- vertical-align: middle;
- font-style: normal;
- color:$icon-font-color;
- }
- {{/sprite}}
-
- {{#items}}
- .{{name}}{
- @include sprite(${{name}});
- }
- {{/items}}
搞定!便是那末简易。
如今只必须把照片丢到icon文档夹里边,运作下gulp sprites,便可以转化成1张雪碧图icon.png和相对性应的scss款式文档_icon.scss了,还可以再新建1个监视的每日任务,监视icon文档夹,这样便可以即时转化成了。
我把_icon.scss贴出来:
CSS Code拷贝內容到剪贴板
- $icon-qq: -262px -161px 60px 60px;
- $icon-email: -332px -161px 60px 60px;
- $icon-skype: -5px -252px 60px 60px;
- $icon-phone: -75px -252px 60px 60px;
- @mixin sprite-width($sprite) {
- width: nth($sprite, 3);
- }
-
- @mixin sprite-height($sprite) {
- height: nth($sprite, 4);
- }
-
- @mixin sprite-position($sprite) {
- $sprite-offset-x: nth($sprite, 1);
- $sprite-offset-y: nth($sprite, 2);
- background-position: $sprite-offset-x $sprite-offset-y;
- }
-
- @mixin sprite($sprite) {
- @include sprite-position($sprite);
-
- @include sprite-width($sprite);
- @include sprite-height($sprite);
-
- }
- .icon {
- background-repeat: no-repeat;
- overflow: hidden;
- border: none;
- background: url('#{$icon-sprite-path}/icon.png?v=#{$version}');
- @include inline-block();
- vertical-align: middle;
- font-style: normal;
- color:$icon-font-color;
- }
- .icon-qq{
- @include sprite($icon-qq);
- }
- .icon-email{
- @include sprite($icon-email);
- }
- .icon-skype{
- @include sprite($icon-skype);
- }
- .icon-phone{
- @include sprite($icon-phone);
- }
应用的情况下只必须再加相近class="icon icon-qq",便可以了。