一、sass 是什么

  • Css的一种预处理器
  • 是基于css进行语法扩展而成
  • 主要目的是为了提高开发效率,弥补css语法不足的缺陷
  • 同样流行的预处理器还有:less、stylus

二、SASS的基本语法

  1. 变量

    以$开头的变量,类似于php中变量的概念

    $dark = #;
    a {color: $dark;} // a {color: #000}
  2. 嵌套(包括选择器的嵌套)

    嵌套是对css花括号语法的扩展,使得写css就像写dom一样层级分明。

    ul {max-width: 1200px;margin:  auto;
    li {float: left; padding: 5px 15px;}
    } //等同于 ul {max-width: 1200px;margin: auto;}
    ul li {float: left; padding: 5px 15px;}
  3. @mixin 混合器

    就是一个代码作用域 主要是用来封装那些常用的代码块,compass就包含了很多我们常用的@mixin

    //语法
    @mixin $name {
      //代码片段
    }
    .class {@include $name;}
    //实例
    @mixin clearfix {
    &:before,&:after {
    content:"";display:table;
    line-height: ;*zoom: ;}
    &:after {clear: both;}
    }
    //引用
    .clearfix {@include clearfix;} //这样就能引用清除浮动的代码块了
  4. @extend 继承

    这个更加好理解,就是将当前选择器添加到继承的选择器那里

    ul.nav {@extend .clearfix;}
    
    //生成的代码
    ul.nav,.cliearfix {
      //代码片段
    }

三、compass,scss中的jQuery

  为什么要用compass呢?

  • 大量封装好的@mixin,例如:float、clearfix、horizontal-list等等
  • 自动补全前缀的css3属性
  • Css图片精灵

大量的@mixin 这个真的很好用,特别是那些需要些浏览器前缀去hack的样式,真的是大大节约了不少时间呢!!!!

//下面是三个@mixin 是我项目中经常用到的,下面有对应编译生成的css

@include transition(color,.3s,ease-in);
-moz-transition: color, .3s, ease-in; -o-transition: color, .3s, ease-in; -webkit-transition: color, .3s, ease-in; transition: color, .3s, ease-in; @include translateY(-5px);
-moz-transform: translateY(-5px); -ms-transform: translateY(-5px); -webkit-transform: translateY(-5px); transform: translateY(-5px); @include opacity();
filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=); opacity: ; //兼容了IE

四、 compass 的图片精灵

  这个真的很好用,很好用,很好用,很好用!!!!!

1. 在没有compass之前,做图片精灵的三步骤:

  1. 将小icon用ps等相关工具合成一张图片
  2. 在浏览器慢慢调试background-position
  3. 在浏览器慢慢调试width、height

不要看只有三步,这里面的每一步都是相当耗时间的呐!!!

2. 使用compass的图片精灵功能sprites

使用图片精灵有下面多种方法,下面以icons这个图片精灵文件夹为例,下面示例代码中使用到的icons 均是指图片精灵文件夹名字

  1. 使用all-$dir-sprites , 这种方法最简单,不管你用没用到精灵的样式,反正一次性生成所有图片精灵,所以生成的代码相对也最冗余

    @import "icons/*.png";
    @include all-icons-sprites;
    //生成
    //生成的图片精灵的class name 都是以“图片文件夹-图片名”的方式命名,并且有一个主要的class name "图片文件夹-sprite"
    .icons-sprite, .icons-msg, .icons-qq, .icons-qq2, .icons-tell, .icons-weibo, .icons-weibo2, .icons-weixin, .icons-weixin2 { background-image: url('img/icons-s980cae6d97.png'); background-repeat: no-repeat; } .icons-msg { background-position: ; } .icons-qq { background-position: -21px; } .icons-qq2 { background-position: -68px; } .icons-tell { background-position: -115px; } .icons-weibo { background-position: -138px; } .icons-weibo2 { background-position: -185px; } .icons-weixin { background-position: -232px; } .icons-weixin2 { background-position: -279px; }
  2. 使用@import "icons/*.png";与 icons-sprite 配合使用 按需生成样式
    $icons-sprite-dimensions:true;
    @import "icons/*.png"; .img {
    .qq{@include icons-sprite(qq);}
    .weibo{@include icons-sprite(weibo);}
    }
    //生成
    //如果仅仅调用@import "icons/*.png" ,是不会生成任何代码的,调用了icons-sprite 才会生成代码,相对第一种方法,比较简洁
    .icons-sprite, .img .qq, .img .weibo { background-image: url('img/icons-s980cae6d97.png'); background-repeat: no-repeat; } .img .qq { background-position: 0 -21px; height: 47px; width: 47px; }
    .img .weibo { background-position: 0 -138px; height: 47px; width: 47px; }
  3. 使用sprite-map ,这种方法最智能最灵活,可以生成二倍图
    $sprite-icon: sprite-map("icons/*.png", $spacing: 5px, $layout: smart,$sort-by: '!width',$position:10px,$repeat:no-repeat);
    
    @mixin radio2-sprite($sprite-btn,$name) {
    //获取当前图标的图片名字
    $imgurl: sprite-file($sprite-btn, $name);
    //获取当前图标的位置
    $pos: sprite-position($sprite-btn, $name); //根据名字获取获取长度和宽度,并设置
    width: image-width($imgurl) / ;
    height: image-height($imgurl) / ; //设置图标的位置
    background-position: nth($pos, ) / nth($pos, ) / ;
    //使用compass的Css3模块 兼容处理背景图片大小
    @include background-size(ceil(image-width(sprite-path($sprite-btn)) / ) auto);
    }
    //引用
    .icon {background-image: sprite-url($sprite-icon);}
    .qq {@include radio2-sprite($sprite-icon,qq)} //生成
    // 可以与上面生成的css对比,尺寸的确是缩小了一般,哈哈^^
    .icon { background-image: url('img/icons-s13e30d3d8d.png'); }
    .qq { width: 23.5px; height: 23.5px; background-position: 0 -69px; -moz-background-size: 24px auto; -o-background-size: 24px auto; -webkit-background-size: 24px auto; background-size: 24px auto; }
  4. 配置图片精灵选项,配置选项是一个变量,所以要在@import 之前使用,参考第二点使用
    //配置间距
    $icons-spacing: 5px; //配置重复性
    $icons-repeat: no-repeat;
    //配置尺寸
    $icons-sprite-dimensions:true;

