sass+compass css自动化框架深度解析


缘由: 
  自动化构建  
  远离刀耕火种的上世纪远古社会 
  生产工具决定生产力的主要关系
  当你拿着一把锤子的时候,满世界都是你的钉子,当你有一根钉子的时候,你会满世界寻找一把锤子。

诱导: 你的注释必须是你代码的2/3,否则就是对不起社会主义。

一句话概括:compass就是sass的高级封装,类似jq跟js的关系,使用得心应手,类名一定要有语义化的作用, 持续的可维护性

提醒: 千万不要使用webstrom集成ide.会被玩吐血的,这个直接是用配置文件跟命令行进行调试就行。强烈建议关闭sass、compass sass的ide watching。自己开个窗口进行监听调试。

【Sass部分】
 1. 变量 $width, $width_of_div, $width-box. 一般很多的全局变量放一个局部文件中,局部文件以_开头不会被编译,只能被 @import
       通过变量重用颜色、长度以及其他一些值
       通过规则嵌套让CSS更加结构化,变量之间都是可以嵌套调用的。
       通过多文件组织让样式变得更加可维护
       通过混合器和继承重用整个样式
2.  嵌套的css规则

#content {
  article {
    h1 { color: #333 }
    p { margin-bottom: 1.4em }
  }
  aside { background-color: #EEE }
}

3.   父选择器的标识符&,以及群选择器嵌套  子组合选择器和同层组合选择器:>、+、~

.container {
h1,h2,h3 {margin-bottom:2em;}
}
a {
color:blue;
&:hover {color:red;}
}

// 选择器只会选择article下紧跟着的子元素中命中section选择器的元素;
article > section {border:1px solid #ccc;}
// 选择header元素后紧跟的p元素;
header+p {font-size:1.1em;}
// 选择所有跟在article后的同层article元素;
article ~ article {border:none;}

4. 属性拆分,可以随意的方便调用。

nav {
border: {      // 将属性拆开;
style:solid;
width:1px;
color:#ccc;
},
font:{
size: 12px;
family: 'Micro'
}
}

5. @import 导入

sass内部重写了这个css的方法,但是以下5种情况还是会调用原生的css的这个方法:

1.被导入的文件的名字以.css结尾; 2.被导入的文件的名字是一个URL地址; 3.被导入的文件的名字是CSS的url()值; 4.多个import使用逗号进行分割 5. media query查询的时候也会

6. 注释: // 编译会被删除 、 /**/不会被删除 注释最前面加上!在压缩的时候就不会删除这些注释
7. 混合器

// 混合器使用@mixin标识符定义;
// 这个标识符给一段样式赋予一个名字,这样就可以通过"@include"引用这个名字重用这段样式;
// @include调用会把混合器中的所有样式提取出来放在@include被调用的地方;

@mixin rounded {

-moz-border-radius:5px;
-webkit-border-radius:5px;
border-radius:5px;
}
.notice {
@include rounded;
}

使用场景

(1)判断一组属性是否应该合成一个混合器;一条经验法则就是能否为这个混合器想出一个合理的名字;

混合器和CSS类的区别:

a. 类名在HTML文件中应用;具有语义化; b. 混合器是在样式表中应用的;具有展示性;
案例: 1 调用混合器

当一个包含CSS规则的混合器通过 @include 包含在一个父规则中时,在混合器中的规则最终会生成父规则

中的嵌套规则;

Sass:
@mixin no-bullets {
list-style:none;
li {
list-style-type:none;
margin-left:0px;
}

}
ul {
color:#333;
@include no-bullets;
}
CSS:
ul {
color:#333;
list-style:none;    // 混合器中的属性;
}
ul li {
list-style-type:none;
margin-left:0px;
}

(2). 混合器传递参数

@mixin link-colors( $normal:24px, $hover, $visited ){ // 默认参数
color:$normal;
&:hover { color:$hover }
&:visited { color:$visited}
}
a {
@include link-colors(blue,red,green);
}

8 @at-root 规范 进行嵌套的时候使用 @at-root 可以提升选择题输出不会嵌套,加快解析渲染,

因为页面解析css的时候是选从内部开始的,嵌套太深会影响。只是为了更好的书写跟更好的维护。

// sass
  .foo {
@at-root .bar {
color:gray;
}
}
 // css
.bar {
color: gray;
}

9. @extend 继承
继承是基于类的(有时是基于其他类型的选择器),所以 继承应该是建立在语义化的关系上;
如果一条样式规则继承了一个复杂的选择器,那么它只会继承这个复杂选择器命中的元素所应用的样式;

继承不是仅仅用CSS样式替换 @extend 处的代码那么简单;

>1.跟混合器相比,继承生成的CSS代码相对更少; >2.继承遵从CSS层叠的规则; (权重和出现的先后顺序);

继承需要注意:extend 不能继承选择器序列: .a .b{} 选择器序列
                        % 开头的选择器,只用来继承,不会进行编译输出。

.error {
border:1px solid red;
}

%red{ color:red } // 这句话不会被编译
.seriousError {
@extend .error;      // 继承选择器中的内容;
border-width:3px;

@extend %red;
}

10: @if 操作符号

@mixin col-sa ($width:50%){

// 使用type-of()方法: 检测$width是否是数值类型;
@if type-of($width) != number {
// #{}:可以引用Sass的变量;--Ruby语法;
// @error:表示错误信息;
@error "$width必须是一个数值类型,你输入的width是:#{$width}.";
}
// 使用unitless()方法:判断当前的数值是否跟有单位;
// 前置not表示否定,双重否定表示肯定;
@if not unitless($width){ // 判断数值有单位;
@if unit($width) != "%" { // 如果单位不是%;
@error "$width必须是一个数值类型,你输入的width是:#{$width}.";
}
} @else { // 判断数值没有单位;
@warn "$width必须是一个数值类型,你输入的width是:#{$width}.";
$width:(percentage($width)/100); // 换算成带%单位的数值;
}
@media (min-width:768px){
width:$width;
float:left;
}
}

11: @midea

// Sass中的@media与Css中的@media区别:
// 1.Sass中的media query可以内嵌在css规则中;
// 2.在生成css的时候,media query才会被提到样式的最高级;
3.好处: 避免了重复书写选择器或者打乱样式表的流程;

Sass:
@mixin col-sm ($width:50%){
@media (min-width:768px){
width:$width;
float: left;
}
}
.webdemo-sec {
@include col-sm();
}
Css:
@media (min-width:768px){
.webdemo-sec {
width:50%;
float:left;
}
}

compass其他模块请参考官网的介绍
compass create sample
compass compile [path/to/project] //编译当前文件或者某个路径下面的文件 [查看py配置文件]
compass watch [path/to/project] // 监听项目变化并且自动编译;
compass/reset 全部干掉默认样式 但是不推荐使用 内部是:sass load_path寻目 compass是默认的模块
compass的模块主要有:
sass+compass css自动化框架深度解析 - Anikin - Anikin
 
 其中reset模块只要包含:layout使用率不是很多 
  sass+compass css自动化框架深度解析 - Anikin - Anikin
  
   1: 一般推荐使用normalize.css格式化reset几种方式
    安装方式: a:npm install normalize.css
                      b:gem install compass-normalize 
   共有8个模块
    sass+compass css自动化框架深度解析 - Anikin - Anikin
 
  调用方法: require 'compass/import-once/activate'
              require 'compass-normalize'

sass默认只要遇到@imp ort就会解析,因此使用 import-once,但是如果当真的有一个文件需要多次引入,则可以在其@ import 'a!' 加感叹号便可多次调用该模块。

也可以单独引用模块:
      @import 'normalize-version'  必须先引用这个,内部机制原因
     @import 'normalize/base'
     @import 'normalize/html5' ...

2. css3模块 该模块间接的调用了support模块,因此引入改模块就没必要引入后者,或者直接引入所有
   调用: @import 'compass/css3'
   使用:@include box-shadow(1px 1px 1px 1px #ddd);

      
      
   @include border-corner-radius(top, left, 5px);
#opacity{
@include opacity(0.5);
// 完全透明 @include opacity(1)
}
#inline-block{ // 行内块元素
@include include-block;
}

3. support模块
  调用: @import 'compass/support';
  在scss中: @debug browsers()   就会在控制台中打印出相关的信息

也可以在win+r下打印: 

compass interactive
  =>browsers() 

  $supported-browsers: chrome,firefox
  $browser-mininum-version:('ie':'8')    // 最低支持ie8

4. 
参考资料:
sass教程1: http://www.ruanyifeng.com/blog/2012/06/sass.html   [版本比较老,不推荐看,比较冗余]
sass中文2: http://www.sasschina.com/guide/   [ 不推荐看,废话忒多]
教程3:       http://www.cnblogs.com/yizihan/p/4498479.html  [推荐1]
教程4:       http://www.sasschina.com/guide/  [推荐2]
sass 官网:          http://compass-style.org/
安装遇到的一些问题:  请看以及gem相关的国内镜像问题  [ 原淘宝过来ruby镜像已经停止了更新 ]



继往开来:tm的你永远也学不完,就有人给你在造轮子。fuck this~
   node-sass
   post-css 饿了么等大公司现在正在使用的东西
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值