在一个项目中,样式是必不可少的一部分,而对于一个完整的项目来说是有个基准色调的。在项目需求变化不大的情况下,可以直接在css中写这些颜色值之类的东西。但是如果遇到一个朝令夕改的领导或者甲方,那会变得相当惨。

因此,在项目中使用预编译语言就显得很有效率,且简单。目前项目中就使用 scss 预编译语言。

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

  1. 文件扩展名不同,Sass 是以“.sass”后缀为扩展名,而 SCSS 是以“.scss”后缀为扩展名
  2. 语法书写方式不同,Sass 是以严格的缩进式语法规则来书写,不带大括号({})和分号(;),而 SCSS 的语法书写和我们的 CSS 语法书写方式非常类似。  这是中文官网

1、变量

我们可以把基准色调 设置成变量,或者一些常用到的颜色。比如:

 $bg_color: #ededed; // 背景色
$text_color: #333; // 文字颜色
$margin_bottom: 40upx; // 各个条目的下边距

2、使用变量

.content {
background-color: $bg_color;
flex-direction: column;
color: $text_color;
}

当基准色调改变,或者整体样式变化时,就不用一个一个去找,直接改变,变量的值,之后再重新编译就可以了。

3、嵌套规则

原来写法:

.content {
background-color: #ededed;
flex-direction: column;
} .content .list {
width: 400upx;
color: #ff0;
} .content .list image {
width: 60upx;
height: 60upx;
}

scss 嵌套规则写法:

.content {
background-color: $bg_color;
flex-direction: column; .list {
width: 400upx;
color: #ff0; image {
width: 60upx;
height: 60upx;
}
}
}

4、父选择器的标识符 &

可能主要是用于一些 伪类 选择器。看例子:

.content {
background-color: $bg_color;
flex-direction: column; .list { &:hover {
background-color: #ff0;
color: #fff;
} }
}

编译之后:

.content {
background-color: #ededed;
flex-direction: column;
} .content .list:hover {
background-color: #ff0;
color: #fff;
}
另一个例子:
.content {
background-color: $bg_color;
flex-direction: column; .list { a &:hover {
background-color: #ff0;
color: #fff;
} }
}

编译后:

.content {
background-color: #ededed;
flex-direction: column;
} a .content .list:hover {
background-color: #ff0;
color: #fff;
}

由此可以看出 & 代表的是父级的整体选择器。

5、群组选择器的嵌套,直接看代码

.content {
background-color: $bg_color;
flex-direction: column; .list { .name, .age, .sex {
margin-bottom: 40upx;
} }
}

编译后:

.content {
background-color: #ededed;
flex-direction: column;
} .content .list .name,
.content .list .age,
.content .list .sex {
margin-bottom: 40upx;
}

6、子组合选择器和同层组合选择器:>、+、~

.content {
background-color: $bg_color;
flex-direction: column; .list { ~ .name {
color: #ff0;
}
+ .age {
font-size: 40upx;
}
> .sex {
margin-bottom: 40upx;
} }
}

编译后:

.content {
background-color: #ededed;
flex-direction: column;
} .content .list~.name {
color: #ff0;
} .content .list+.age {
font-size: 40upx;
} .content .list>.sex {
margin-bottom: 40upx;
}

7、嵌套属性

.content {
background-color: $bg_color;
flex-direction: column; .list {
border: {
style: solid;
width: 2px;
color: #f00;
}
} .title {
border: 1px solid #4cd964 {
left: 2px;
bottom: 10px;
}
}
}

编译后:

.content {
background-color: #ededed;
flex-direction: column;
} .content .list {
border-style: solid;
border-width: 2px;
border-color: #f00;
} .content .title {
border: 1px solid #4cd964;
border-left: 2px;
border-bottom: 10px;
}

8、默认变量值 !default

$text_color: #333 !default;