五、webpack配置compass

因为compass一半属于sass一半属于ruby,所以要用ruby-sass-loader才行

module.exports = { // ... 
module:{
rules:{
{
test:/\.scss$/,
use: ExtractTextPlugin.extract({
use:"css-loader!ruby-sass-loader?compass=1"
})
}
]
},plugins:[
new ExtractTextPlugin('./css/common.css')//方法二 第二步*
]
}

NB! compass已经不再更新维护 https://github.com/Compass/compass/commit/dd74a1cfef478a896d03152b2c2a3b93839d168e

结语: 好啦以上总结是我使用compass的一点小小经验,欢迎沟通交流

sass & compass 实战录的更多相关文章

  1. 实战录 | Kafka-0.10 Consumer源码解析

    <实战录>导语 前方高能!请注意本期攻城狮幽默细胞爆表,坐地铁的拉好把手,喝水的就建议暂时先别喝了:)本期分享人为云端卫士大数据工程师韩宝君,将带来Kafka-0.10 Consumer源 ...

  2. 云端卫士实战录 | Java高级特性之多线程

    <实战录>导语 一转眼作为一名Java开发者已经四年多时间了,说长不长说短不短,对于java的感情还是比较深的,主要嘛毕竟它给了我饭吃.哈哈,开个玩笑.今天我想借此机会来和大家聊聊Java ...

  3. 实战录 | 一起唠唠那些常见的DDoS攻击

    <实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士系统架构师高鹏,将带来常见的DDo ...

  4. 实战录 | 基于openflow协议的抓包分析

    <实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士安全SDN工程师宋飞虎,将带来基于 ...

  5. 实战录 | Redis的主从服务器搭建

    <实战录>导语 云端卫士<实战录>栏目定期会向粉丝朋友们分享一些在开发运维中的经验和技巧,希望对于关注我们的朋友有所裨益.本期分享人为云端卫士安全平台工程师田全磊,将带来Red ...

  6. sass+compass+bootstrap三剑合璧高效开发记录

    1. 先搭建环境,下载node.js,rubyinstaller,安装, 安装rubyinstaller时,要选上include system path,这样就会自动将node.js执行添加到wind ...

  7. window 安装 sass compass 记录

    1.安装Ruby 安装sass 和compass 需要 Ruby 的环境,还区分xp 和win7-8 下版本区别 ruby 官网中文 ruby 官网英文 注意: xp: 下载 [xp不能下载包含64位 ...

  8. windows下的SASS/Compass的安装与卸载

    认识SASS/Compass SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. SASS与Compass的安装说明 SASS在Wind ...

  9. sass+compass起步

    前言:Sass is an extension of CSS that adds power and elegance to the basic language. It allows you to ...

随机推荐

  1. E信通项目总结[转]

    http://ucd.leju.com/index.php/ouba2/    

  2. [Oracle] decode 函数及其用法

    http://blog.csdn.net/oscar999/article/details/18399177 前言 DECODE()函数,它将输入数值与函数中的参数列表相比较,根据输入值返回一个对应值 ...

  3. 网页中的图片查看器viewjs使用

    需求分析: 对于网页中的图片进行连续放大(便于用户清晰查看内容).缩小,旋转等操作,可以使用viewjs图片查看器插件实现. viewjs官方网址:https://github.com/fengyua ...

  4. Servlet介绍(一)

    Servlet介绍(一) Servlet是一个执行在webserver上的小的Java程序,它通过接收和响应webclient的请求.在tomcatserver中有已经帮我们实现好了Servlet接口 ...

  5. Opencv 实现图像的离散傅里叶变换(DFT)、卷积运算(相关滤波)

    我是做Tracking 的,对于速度要求非常高.发现傅里叶变换能够使用. 于是学习之. 核心: 最根本的一点就是将时域内的信号转移到频域里面.这样时域里的卷积能够转换为频域内的乘积! 在分析图像信号的 ...

  6. 程序开发使用地图API时需注意的问题(转)

    最近在做一个基于地点提醒的移动应用,当初考虑大家都心知肚明的原因,谨慎的选择了百度地图,现在想想其实完全没有必要,好的应用本来就不分国界的,最后可能还是得换回Google地图.毕竟Google地图在技 ...

  7. iOS - Bundle 资源文件包

    1.Bundle 文件 Bundle 文件,简单理解,就是资源文件包.我们将许多图片.XIB.文本文件组织在一起,打包成一个 Bundle 文件.方便在其他项目中引用包内的资源. Bundle 文件是 ...

  8. ASP.NET CORE 学习之自定义异常处理

    为什么异常处理选择中间件? 传统的ASP.NET可以采用异常过滤器的方式处理异常,在ASP.NET CORE中,是以多个中间件连接而成的管道形式处理请求的,不过常用的五大过滤器得以保留,同样可以采用异 ...

  9. Python学习笔记014——迭代工具函数 内置函数zip()

    1 描述 zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表. 如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操 ...

  10. webdriver API study

    This chapter cover all the interfaces of Selenium WebDriver. Recommended Import Style The API defini ...