本文来自慕课网大漠
声明变量
三个部分:1、声明变量的符号"$"2、变量名称3、赋予变量的值
$brand-primary : darken(#428bca, 6.5%) !default; // #337ab7
$btn-primary-color : #fff !default;
$btn-primary-bg : $brand-primary !default;
$btn-primary-border : darken($btn-primary-bg, 5%) !default;
在后面加上 !default表示默认变量
覆盖默认值:在默认变量之前重新声明变量即可
$baseLineHeight: 2;
$baseLineHeight: 1.5 !default;
body{
line-height: $baseLineHeight;
}

编译后的CSS:

body{
line-height:;
}

调用变量:

"$变量名"放在你想调用的地方就行了。

局部变量和全部变量
没什么难理解的,看一下代码就行了
$color: orange !default;//定义全局变量(在选择器、函数、混合宏...的外面定义的变量为全局变量)
.block {
color: $color;//调用全局变量
}
em {
$color: red;//定义局部变量
a {
color: $color;//调用局部变量
}
}
span {
color: $color;//调用全局变量
}
全局变量的影子:简单说就是局部变量的名字和全局变量的名字一样。
什么时候声明变量?
    1、该值至少重复出现了两次;
    2、该值至少可能会被更新一次;
    3、该值所有的变现都与变量有关(非巧合)
嵌套
选择器嵌套
有这样一段结构

<header>
<nav>
<a href=“##”>Home</a>
<a href=“##”>About</a>
<a href=“##”>Blog</a>
</nav>
<header>

想选中header中的a标签,CSS:

nav a {
color:red;
}
header nav a {
color:green;
}

Sass:

nav{
a{
color: red;
header & {
color: green;
}
}
}
属性嵌套
CSS有些属性只是后缀不一样,前缀一样,比如margin-top/margin-bottom
如果CSS是这样:

.box {
border-top: 1px solid red;
border-bottom: 1px solid green;
}

那么Sass可以这样写:

.box{
border: {
top: 1px solid red;
bottom: 1px solid green;
}
}
伪类嵌套
和属性嵌套差不多,加上一个&符号就可以了

.clearfix{
&:before,
&:after {
content:"";
display: table;
}
&:after {
clear:both;
overflow: hidden;
}
}
避免选择器嵌套:俩原因,读不懂,不会写。
混合宏
需要重复大量的样式时,混合宏很有用
声明混合宏
不带参数混合宏
使用"@mixin"来声明

@mixin border-radius{
-webkit-border-radius: 5px;
border-radius: 5px;
}

带参数混合宏

@mixin border-radius($radius:5px){
-webkit-border-radius: $radius;
border-radius: $radius;
}
复杂的混合宏
可以在大括号里写上带有逻辑关系的语句

@mixin box-shadow($shadow...){
@if length($shadow) >= 1 {
@include prefixer(box-shadow, $shadow);
} @else{
$shaow: 0 0 4px rgba(0,0,0,0.3);
@include prefixer(box-shadow, $shadow);
}
}
box-shadow带有多个参数,可以用"..."来代替。当$shadow的参数数值量大于或等于1时,表示有多个阴影值,反之调用默认的参数值0 0 4px rgba(0,0,0,0.3)。
调用混合宏
匹配一个关键词"@include"来调用
比如调用上面的混合宏border-radius:

button {
@include border-radius;
}
混合宏的参数
传一个不带值的参数

@mixin border-radius($radius){
-webkit-border-radius: $radius;
border-radius: $radius;
}

调用时给混合宏传一个参数值:

.box{
@include border-radius(3px);
}

传一个带值的参数

@mixin border-radius($radius:3px){
-webkit-border-radius: $radius;
border-radius: $radius;
}

调用时可以直接调用混合宏"border-radius"

.btn{
@include border-radius;
}

当然也可以在调用时再给混合宏的参数传值:

.box{
@include border-radius(50%);
}

传多个参数

@mixin center($width,$height){
width: $width;
height: $height;
position: absolute;
top: 50%;
left: 50%;
margin-top: -($height) / 2;
margin-left: -($width) / 2;
}

一个特别的参数"...",当混合宏传入的参数过多时,可以用这个参数来代替。

@mixin box-shadow($shadow...){
@if length($shadows) >= 1 {
-webkit-box-shadow: $shadows;
box-shadow: $shadows;
} @else {
$shadows: 0 0 2px rgba(#000,.25);
-webkit-box-shadow: $shadow;
box-shadow: $shadow;
}
}

混合宏的不足

生成冗余的代码块

@mixin border-radius{
-webkit-border-radius: 3px;
border-radius: 3px;
}
.box {
@include border-radius;
margin-bottom: 5px;
}
.btn {
@include border-radius;
}

生成的CSS

.box {
-webkit-border-radius: 3px;
border-radius: 3px;
margin-bottom: 5px;
}
.btn {
-webkit-border-radius: 3px;
border-radius: 3px;
}

扩展/继承

加一个"@extend"就可以了
.btn {
border: 1px solid #ccc;
padding: 6px 10px;
font-size: 14px;
}
.btn-primary {
background-color: #f36;
color: #fff;
@extend .btn;
}
.btn-second {
background-color: orange;
color: #fff;
@extend .btn;
}

编译后的CSS

.btn, .btn-primary, .btn-second {
border: 1px solid #ccc;
padding: 6px 10px;
font-size: 14px;
}
.btn-primary {
background-color: #f36;
color: #fff;
}
.btn-second {
background-clor: orange;
color: #fff;
}

占位符 %placeholder

%声明的代码如果不被@extend调用,不会产生任何的代码。

%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;
}
通过@extend调用的占位符,编译出的代码会将相同的代码合并在一起。
混合宏 || 继承 || 占位符?

插值
$properties: (margin, padding);
@mixin set-value($side, $value) {
@each $prop in $properties {
#{$prop}-#{$side}: $value;
}
}
.login-box {
@include set-value(top, 14px);
}

编译成CSS:

.login-box {
margin-top: 14px;
padding-top: 14px;
}

再来看一个例子(构建一个选择器)

@mixin generate-sizes($class, $small, $medium, $big) {
.#{$class}-small { font-size: $small; }
.#{$class}-medium { font-size: $medium; }
.#{$class}-big { font-size: $big; }
}
@include generate-sizes("header-text", 12px, 20px, 40px);

编译成CSS:

.header-text-small { font-size: 12px; }
.header-text-medium { font-size: 20px; }
.header-text-big { font-size: 40px; }
 
 
 
 
 
 
 

Sass入门——基本特性-基础的更多相关文章

  1. 1-4 Sass的基本特性-基础

    [Sass]声明变量 定义变量的语法: 在有些编程语言中(如,JavaScript)声明变量都是使用关键词“var”开头,但是在 Sass 不使用这个关键词,而是使用大家都喜欢的美元符号“$”开头.我 ...

  2. Sass 基本特性-基础 笔记

    一.变量声明 $ 变量的声明使用 $  所有的变量必须声明到变量调用之前 从3.4版本开始,Sass已经可以正确处理作用域的概念     在局部范围声明一个已经存在于全局内的变量时,局部变量就会成为全 ...

  3. Sass入门及知识点整理

    Sass 快速入门 | SASS 中文网 文档链接:https://www.sasscss.com/getting-started/ 前言 之前整理了一篇关于Less的,现在就来整理一下关于Sass的 ...

  4. 快速入门系列--WebAPI--01基础

    ASP.NET MVC和WebAPI已经是.NET Web部分的主流,刚开始时两个公用同一个管道,之后为了更加的轻量化(WebAPI是对WCF Restful的轻量化),WebAPI使用了新的管道,因 ...

  5. CSS进阶之SASS入门指南

    CSS进阶之SASS入门指南         随着跟着公司学习项目的前端的推进,越来越对好奇了许久的SASS垂涎欲滴,哈哈,可能这个词使用不当,没有关系,就是对SASS有一股神秘的爱!好了,闲话不多说 ...

  6. [转]快速入门系列--WebAPI--01基础

    本文转自:http://www.cnblogs.com/wanliwang01/p/aspnet_webapi_base01.html ASP.NET MVC和WebAPI已经是.NET Web部分的 ...

  7. Sass入门指南

    转自:http://www.imooc.com/article/1413 css预处理器已经算不上一个新鲜的词了,当前比较有代表性的css预处理器有sass.less.stylus.关于三者选择问题一 ...

  8. 005 01 Android 零基础入门 01 Java基础语法 01 Java初识 05 Eclipse简介

    005 01 Android 零基础入门 01 Java基础语法 01 Java初识 05 Eclipse简介 Eclipse是一款集成开发工具--IDE. 集成开发环境(IDE,Integrated ...

  9. Membership三步曲之入门篇 - Membership基础示例

    Membership 三步曲之入门篇 - Membership基础示例 Membership三步曲之入门篇 -  Membership基础示例 Membership三步曲之进阶篇 -  深入剖析Pro ...

随机推荐

  1. springmvc结合freemarker,非自定义标签

    参考:http://viralpatel.net/blogs/spring-mvc-freemarker-ftl-example/ 上图: 目录层级: 启动后的访问地址:http://localhos ...

  2. 所有的GUI Toolkit,类型之多真开眼界

    The GUI Toolkit, Framework Page User interfaces occupy an important part of software development. Th ...

  3. openStack core service Components Ins shell scripts and simple provision

    will to be announced,functional testing,tuning,debuging.....,Enthusiastic audience Please to wait pa ...

  4. xcode 资源管理

    我个人觉得这么理解就够了 其他的以后再说

  5. zoj 2229 Ride to School

    所有车子到达的总时间算出来,然后从小到大排序,如果:1. 开始时间 < 0 的,不予考虑,太快的赶不上,太慢的赶上也没用.2. 开始时间 > 0 的,Charley 和最早到达的车子一起到 ...

  6. zoj 3714 Java Beans

    /*很简单的一题,求连续的m位,求总和最多的值,循环找一下,就出来了*/ #include<stdio.h> ]; int main(int argc, char* argv[]) { i ...

  7. IIS网站发布容易出现的几个问题

    1. 更新版本或者重新安装.net Framework: 2. 更改配置文件节点: 3. 访问权限问题的更改:

  8. 面试题之java 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 要求不能出现截半的情况

    题目:10. 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输 ...

  9. sort函数简单调用方法

    向量调用sort函数排序,一般有三个参数,即为sort(v.begin(),v.end(),cmp),第三个传入的是比较函数的地址(函数名),决定你比较的性质,运用灵活 #include<ios ...

  10. 5.5 Function类型

    说起来ECMAScript中上面最有意思,我想那莫过于函数了,有意思的根源,则在于函数实际上是对象.每个函数都是Function类型的实例,而且都与其他引用类型一样具有属性和方法.由于函数是对象,因此 ...