Sass/Compass篇(1)--让CSS的开发变得简单和可维护

(一)scss转css的方法(sass编译css)

为什么转(编译)

1.我们写出来的是后缀名为scss的文件,只有编译成css文件,才能用在网站上。
2.对比scss文件和css文件可以更清晰的知道哪里变的更简单和可维护。

两种编译方法(命令行编译&Koala.app工具编译)
1命令行编译

1.1打开终端
Compass是用Ruby语言开发的,所以安装它之前,必须安装Ruby,不知道终端和Ruby请戳下面
http://www.jianshu.com/p/f7f901f5e768
1.2安装Compass
在终端中输入

sudo gem install compass

输入密码(平时你安装app时的密码)
然后等待安装,Compass就安装好了。
1.3编译
在终端中输入

compass create myproject

输入后会创建一个Compass项目,如图文件夹名称为myproject,文件夹的位置在/Users/pro中
打开文件夹

myproject的子文件

在输入

compass compile

sass子目录中的scss文件将被编译成css文件,保存在stylesheets子目录中。

2.Koala.app工具编译

2.1下载安装Koala.app
https://pan.baidu.com/s/1hswOwbM
提取密码34dt
2.2使用

Koala.app

把你想要转的文件或文件夹拖拽到Koala.app中点击Refresh,就会在文件夹中生成一个css文件

拖拽
QQ20160910-2.png

(二)Cpmpass/Sass

1.简单实例让你秒懂@mixin @include @content这三哥们的魔术

传参:@mixin可以,%不可以
调用方式:@mixin=>@include,%=>@extend
产生样式的存在方式:@include:复制拷贝,@extend:组合申明

//scss魔术可以这么变
@mixin button {
    font-size: 1em;
    padding: 0.5em 1.0em;
    text-decoration: none;
    color: #fff;
    @content;
}

.button-green{
    @include button{
      background: green
    }
}
//scss魔术也可以这么变,结果是一样儿一样儿的。
@mixin button {
    @content;
}
.button-green{
    @include button{
      font-size: 1em;
      padding: 0.5em 1.0em;
      text-decoration: none;
      color: #fff;
      background: green
    }
}
//css
.button-green{
    font-size: 1em;
    padding: 0.5em 1.0em;
    text-decoration: none;
    color: #fff;
    background: green; 
}

把background:green传入@mixin button{}中@content的位置,再把@mixin button中的所有值传入.button-green中

//Compass/Sass简单@includ调用
@mixin center-block{
     margin-left:auto;
     margin-right:auto;
}
.demo{
    @includ center-block;
}
//css
.demo{
     margin-left:auto;
     margin-right:auto;
}

2.@mixin @include @content定义域

//scss
$color: green;
@mixin button($color: #fff) {
      color: $color;
      @content;
      border: 1px solid $color;
  }
.button-green {
      @include button {background: $color;}  
}
//css
.button-green {
      color: #fff;
      background: green;
      border: 1px solid #fff;  
}

注意:background颜色拿的是全局变量$color:green的颜色,并不是局部$color: #fff的颜色。

3.变魔术要用@mixin还是@extend

@mixin和@extend都模块化代码,然后更加方便地在样式表中复用一些样式片段,到底什么时候使用@mixin,什么时候使用@extend?
先看一下这两段代码和编译成css后的对比就一目了然了。

//@extend
.button {
      background: green;  
}
.button-1 {
      @extend .button;  
}.button-2 {
      @extend .button;  
}
//@mixin
@mixin button {
      background-color: green;  
}.button-1 {
      @include button;  
} .button-2 {
      @include button;  
}
//@extend=>css
.button, .button-1, .button-2 {
      background: green;  
}
//@mixin=>css
.button {      
background-color: green;  
}.button-1 {
      background-color: green;  
}.button-2 {
      background-color: green;  
}

虽然@extend编译成css后回更简洁,但是@extend也有一些缺点,它不够灵活,不像@mixin可以变很多传递参数的魔术,@extend也不好维护,如果不传参可以考虑使用@extend。但不得不说@mixin会更强大,更灵活。在大多数情况下@mixin会比@extend更好,但是它们俩都各有优势。

4.透明(opacity)

//Compass/Sass
@import"compass/css3";
#opacity{
    @include opacity(0.5);
}
//css
#opacity{
    filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=0.5);
    opacity:0.5
}

opacity的参数0.5,表示透明度为50%
完全透明

@include opacity(0);

完全不透明

@include opacity(1);

5.@media screen响应式大神