这句的意思是:如果这个变量被声明赋值了,那就用它声明的值,否则就用这个默认值。

这种一般用来处理,引入的 scss 文件 是否会有你生命的变量,如果有,则用引入的,如果没有,则使用默认的 #333;有点儿类似于 js 声明变量时候的兜底行为。

9、规则内引入 scss 文件

  举例说明,有一个名为_blue-theme.scss的局部文件,内容如下:

aside {
background: blue;
color: white;
}

引入文件:

.blue-theme {@import "blue-theme"}

编译后:

.blue-theme {
aside {
background: blue;
color: #fff;
}
}

10、混合器 @mixin

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

使用:

notice {
background-color: green;
border: 2px solid #00aa00;
@include rounded-corners;
}

编译后:

.notice {
background-color: green;
border: 2px solid #00aa00;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
border-radius: 5px;
}

混合器中不仅可以包含属性,还可以包含规则。

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

使用:

ul.plain {
color: #444;
@include no-bullets;
}

编译后:

ul.plain {
color: #444;
list-style: none;
}
ul.plain li {
list-style-image: none;
list-style-type: none;
margin-left: 0px;
}

11、给混合器传参

@mixin link-colors($normal, $hover, $visited) {
color: $normal;
&:hover { color: $hover; }
&:visited { color: $visited; }
}

使用:

a {
@include link-colors(blue, red, green);
}

编译后:

a { color: blue; }
a:hover { color: red; }
a:visited { color: green; }

当你@include混合器时,有时候可能会很难区分每个参数是什么意思,参数之间是一个什么样的顺序。为了解决这个问题,scss允许通过语法$name: value的形式指定每个参数的值。这种形式的传参,参数顺序就不必再在乎了,只需要保证没有漏掉参数即可:

a {
@include link-colors(
$normal: blue,
$visited: green,
$hover: red
);
}

12、默认参数值

@mixin link-colors(
$normal,
$hover: $normal,
$visited: $normal
)
{
color: $normal;
&:hover { color: $hover; }
&:visited { color: $visited; }
}

13、使用选择器继承 来精简css,使用:@extend

.error {
border: 1px solid red;
background-color: #fdd;
}
.seriousError {
@extend .error;
border-width: 3px;
}

不只继承 .error 自己,和它相关的也继承

//.seriousError从.error继承样式
.error a{ //应用到.seriousError a
color: red;
font-weight: 100;
}
h1.error { //应用到hl.seriousError
font-size: 1.2rem;
}

了解了这些就算是简单入门了,至少已经让你的css省时省力好多了,想要深入研究就多看官网吧。后面学习到再做总结。

scss 入门基础的更多相关文章

  1. 【转】Gulp入门基础教程

    Gulp入门基础教程 原文在此 前言最近流行前端构建工具,苦于之前使用Grunt,代码很难阅读,现在出了Gulp, 真是摆脱了痛苦.发现了一篇很好的Gulp英文教程,整理翻译给大家看看. 为什么使用G ...

  2. mybatis入门基础(二)----原始dao的开发和mapper代理开发

    承接上一篇 mybatis入门基础(一) 看过上一篇的朋友,肯定可以看出,里面的MybatisService中存在大量的重复代码,看起来不是很清楚,但第一次那样写,是为了解mybatis的执行步骤,先 ...

  3. 01shell入门基础

    01shell入门基础 为什么学习和使用shell编程 shell是一种脚本语言,脚本语言是相对于编译语言而言的.脚本语言不需要编译,由解释器读取程序并且执行其中的语句,而编译语言需要编译成可执行代码 ...

  4. Markdown入门基础

    // Markdown入门基础 最近准备开始强迫自己写博文,以治疗严重的拖延症,再不治疗就“病入骨髓,司命之所属,无奈何”了啊.正所谓“工欲善其事,必先利其器”,于是乎在写博文前,博主特地研究了下博文 ...

  5. JavaScript入门基础

    JavaScript基本语法 1.运算符 运算符就是完成操作的一系列符号,它有七类: 赋值运算符(=,+=,-=,*=,/=,%=,<<=,>>=,|=,&=).算术运 ...

  6. C++ STL编程轻松入门基础

    C++ STL编程轻松入门基础 1 初识STL:解答一些疑问 1.1 一个最关心的问题:什么是STL 1.2 追根溯源:STL的历史 1.3 千丝万缕的联系 1.4 STL的不同实现版本 2 牛刀小试 ...

  7. HTML入门基础教程相关知识

    HTML入门基础教程 html是什么,什么是html通俗解答: html是hypertext markup language的缩写,即超文本标记语言.html是用于创建可从一个平台移植到另一平台的超文 ...

  8. Linux shell入门基础(六)

    六.Shell脚本编程详解 将上述五部分的内容,串联起来,增加对Shell的了解 01.shell脚本 shell: # #perl #python #php #jsp 不同的脚本执行不同的文本,执行 ...

  9. Linux shell入门基础(一)

    Linux shell入门基础(一): 01.增加删除用户: #useradd byf   userdel byf(主目录未删除)  userdel -r byf   该用户的属性:usermod 用 ...

