初识scss(1)

最近在看sass,先总结了一点点,为了以后自己来看不用去翻文档;如果那里不正确欢迎指正!

什么是 Sass?

Sass 官网上是这样描述 Sass 的:

Sass 是一门高于 CSS 的元语言,它能用来清晰地、结构化地描述文件样式,有着比普通 CSS 更加强大的功能。

Sass 能够提供更简洁、更优雅的语法,同时提供多种功能来创建可维护和管理的样式表。

Sass 和 SCSS 有什么区别?

Sass 和 SCSS 其实是同一种东西,我们平时都称之为 Sass,两者之间不同之处有以下两点:

文件扩展名不同,Sass 是以“.sass”后缀为扩展名,而 SCSS 是以“.scss”后缀为扩展名

语法书写方式不同,Sass 是以严格的缩进式语法规则来书写,不带大括号({})和分号(;),而 SCSS 的语法书写和我们的 CSS 语法书写方式非常类似。

sass需要依赖Ruby,因为我的电脑是windows系统所以Mac系统安装怎么安装Ruby没有去进一步研究,在 Windows 平台下安装 Ruby 需要先有 Ruby 安装包,大家可以到 Ruby 的官网(http://rubyinstaller.org/downloads)下载对应需要的
Ruby 版本。

下载好文件个人建议安装到c盘,安装好后打开ruby的command控制面板,之后就可以在电脑上安装sass

安装sass

1、通过命令安装 Sass

打开电脑的命令终端,输入下面的命令:

gem install sass

mac安装需要在命令前面加“sudo”即 sudo gem install sass

2、通过compass安装sass

除了使用 gem 命令来安装 Sass 之外,还可以通过安装 compass 来安装 Sass,因为 Compass 是基于 Sass 开发的一个框架。也就是说,你安装了 Compass,也就同时安装好了 Sass。

同样的在你的命令终端输入下面的命令:

sudo gem install sass

3、淘宝rubyGems镜像安装sass

gem sources --remove https://rubygem

gem sources -a https://ruby.taobao.org/

gem sources -l

返回结果如下:

*** CURRENT SOURCES ***

https://ruby.taobao.org

请确保只有 ruby.taobao.org。如果无误之后,执行下面的命令:

gem install sass

验证安装成功:

安装好以后  输入sass -v  如果在你的命令终端能看见版本号就是安装成功了;

更新sass

gem upadte sass

卸载(删除)

gem uninstall sass

编码风格

  • 嵌套输出方式 nested
  • 展开输出方式 expanded  
  • 紧凑输出方式 compact 
  • 压缩输出方式 compressed

生产环境当中,一般使用最后一个选项。

sass --style compressed test.sass test.css

你也可以让SASS监听某个文件或目录,一旦源文件有变动,就自动生成编译后的版本。

// watch a file

  sass --watch input.scss:output.css

  // watch a directory

  sass --watch app/sass:public/stylesheets

webstorm 配置file watchers ,这个可搞了我有一会时间,一直报找不到文件,后来才发现是在新建的时候压根就没有scss这个模板,所以第一步就是检查自己之前有没有配置过这个模板,点击要创建scss文件的文件夹,(我这里说没有的情况下怎么去创建)

1.New->Edit file Templates

2.选择左上角的加号,在右侧Name名字位置上填写scss/sass,在Extension填写scss,点击ok,返回主页面再重复第一步骤操作你会发现有scss这个模板了,

3.点击File-settings-Tools-file watchers 如下图所示,点击右侧点击按钮,选择要监控的文件类型,填写下图的一些配置就ok啦;最近发现webstorm真的很强大有点爱不释手的感觉呢;

相关配置

Program:C:\Ruby23-x64\bin\scss.bat

Arguments:--no-cache --update --sourcemap
--watch $FileName$:$FileNameWithoutExtension$.css

Working directory:$FileDir$

Output paths to refresh:$FileNameWithoutExtension$.css:$FileNameWithoutExtension$.css.map

最后创建scss之后就会生产.css,.css.map 如下图:

注释

1、类似 CSS 的注释方式,使用 ”/* ”开头,结属使用 ”*/ ”

2、类似 JavaScript 的注释方式,使用“//”

sass的数据类型

sass和javascript语言类似也有自己的数据类型

数字:如1、2、3、12px;

字符:有引号或无引号字符串,如:“foo”,‘bar’,foo;

颜色:如,black,#bf1832,rbga(255,0,0,0.5);

布尔型:如,true,flase;

空值:null;

值列表:用空格或逗号分开,如,1.5em
1em 0 3em,Helvetica, Arial, sans-serif

SassScript 也支持其他 CSS 属性值(property value),比如 Unicode 范围,或 !important 声明。然而,Sass 不会特殊对待这些属性值,一律视为无引号字符串 (unquoted strings)。

一、变量

全局变量:

$color:red !default; 全局变量就是定义在元素外面的变量

span{ $color:blue;定义在元素内部的变量

      b{color:$color } 

}  

全局变量的影子

当在局部范围(选择器内、函数内、混合宏内...)声明一个已经存在于全局范围内的变量时,局部变量就成为 了全局变量的影子。基本上,局部变量只会在局部范围内覆盖全局变量

变量的使用建议:

  • 该值至少重复出现了两次;
  • 该值至少可能会被更新一次;
  • 该值所有的表现都与变量有关(非巧合)
  • 二、选择器嵌套

    选择器嵌套为样式表的作者提供了一个通过局部选择器相互嵌套实现全局选择的方法,sass的嵌套分为三种

      • 选择器嵌套
      • 属性嵌套
      • 伪类嵌套

    <header>

    <nav>

    <div>1</div>

    <div>2</div>

    <div>3</div>

    </nav>

    </header>

    css:nav div{color:red}

    header nav div{color:blue}

    scss:nav {

    div{ color:red;

    header &{

    color:blue

    }

    }

    }

    三、嵌套-属性

    css中有些属性前缀相同,后缀不同 比如border-top;border-left;margin、padding、font、backgound等,比如

    css:.warp{

      border-top:1px solid #ccc;

                border-bottom:1px solid #000;

    font-size:14px;

    font-weight:blod;

    }

    scss:.warp{

    border{

    top:1px solid #ccc;

    bottom:1px solid #ccc;

    }

    font{

    size:14px;

    weight:blod;

    }

                 }

    四、嵌套-伪类嵌套

    伪类嵌套和属性嵌套非常相似,只不过他要借助“&”符号一起来配合使用,我们就拿精蛋的“clearfix”为列子:

    css:  .clear{width:100%;margin:0 auto;*zoom:1}

    .clear:before,.clear:after{display:table;content:"";}

    .cleear:after{clear:both;]

    scss: .clear{

    width:100%;margin:0 auto;*zoom:1;

    &:befor,&:after{display:table;content:""}

    &:after{clear:both}

         }

    避免使用选择器的嵌套:

    • 选择器嵌套的醉倒问题是使最终的代码难以阅读,开发者需要花费大量的精力去计算不同缩进级别的选择器具体的表象效果
    • 选择器越具体声明语句越冗余,而且对最近选择器的引用(&)也越频繁,在某些时候,出现混淆的选择器路径和探索下一级选择器的错误率很高,这非常不值得

    所以为了防止此类情况,我命应该尽可能的避免使用选择器仙桃,然而显然只有少数的情况适应这一措施;

    五、混合宏 

    如果网站中有几处小样是类似,颜色 字体等 在sass中可以用变量来统一控制,但是当样式变得越来越复杂,需要使用大量的样式时候使用变量已经不能达到我们的目的,这个时候sass中的混合宏 就变得非常有意义;

    声明混合宏: 不带参数的混合宏

    使用@mixin来声明

    不带参数的: @mixin border-radius{   border-radius混合宏名称

    -webkit-border-radius:5s;

    border-radius:5px;

    }

    不带值的参数: @mixin border-radiu($raduis)s{   border-radius混合宏名称

    -webkit-border-radius:$raduis

    border-radius:$raduis

    }

    带默认值得参数: @mixin
    border-radiu($raduis:5px)s{   border-radius混合宏名称

    -webkit-border-radius:$raduis

    border-radius:$raduis

    }

    复杂的混合宏:

    @mixin size($width,$height){

      width: $width;

      height: $height;

      }

    @mixin box-shadow($shadow...){

    @if length($shadow)>1{

    @include prefixer(box-shadow,$shadow);

    }@else{

    $shadow:0 0 4px rgba(0,0,0,3);

    @include prefixer(box-shadow$shadow);

    }

    }

    使用@include来调用混合宏

    不带参数:     input{

    @include border-radius;}

    不带值得参数:input{@include border-radius(5px)}

    带默认值得参数:input{@include border-radius ;}

    复杂的混合宏(多个参数)

    input{@include  size(100px,100px)}

    当混合宏的参数过多时可以用“...”参数来替换

    input{

    @include box-shadow(0 0 1px rbg(#000,.5),0 0  2px rgba(#000,.2))

    }

    *  混合宏在实际的编码中给我们带来方便 特别是对于复用重复的代码块,但它的最大的不足就是生产冗余的代码块  ,在不同的地方调用一个混合宏是并不能够只能的将相同的样式代码块合并在一起

    六、继承

    不只是java,c#,css有继承,scss也有继承这么一说,也是继承类中的样式代码块,在scss中是通过关键词“@extend”来继承已经存在的样式块,从而来实现代码的继承;

    scss:.btn{

    border:1px solid #ccc;

    font-size:14px;

    }

    .btn-small{

    background:#bf1832;

    color:#fff;

    @extend:.btn;

    }

    .btn-middle{

    background:#bf1832;

    color:#000;

    @extend:.btn

    }

    css: .btn,.btn-small,.btn-middle{border:1px solid #ccc;font-size:14px}

    btn-small{  background:#bf1832;  color:#fff;  }

    .btn-middle{background:#bf1832; color:#000; }

    七、占位符(%)

    占位符%placeholder是一个很强大很实用的一个功能,也是我个人喜欢的功能,占位符可以取代css中基类造成的冗余代码的一个情况,因为运用占位符来声明的代码如果不被@extend调用的话不会产生任何代码;

    scss:  %pdt{padding-top:5px;}

    %mt{margin-top:5px;}

    .btn{@extend:%mt,@extend:%pdt}

    .btn-small{@extend:%pdt}

    css:    .btn,.btn-small{padding-top:5px}

    .btn{margin-top:5px;}

    八、混合宏   继承  占位符

    什么时候使用混合宏,什么时候使用继承,什么时候使用占位符是初学者常常纠结的一个问题

    混合宏:

    总结:因为混合宏不会自动合并相同的样式,如果一个样式文件多次调用一个混合宏,会产生对个对应的样式代码,从而造成了代码的容易,

    个人建议:如果你的代码块中涉及到了变量,建议适合用混合宏来创建相同的代码块;

    继承:

    总结:使用继承后,编辑出来的Css会将使用的代码块合并到一起通过组合选择器的方式向大家展现
    但它不能传递参

    个人建议:你过你的代码不需要专任何变量参数,而且有一个基类一再文件中存在。建议使用sass继承

    占位符:

    总结:采用占位符编辑出来的css代码和使用继承是相同,占位符是独立定义的,不调用的时候是不

    会再css中产生任何代码,而继承是首先要有一个基类不管调没调用,基类样式都会在编译之后的css  代码中;

    九、插值#{}

    使用css预处理器语言的一个主要的原因就是想使用sass获得一个好的体系结构,比如你想写更干净更高效面向对象的css,这sass中的插值就是最重要的一个部分;

    sass:

    $property:(margin,padding);

    @mixin set-value($side,$value){

    @each $prop in $property{

    #{prop}-${side}:$value;

    }

    }

    .lo{

    @include set-value(top,10px)

    }

    css:

    .lo{margin-top:10px;padding-top:10px;}

    其中each...in 遍历$property;

    插值也可以用来构建选择器

    sass:

    @mixin generate-size($class,$small$medium,$big){

    .#{$class}-small{font-size:$small;}

    .#{$class}-medium{font-size:$medium;}

    .#{$class}-big{font-size:$big;}

    }

    @include generate-size("header",10px,20px,30px)

    css:

    .header-big { font-size: 40px; }

    .header-medium { font-size: 20px; }

    .header-small { font-size: 10px; }

    十、字符串

    sassScript支持css两种字符串类型:

    • 有引号字符串(quoted strings)如:“http://baidu.com”;
    • 无引号的字符串(unquoted strings)如:sans-serifbold;

    在编译css文件时候不会改变其类型,只有当使用插值(#{})有引号字符串会被编译为无引号字符串,这样方便了在混合指令(mixin)中引用选择器名

    sass:

    @mixin firefox-message($selector) {

    body.firefox#{$selector}:before
    {

    content: "Hi, Firefox users!";

    }

    }

    @include firefox-message(".header");
    css:
      body.firefox .header:before {
      content: "Hi, Firefox users!"; }

    、值列表

    所谓值列表 (lists) 是指 Sass 如何处理 CSS 中:

    margin: 10px
    15px 0 0 或者: font-face: Helvetica,
    Arial, sans-serif

    像上面这样通过空格或者逗号分隔的一系列的值。

    事实上,独立的值也被视为值列表——只包含一个值的值列表。

    Sass列表函数(Sass list functions)赋予了值列表更多功能(Sass进级会有讲解):

    • nth函数(nth function) 可以直接访问值列表中的某一项;
    • join函数(join function) 可以将多个值列表连结在一起;
    • append函数(append function) 可以在值列表中添加值;
    • @each规则(@each rule) 则能够给值列表中的每个项目添加样式。
    时间: 2024-11-14 13:05:29

    初识scss(1)的相关文章

    初识Python,望君多多关照

    在学习Python之前,我们接触过数据结构和网页制作.前者让我们学习如何把C语言运用的更加整齐规范,而后者让我们亲身学习如何运用所学,制作一个静态网页.通过这些课程的学习,让我对C语言产生了比较大的压力,以至于对编程.对这学期的Python课程都有一种如临大敌的感觉. 但是真的学习了这门课程,体会了编码过程中的一些固定运用方法和套路之后,也许过程中对这门课程隐隐约约产生了一点点朦胧的感觉,仿佛他也并没有想象中的那么困难,起码现在的学习让我认为,他可能没有C语言那么繁琐和麻烦.当然,以一个初学者的

    初识数组排序!!!!

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>初识数组排序</title> <!--调试成功--> <style type="text/css"> *{ padding:0; margin: 0; } li,ul{ list-style: none; } #p

    初识操作系统和linux

    初识操作系统和linux 1.计算机系统由硬件系统和软件系统两大部分组成:是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动.高速地处理,然后把处理结果输出的现代化智能电子设备. 2.世界上第一台计算机是1946年诞生在美国宾州大学. 3.冯·诺依曼体系结构:1946年数学家冯·诺依曼于提出计算机硬件系统由运算器.控制器.存储器.输入设备.输出设备.摩根定律:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍.现在计算机技术进本很难遵

    JAVA 初识类加载机制 第13节

    JAVA 初识类加载机制 第13节 从这章开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class文件,再由虚拟机解释给当前的操作系统去执行.这些过程都是我们看不见的,我们能看见的也就是一个.class文件.既然虚拟机要解释这些.class文件给当前的操作系统听,那么他怎么获得这些.class文件呢?虚拟机获得这些.class文件的过程就是类加载了. 所以,总结来说就是:虚拟机将.class文件从磁盘或者其他地

    Sass 和 SCSS 有什么区别?

    Sass 和 SCSS 其实是同一种东西,我们平时都称之为 Sass,两者之间不同之处有以下两点: 文件扩展名不同,Sass 是以“.sass”后缀为扩展名,而 SCSS 是以“.scss”后缀为扩展名 语法书写方式不同,Sass 是以严格的缩进式语法规则来书写,不带大括号({})和分号(;),而 SCSS 的语法书写和我们的 CSS 语法书写方式非常类似. Sass 语法 $font-stack: Helvetica, sans-serif //定义变量 $primary-color: #33

    初识React

    原文地址:北云软件-初识React 专注于UI 在MVC分层设计模式中,react常被拿来实现视图层(V).React不依赖于技术栈的其他部分,因此可以方便的在现有项目中尝试用它来实现一个小特性. 虚拟DOM React从DOM中抽象出来,给出一种更简洁的编程模型,且性能表现更好.能够通过NodeJS实现服务端渲染,通过React Native开发原生app. 数据流React实现单向.响应式数据流,减少boilerplate且比传统数据绑定更容易理解. 简洁的组件React的组件都实现了一个r

    泛型的几种类型以及初识webform

    今天学习的可以分为两类吧,但是学习的都是比较抽象的,不太容易掌握吧.首先我们大部分时间学习了泛型,泛型的委托,泛型接口以及枚举器,迭代器,扩展方法:最后简单的认识了webform,实现了一个简单的功能. 一.泛型 定义:泛型(generic)可以软糖多个类型共享一组代码,泛型允许我们声明类型参数化.可以用不同的类型进行实例化,说白了,就是可以用类型占位符,创建具体类型致命的真实概念.C#中提供了五种泛型,类,结构,接口,委托和方法.下面举例说明可能更容易理解, class MyStack<T>

    最新计算机技术与管理科学应用专家——初识ERB

    ERB管理系统:英文全称Enterprise Resource and Behavior,英文简称:ERB,中文名全称:企业资源与行为管理系统.ERB是由理文企业管理顾问有限公司首席管理师,现任商翼ERB企业管理系统项目总监吴志华先生,于2010年9月首先提出的.ERB不再单以供应链管理作为系统应用的基础,而是以企业行为与企业资源规划的最佳结合作为系统应用设计的核心基础,强调企业行为的规划.执行.监督与追溯,强调企业管理水平与员工素养的持续提升:提供企业行为与企业资源管理最佳结合的整体应用解决方

    [OpenGL]环境搭建以及OpenGL初识

    想往游戏行业发展的话,经常被提及到的就是OpenGL和DirectX,这两者听起来感觉是一门挺高深的技术,今天我也开始摸索学习OpenGL,那么OpenGL到底是什么?它和DirectX有什么区别和联系? OpenGL初识 OpenGL只是一套图形函数库 DirectX包含图形.声音.输入.网络等模块. 但就图形而论,DirectX的图形库性能不如OpenGL,OpenGL稳定,可以跨平台使用,DirectX只支持Windows平台,所以OpenGL还是有它的优势!OpenGL ES是OpenG