media属性
screen是媒体类型里的一种
and 被称为关键字,其他关键字还包括 not(排除某种设备),only(限定某种设备)
(min-width: 400px) 就是媒体特性,其被放置在一对圆括号中。

//当屏幕尺寸小于600px时,应用下面的CSS样式
@media screen and (max-width: 600px) { 
   .class {
      background: #ccc;
   }
}
<!DOCTYPE HTML>
    <html>
    <head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <title>css3-media-queries-demo</title>
    <style>
    body, div, dl, dt, dd, ul, ol, li, h1, h2, h3, h4, h5, h6, pre, form, fieldset, input, textarea, p, blockquote, th, td {
        padding: 0;
        margin: 0;
    }
    .content{
        zoom:1;
    }
    .content:after{
        content: ".";
        display: block;
        height: 0;
        clear: both;
        visibility: hidden;
    }
    .leftBox, .rightBox{
        float: left;
        width: 20%;
        height: 500px;
        margin: 5px;
        background: #ffccf7;
        display: inline;
        -webkit-transition: width 1s ease;
        -moz-transition: width 1s ease;
        -o-transition: width 1s ease;
        -ms-transition: width 2s ease;
        transition: width 1s ease;
    }
    .middleBox{
        float: left;
        width: 50%;
        height: 800px;
        margin: 5px;
        background: #b1fffc;
        display: inline;
        -webkit-transition: width 1s ease;
        -moz-transition: width 1s ease;
        -o-transition: width 1s ease;
        -ms-transition: width 1s ease;
        transition: width 1s ease;
    }
    .rightBox{
        background: #fffab1;
    }
    @media only screen and (min-width: 1024px){
        .content{
                width: 1000px;
                margin: auto
            }
    }
    @media only screen and (min-width: 400px) and (max-width: 1024px){
        .rightBox{
            width: 0;
        }
        .leftBox{ width: 30%}
        .middleBox{ width: 65%}
    }
    @media only screen and (max-width: 400px){
        .leftBox, .rightBox, .middleBox{
            width: 98%;
            height: 200px;
        }
    }
    </style>
    </head>
    <body>
    <div class="content">
      <div class="leftBox"></div>
      <div class="middleBox"></div>
      <div class="rightBox"></div>
    </div>
    </body>
    </html>

注意:由于网页会根据屏幕宽度调整布局,所以不能使用绝对宽度的布局,也不能使用具有绝对宽度的元素。这一条非常重要,否则会出现横向滚动条。

6.变量

声明变量($)

$width:300px;

默认变量(!default)

$width:300px !default;

局部变量和全局变量

$color:red !default;//定义全局变量
.block{
    clock:$color;//调用全局变量
}
em{
    $color:red;//定义局部变量
    a{
    color:$color;//调用局部变量
   }   
}
2.占位符%(placeholder),继承@extend

%如果@extend不调用,是不起作用的。
@extend继承已经存在的样式

//Compass/Sass
%mt5{
    margin-top:5px;
}
%pt5{
    padding-top:5px;
}
.btn{
    @extend %mt5;
    @extend %pt5;
}
.block{
    @extend %mt5;
    span{
        @extend %pt5;
    }    
}
//css
.btn,.block{
    margin-top:5px;
}

.btn, .block span{
    padding-top:5px;
}

7.插值#{}

插值(interpolation)将一个占位符,替换成一个值,通常指变量差值或变量替换。

$description: "awesome"; 
@warn "Tuts+ is #{$description}!";

可以插入任何类型的变量,不仅仅是字符串。

$answer: 42; 
@warn "The Answer to the Ultimate Question of Life, the Universe, and Everything is #{$answer}.";

8.$colors:()颜色映射(存储一堆,key/value的组合变量),color()函数,使用key获得映射中的值。

//config配置
$colors:(
    "first": tomato,
    "second":hotpink
);
//function函数
@function color($key){
    @return map-get($colors,$key);
}
//component 零件
.el{
    background-color:color(primary);
}

还可以用@warn你要的那个颜色(key)在不在$colors:();里

@function color($key){
    @if not map-has-key($colors,$key){
        @warn"key not found."
    }
    @return map-get($colors,$key);
}

比如你想调用$colors:();里的thired,但是$colors:();并没有名字叫third的颜色

@function color($key){
    @if not map-has-key($colors,$key){
        @warn "key" '#{$key}' not found in $colors map.";
}
.el{
    background-color: color(third);
}

调用color(third)时将会抛出Key third not found

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容