随机推荐

  1. 十二、深入理解Java内存模型

    深入理解Java内存模型 [1]CPU和缓存的一致性 ​ 我们应该都知道,计算机在执行程序的时候,每条指令都是在CPU中执行的,而执行的时候,又免不了要和数据打交道.而计算机上面的数据,是存放在主存当 ...

  2. 【题解】Dvoniz [COCI2011]

    [题解]Dvoniz [COCI2011] 没有传送门,只有提供了数据的官网. [题目描述] 对于一个长度为 \(2*K\) 的序列,如果它的前 \(K\) 个元素之和小于等于 \(S\) 且后 \( ...

  3. 常用的排列、组合、阶乘函数 MATLAB

    1.求n的阶乘,方法如下:a.factorial(n)b.gamma(n+1)c.v='n!'; vpa(v) 2.求组合(数),方法如下:a.combntns(x,m)    列举出从n个元素中取出 ...

  4. IDEA创建xml文件

    今天在用IDEA写项目的时候发现,创建xml文件只能通过File手动输入去创建,但在我看的一个学习视频上可以直接创建xml文件,好奇之下研究了一下,作此篇,希望能对需要的朋友有所帮助. 废话就不多说了 ...

  5. 【RT-Thread笔记】IO设备模型及GPIO设备

    RTT内核对象--设备 RT-Thread有多种内核对象,其中设备device就是其中一种. 内核继承关系图如下: 设备继承关系图如下: device对象对应的结构体如下: 其中,设备类型type有如 ...

  6. 使用T4模板同时生成多个类文件

    代码: <#@ template language="C#" debug="false" hostspecific="true"#&g ...

  7. 【设计模式】Factory

    前言 这篇博客将包括两种设计模式,一种是工厂模式,一种是抽象工厂模式.不管是哪一种设计模式,本质上在解决的问题是对象创建的问题.工厂,可以是简简单单的一个函数,也可以是一个有具体实现的类,也可以是一个 ...

  8. iOS中Category和Extension 原理详解

    (一)Category .什么是Category? category是Objective-C .0之后添加的语言特性,别人口中的分类.类别其实都是指的category.category的主要作用是为已 ...

  9. flink 批量梯度下降算法线性回归参数求解(Linear Regression with BGD(batch gradient descent) )

    1.线性回归 假设线性函数如下: 假设我们有10个样本x1,y1),(x2,y2).....(x10,y10),求解目标就是根据多个样本求解theta0和theta1的最优值. 什么样的θ最好的呢?最 ...

  10. 常用.gitignore

    android开发 关键词:java,android,androidstudio 地址:https://www.gitignore.io/api/java,android,androidstudio ...