Scss - 简单笔记
原文链接:scss 教程
手头上疯狂在用 scss,虽然可以在里面写原生的 css, 但是为了保持风格的一致性,还是滚去看了看 scss 文档。
一、变量
变量的引入是 scss 的一个核心特性,变量用来存储需要在CSS中复用的信息,例如颜色和字体。SASS通过$符号去声明一个变量。
$font-stack: Helvetica, sans-serif;
$primary-color: #333; body {
font: 100% $font-stack;
color: $primary-color;
}
编译后,变量的值会替换所有他们的位置。
二、嵌套
SASS允许开发人员以嵌套的方式使用CSS,但是过度的使用嵌套会让产生的CSS难以维护,因此要慎用,下面的例子表达了一个典型的网站导航样式:
nav {
ul {
margin: 0;
padding: 0;
list-style: none;
} li { display: inline-block; } a {
display: block;
padding: 6px 12px;
text-decoration: none;
}
}
编译后:
nav ul {
margin: 0;
padding: 0;
list-style: none; }
nav li {
display: inline-block; }
nav a {
display: block;
padding: 6px 12px;
text-decoration: none; }
三、引入
SASS能够将代码分割为多个片段,并以underscore风格的下划线作为其命名前缀(_partial.scss),SASS会通过这些下划线来辨别哪些文件是SASS片段,并且不让片段内容直接生成为CSS文件,从而只是在使用@import指令的位置被导入。
CSS原生的@import会通过额外的HTTP请求获取引入的样式片段,而SASS的@import则会直接将这些引入的片段合并至当前CSS文件,并且不会产生新的HTTP请求。
// _reset.scss html, body, ul, ol {
margin: 0;
padding: 0;
}
// base.scss @import '../xx/xx/_reset';
body {
font: 100% Helvetica, sans-serif;
background-color: #efefef;
}
编译后:
html, body, ul, ol {
margin: 0;
padding: 0; } body {
font: 100% Helvetica, sans-serif;
background-color: #efefef; }
四、混合
混合(Mixin)用来分组那些需要在页面中复用的CSS声明,开发人员可以通过向Mixin传递变量参数来让代码更加灵活,该特性在添加浏览器兼容性前缀的时候非常有用,SASS目前使用@mixin name指令来进行混合操作。
// 定义
@mixin border-radius($radius) {
border-radius: $radius;
-ms-border-radius: $radius;
-moz-border-radius: $radius;
-webkit-border-radius: $radius;
}; // 在需要的地方事由 @include 来引入并传值
#father {
@include border-radius(10px);
width: 60%;
margin: 0 auto;
}
上面的代码建立了一个名为 border-radius 的 Mixin,并传递了一个变量 $radius 作为参数,然后在后续代码中通过 @include border-radius(10px) 使用该Mixin,最终编译的结果如下:
.box {
border-radius: 10px;
-ms-border-radius: 10px;
-moz-border-radius: 10px;
-webkit-border-radius: 10px;
}
五、继承
继承是SASS中非常重要的一个特性,可以通过@extend指令在选择器之间复用CSS属性,并且不会产生冗余的代码,下面例子将会通过SASS提供的继承机制建立一系列样式:
// 这段代码不会被输出到最终生成的CSS文件,因为它没有被任何代码所继承。
%other-styles {
display: flex;
flex-wrap: wrap;
} // 下面代码会正常输出到生成的CSS文件,因为它被其接下来的代码所继承。
%message-common {
border: 1px solid #ccc;
padding: 10px;
color: #333;
} .message {
@extend %message-common;
} .success {
@extend %message-common;
border-color: green;
} .error {
@extend %message-common;
border-color: red;
} .warning {
@extend %message-common;
border-color: yellow;
}
上面代码将.message中的CSS属性应用到了.success、.error、.warning上面,魔法将会发生在最终生成的CSS当中。这种方式能够避免在HTML元素上书写多个class选择器,最终生成的CSS样式是下面这样的:
.message, .success, .error, .warning {
border: 1px solid #ccc;
padding: 10px;
color: #333;
} .success {
border-color: green;
} .error {
border-color: red;
} .warning {
border-color: yellow;
}
五、操作符
SASS提供了标准的算术运算符,例如+、-、*、/、%。在接下来的例子里,我们尝试在aside和article选择器当中对宽度进行简单的计算。
.container { width: 100%; } article[role="main"] {
float: left;
width: 600px / 960px * 100%;
} aside[role="complementary"] {
float: right;
width: 300px / 960px * 100%;
}
上面代码最终编译后的样子是:
.container {
width: 100%;
} article[role="main"] {
float: left;
width: 62.5%;
} aside[role="complementary"] {
float: right;
width: 31.25%;
}
六、引用父级选择器"&"
Scss使用"&"关键字在CSS规则中引用父级选择器,例如在嵌套使用伪类选择器的场景下:
/*===== SCSS =====*/
a {
font-weight: bold;
text-decoration: none;
&:hover { text-decoration: underline; }
body.firefox & { font-weight: normal; }
} /*===== CSS =====*/
a {
font-weight: bold;
text-decoration: none;
} a:hover {
text-decoration: underline;
} body.firefox a {
font-weight: normal;
}
无论CSS规则嵌套的深度怎样,关键字"&"都会使用父级选择器级联替换全部其出现的位置:
/*===== SCSS =====*/
#main {
color: black;
a {
font-weight: bold;
&:hover { color: red; }
}
} /*===== CSS =====*/
#main {
color: black;
} #main a {
font-weight: bold;
}
#main a:hover {
color: red;
}
"&"必须出现在复合选择器开头的位置,后面再连接自定义的后缀,例如:
/*===== SCSS =====*/
#main {
color: black;
&-sidebar { border: 1px solid; }
} /*===== CSS =====*/
#main {
color: black;
} #main-sidebar {
border: 1px solid;
}
Scss - 简单笔记的更多相关文章
- mybatis-config.xml简单笔记
mybatis-config.xml简单笔记 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE ...
- applicationContext.xml简单笔记
applicationContext.xml简单笔记 <?xml version="1.0" encoding="UTF-8"?> <bean ...
- Python学习笔记2-flask-sqlalchemy 简单笔记
flask-sqlalchemy 简单笔记 字数 阅读 评论 喜欢 flask-sqlalchemy SQLAlchemy已经成为了python世界里面orm的标准,flask是一个轻巧的web框架, ...
- Android_简单笔记一
入门学习Android的简单笔记(已经安装好了开发环境ADT) 一.关于 AndroidManifest.xml文件 1. android:icon和android:label定义了应用程序安装后显示 ...
- 【Android】Fragment的简单笔记
被虐了,做某公司笔试时,发现自己连个Fragment的生命周期都写不详细.平时敲代码,有开发工具的便利,有网上各大神的文章,就算忘了也很容易的可以查到,但当要自己不借助外界,却发现自己似乎对该知识点并 ...
- Innodb 锁 (简单笔记)
看过很多innodb锁的文章,已经明白的就不写了,简单做个笔记 Innodb 锁的兼容性: 1.意向锁和意向锁之间都是兼容的 2.X(排他锁)与任何锁都是不兼容的 3.排他意向锁 IX 于S锁是不 ...
- 前端之Sass/Scss实战笔记
简介 Sass 有两种语法规则(syntaxes),目前新的语法规则(从 Sass 3开始)被称为 “SCSS”( 时髦的css(Sassy CSS)),它是css3语法的的拓展级,就是说每一个语法正 ...
- 使用Git简单笔记
这里只是作为简单的笔记整理,第一次使用的推荐先看一下廖大的教程,内容很多很细,可以边看边练.看不懂的地方先记着.争取七七八八看下来. ================================= ...
- awk命令分析日志的简单笔记
awk是一个文本分析工具,可以用来进行流量日志分析 之前无意中看到了这个命令,简单记一下笔记 ,在打线下的时候可能会有用 awk有3个不同版本: awk.nawk和gawk,未作特别说明,一般指gaw ...
随机推荐
- Unity热更新学习(一) —— AssetBundle 打包和加载
理论不多说,网上,官方文档都有. 这里有一篇介绍很全面的文章:https://www.cnblogs.com/ybgame/p/3973177.html 示例和注意点记录一下,用到时以便查阅. 一. ...
- 在ASP.NET Core MVC中子类Controller拦截器要先于父类Controller拦截器执行
我们知道在ASP.NET Core MVC中Controller上的Filter拦截器是有执行顺序的,那么如果我们在有继承关系的两个Controller类上,声明同一种类型的Filter拦截器,那么是 ...
- 初窥RabbitMQ消息中间及SpringBoot整合
一:RabbitMQ简介 RabbitMQ介绍 RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用. 消息中间件最主要的作用是解耦,中间件最标准 ...
- NuGet的本地服务器安装与Package的发布(呕吐)
主要的步骤是按照下面的例子来做的: NuGet学习笔记(1)——初识NuGet及快速安装使用 NuGet学习笔记(2)——使用图形化界面打包自己的类库 NuGet学习笔记(3)——搭建属于自己的NuG ...
- 比官方文档更易懂的Vue.js教程!包你学会!
欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由蔡述雄发表于云+社区专栏 蔡述雄,现腾讯用户体验设计部QQ空间高级UI工程师.智图图片优化系统首席工程师,曾参与<众妙之门> ...
- 04 Docker/基础设施 - DevOps之路
04 Docker/基础设施 - DevOps之路 文章Github地址,欢迎start:https://github.com/li-keli/DevOps-WiKi Docker是一个开源的引擎,可 ...
- WCF系列教程之消息交换模式之请求与答复模式(Request/Reply)
1.使用WCF请求与答复模式须知 (1).客户端调用WCF服务端需要等待服务端的返回,即使返回类型是void (2).相比Duplex来讲,这种模式强调的是客户端的被动接受,也就是说客户端接受到响应后 ...
- flask请求流程详解
先看一个流程图: 1.当一个请求进入的时候,Flask框架首先会实例化一个Request Context,封装了请求信息,保存在Request中.生成请求上下文后,Flask框架会将请求上下文推入到_ ...
- tornado设置cookie并加密
最近看看tornado,遇到了sso的东西,了解下如何设置cookie 1.基本cookie set_cookie 方法在用户的浏览中设置 cookie: get_cookie 方法在用户的浏览中获取 ...
- 如何优化Docker储存
大家在使用Docker的过程中,有没有想过,Docker在本地存储镜像时把文件存储在哪里了呢?有没有对文件的总大小做一定的限制呢?能不能调整本地存储的位置及总限制大小呢?今天,我们就从这些问题入手,来 ...