Sass笔记(CSS 的预编译语言)

在线转换:https://www.sass.hk/css2sass/
Sass 是一种 CSS 的预编译语言。它提供了 变量(variables)、嵌套(nested rules)、 混合(mixins)、 函数(functions)等功能。

SCSS文件的后缀:.scss
SASS文件的后缀:.sass

在项目中还是引用“.css”文件,Sass 只不过是做为一个预处理工具:用SASS的格式写好样式文件,编译成为CSS文件,在项目中调用。

一、Sass的基本特性-基础
1.1变量

(1.1.1)示例(全局变量–变量定义在最外层):
$font-stack: Helvetica, sans-serif;
$primary-color: #333;
body {
font: 100% $font-stack; //font: 100% Helvetica, sans-serif;
color: $primary-color; //color: #333;
}
(1.1.2)示例(局部变量–变量定义在样式名中):
em {
$color: red;//定义局部变量
a {
color: $color;//调用局部变量
}
}
(1.1.3)示例(全局变量–变量名:变量值 !global)
color:red!global;则表示在块内块外都可以使用这个变量。(1.1.4)变量默认值默认变量:color:red ! global; 则表示在块内块外都可以使用这个变量。 (1.1.4)变量默认值 默认变量:color:red!global;使1.1.4baseLineHeight:1.5 !default;
覆盖默认变量:
只需要在默认变量之前重新声明下变量即可。
即:$baseLineHeight: 2;
baseLineHeight:1.5!default;调用baseLineHeight: 1.5 !default; 调用baseLineHeight:1.5!default;baseLineHeight时,当变量变量已经被赋值,不会再被重新赋值;如果变量还没有被赋值,则会被赋予新的值。
例子:
$baseLineHeight: 2;
$baseLineHeight: 1.5 !default;
调用时变量值为2。
例子:
$baseLineHeight: null;
$baseLineHeight: 1.5 !default;
调用时变量值为1.5。

1.2嵌套
(1.2.1选择器嵌套)
示例1:
#main p {
width: 100%;
.redbox {
background-color: #ff0000;
}
}
编译为:
#main p {
width: 100%; }
#main p .redbox {
background-color: #ff0000;}

(1.2.2伪类嵌套—引用父选择器)
示例1:
a {
font-weight: bold;
&:hover { text-decoration: underline; }
body.firefox & { font-weight: normal; }
}
编译为:
a {
font-weight: bold;}
a:hover {
text-decoration: underline; }
body.firefox a {font-weight: normal; }
注意:& 必须作为选择器的第一个字符,其后可以跟随后缀生成复合的选择器。
示例2:
#main {
color: black;
&-sidebar { border: 1px solid; }
}
编译为:
#main {
color: black; }
#main-sidebar {
border: 1px solid; }
示例3:
.clearfix{
&:before,
&:after {
content:"";
display: table;
}
编译为:
clearfix:before, .clearfix:after {
content: “”;
display: table;
}

(1.2.3属性嵌套)
.funky {
font: {
family: fantasy;
size: 30em;
}
}
编译为:
.funky {
font-family: fantasy;
font-size: 30em; }

1.3混合宏
(1.3.1 声明混合宏)
示例1:简单的混合宏
声明 名称 参数
@mixin border-radius(KaTeX parse error: Expected '}', got 'EOF' at end of input: radius){ //(radius:5px)传默认值
-webkit-border-radius: $radius;
border-radius: KaTeX parse error: Expected 'EOF', got '}' at position 9: radius; }̲ 示例2:复杂的混合宏 @mi…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);
}
}
(1.3.2 调用混合宏)
(其他样式中调用混合宏)
无参或者含有默认参数时的调用:
button {
@include border-radius; //@include 名称
}
传参时的调用:
.box {
@include border-radius(3px); //调用并传参
}
(混合宏内调用混合宏)
@mixin compound {
@include header-text;
}
@mixin 可以用 = 表示,而 @include 可以用 + 表示

1.4扩展/继承
示例1:(普通样式延伸)
.btn {
border: 1px solid #ccc;
padding: 6px 10px;
}
.btn-primary {
background-color: #f36;
@extend .btn;
}
编译为:CSS
.btn, .btn-primary {
border: 1px solid #ccc;
padding: 6px 10px;
}
.btn-primary {
background-color: #f36;
}
示例2:(继续延伸)
当一个选择器延伸给第二个后,可以继续将第二个选择器延伸给第三个。
示例3:(选择器列)
如 .foo .bar 或 .foo + .bar不可以延伸给其他元素,但是,却可以将其他元素延伸给选择器列。
#fake-links .link { //选择器列
@extend a;}
a {
color: blue;
&:hover {
text-decoration: underline;}
}

编译为:
a, #fake-links .link {
color: blue; }
a:hover, #fake-links .link:hover {
text-decoration: underline; }
示例4:(在 @media (或者其他 CSS 指令)中使用 @extend,必须延伸给相同指令层中的选择器)

@media print {
.error {
border: 1px #f00;
background-color: #fdd;
}
.seriousError {
@extend .error;
border-width: 3px;
}
}

1.5占位符选择器 %foo(@extend-Only 选择器)
%mt5 {
margin-top: 5px;
}
注意:这段代码没有被 @extend 调用,他并没有产生任何代码块,只是静静的躺在你的某个 SCSS 文件中。
%mt5 {
margin-top: 5px;
}
.btn {
@extend %mt5;
}
编译为:CSS
.btn {
margin-top: 5px;
}
注意:调用混合宏时,不能智能的将相同的样式代码块合并在一起。可以传参数
使用继承/扩展时,可以将相同的样式代码块合并在一起。 不能传参数;不调用也编译
使用占位符时,可以将相同的样式代码块合并在一起。 和继承基本相同;不调用不编译

1.6插值语句#{}(通过 #{} 插值语句可以在选择器或属性名中使用变量)
示例1:
@mixin set-value($side, $value) {
@each $prop in KaTeX parse error: Expected '}', got '#' at position 22: …ties { #̲{prop}-#{$side}: $value;
}
}
注意:混合宏(@mixin)不能用#{}插值。
@extend(继承、占位符%) 中可以使用插值。

1.7注释
(1.7.1)单行注释//
(1.7.2)多行注释/注释的内容/
注意:多行注释方式会在编译出来的 CSS 显示,单行注释方式在编译出来的 CSS 中不会显示。
(1.7.3)多行注释中输出变量值:
KaTeX parse error: Expected 'EOF', got '#' at position 75: …mework version #̲{version}. */

1.8数据类型
数字: 如,1、 2、 13、 10px;
字符串:有引号字符串或无引号字符串,如,“foo”、 ‘bar’、 baz;
颜色:如,blue、 #04a3f9、 rgba(255,0,0,0.5);
布尔型:如,true、 false;
空值:如,null;
值列表:用空格或者逗号分开,如,1.5em 1em 0 2em 、 Helvetica, Arial, sans-serif。

(1.8.1)字符串
有引号字符串 (quoted strings),如 “Lucida Grande” 、‘http://sass-lang.com’;
无引号字符串 (unquoted strings),如 sans-serifbold。
注意:使用 #{ }插值语句 (interpolation) 时,有引号字符串将被编译为无引号字符串。

(1.8.2)列表(指 Sass 如何处理 CSS 中:margin: 10px 15px 0 0或font-face: Helvetica, Arial, sans-serif)
sass列表函数:
nth函数(nth function) 可以直接访问值列表中的某一项;
join函数(join function) 可以将多个值列表连结在一起;
append函数(append function) 可以在值列表中添加值;
@each规则(@each rule) 则能够给值列表中的每个项目添加样式。
注意1:如果数组中包含空数组或空值,编译时将被清除,比如 1px 2px () 3px 或 1px 2px null 3px。
注意2:例如 (1,) 表示只包含 1 的数组,而 (1 2 3,) 表示包含 1 2 3 这个以空格分隔的数组的数组。
(1.8.3)Maps
键值对的集合:如 (key1: value1, key2: value2)
(1)map-get函数用于查找键值;
(2)map-merge函数用于map和新加的键值融合;
(3)@each命令可添加样式到一个map中的每个键值对。
注意: (key1: value1, key2: value2)会被List函数转换为 key1 value1, key2 value2 ,反之则不能。

二、Sass的基本特性-运算
2.1加法
(2.1.1 变量加法)
$sidebar-width: 220px;
$content-width: 720px;
.container {
width: $sidebar-width + $content-width;
margin: 0 auto;
}
(2.1.2 属性加法)(需要注意单位)
.box {
width: 20px + 8in; //in(英尺)
}

2.2减法
减法和加法运算类似,同样需要注意单位。

2.3乘法
.box {
width: 10px * 2;
}
注意:只需要为一个数值提供单位即可。且在运算中有不同类型的单位时,也将会报错。

2.4除法
(2.4.1)
.box {
width: (100px / 2);
}
注意:需要给运算的外面添加一个小括号( )。
(2.4.1)
.box {
width: 100px / 2 + 2in;
}
注意:“/”符号在已有的数学表达式中时,也会被认作除法符号。
(2.4.1)
$width: 1000px;
$nums: 10;
.item {
width: $width / 10; //width: $width / $nums;
}
注意:当用变量进行除法运算时,“/”符号也会自动被识别成除法。
综合上述,”/ ”符号被当作除法运算符时有以下几种情况:
• (2.4.1) 如果数值被圆括号包围。
• (2.4.2) 如果数值是另一个数学表达式的一部分。
• (2.4.3)如果数值或它的任意部分是存储在一个变量中或是函数的返回值。
注意:如果两个值带有相同的单位值时,除法运算之后会得到一个不带单位的数值。

2.5颜色运算
(2.5.1 普通颜色值运算)
p {
color: #010203 + #040506; //color: #010203 * 2;
}
编译为:
p {
color: #050709;
}
(2.5.2 颜色值包含 alpha channel(rgba 或 hsla 两种颜色值))
p {
color: rgba(255, 0, 0, 0.75) + rgba(0, 255, 0, 0.75);
}
编译为:
p {
color: rgba(255, 255, 0, 0.75); }
注意:必须拥有相等的 alpha 值才能进行运算,因为算术运算不会作用于 alpha 值。
(2.5.3 颜色值通过opacify 或 transparentize来改变透明度alpha)
KaTeX parse error: Expected '}', got 'EOF' at end of input: …color: opacify(translucent-red, 0.3);
background-color: transparentize($translucent-red, 0.25);
}
编译为:
p {
color: rgba(255, 0, 0, 0.8);
background-color: rgba(255, 0, 0, 0.25); }
(2.5.4 颜色值格式修改–IE滤镜)
$translucent-red: rgba(255, 0, 0, 0.5);
KaTeX parse error: Expected 'EOF', got '#' at position 8: green: #̲00ff00; div { …green)}’, endColorstr=’#{ie-hex-str($translucent-red)}’);
}
编译为:
div {
filter: progid:DXImageTransform.Microsoft.gradient(enabled=‘false’, startColorstr=#FF00FF00, endColorstr=#80FF0000);
}

2.6字符运算
(2.6.1 字符串连接)
KaTeX parse error: Expected '}', got '#' at position 61: …{ content: " #̲{content} "; //content: " Hello Sass! ";
}
(2.6.2 直接通过 + 把字符连接)
div {
cursor: e + -resize; //cursor: e-resize;
}
(2.6.3 有引号字符 与 无引号字符 相连接)
p:before {
content: “Foo " + Bar; //有引号字符 + 无引号字符 = 有引号字符串
font-family: sans- + “serif”; //无引号字符 + 有引号字符 = 无引号字符串
}
编译为:
p:before {
content: “Foo Bar”;
font-family: sans-serif; }
(2.6.4 在有引号的文本字符串中使用 #{} 插值语句可以添加动态的值)
KaTeX parse error: Expected '}', got '#' at position 65: …ontent: "I ate #̲{value} pies!”; //content: “I ate 7px pies!”;
}

2.7关系运算
<, >, <=, >= 也可用于数字运算,相等运算 ==, != 可用于所有数据类型

2.8 布尔运算
and、or、 not 运算

2.9数组运算
数组不支持任何运算方式。

三、函数
(3.1 hsl)
p {
color: hsl(0, 100%, 50%);
}

编译为
p {
color: #ff0000; }
(3.2 自定义函数)
grid−width:40px;@functiongrid−width(grid-width: 40px; @function grid-width(gridwidth:40px;@functiongridwidth(n) {
@return $n * $grid-width;
}
#sidebar { width: grid-width(5); }

编译为
#sidebar {
width: 200px; }

四、@-Rules 与指令
(4.1 @import:允许其导入 SCSS 或 Sass 文件)
示例:(导入单个文件)
@import “foo.scss”;


@import “foo”;
示例:(同时导入多个文件)
@import “rounded-corners”, “text-shadow”;
示例:(导入文件时用#{ } 插值语句)
KaTeX parse error: Expected '}', got 'EOF' at end of input: …/css?family=\#{family}");
注意:
在以下情况下,@import 仅作为普通的 CSS 语句,不会导入任何 Sass 文件。
文件拓展名是 .css;
文件名以 http:// 开头;
文件名是 url();
@import 包含 media queries
如果需要导入 SCSS 或者 Sass 文件,但又不希望将其编译为 CSS,只需要在文件名前添加下划线,这样会告诉 Sass 不要编译这些文件,但导入语句中却不需要添加下划线。
例如,将文件命名为 _colors.scss,便不会编译 _colours.css 文件。
@import “colors”;

上面的例子,导入的其实是 _colors.scss 文件

(4.2 @media)
Sass 中 @media 指令与 CSS 中用法一样,只是增加了一点额外的功能:允许其在 CSS 规则中嵌套。
示例1:(样式中嵌套@media)
.sidebar {
width: 300px;
@media screen and (orientation: landscape) {
width: 500px;
}
}

编译为:
.sidebar {
width: 300px; }
@media screen and (orientation: landscape) {
.sidebar {
width: 500px; } }
示例2:(@media嵌套@media)
@media screen {
.sidebar {
@media (orientation: landscape) {
width: 500px;
}
}
}

编译为
@media screen and (orientation: landscape) {
.sidebar {
width: 500px; } }
注意:@media 甚至可以使用 SassScript(比如变量,函数,以及运算符)代替条件的名称或者值。

(4.3 @extend)
1.4扩展/继承—有说明

(4.4 @at-root)
.parent {

@at-root {
.child1 { … }
.child2 { … }
}
.step-child { … }
}

编译为:
.parent { … }
.child1 { … }
.child2 { … }
.parent .step-child { … }
在media之外/之内: @at-root (without: …) and @at-root (with: …)

(4.5 @debug)
@debug 10em + 12em;

编译为
Line 1 DEBUG: 22em

(4.6 @warn)
@warn “Assuming #{$x} to be in pixels”;

(4.7 @error)
@error “KaTeX parse error: Expected 'EOF', got '#' at position 28: … unitless, was #̲{x}.”;

五、控制指令
(5.1 if())

(5.2 @if)
当 @if 的表达式返回值不是 false 或者 null 时,条件成立,输出 {} 内的代码:
p {
@if 1 + 1 == 2 { border: 1px solid; } //@if 5 < 3 或 @if null
}
注意:@if 声明后面可以跟多个 @else if 声明,或者一个 @else 声明。

(5.3 @for)
两种格式:
@for $var from through //左闭右闭区间
@for $var from to //左闭右开区间
区别:当使用 through 时,条件范围包含 与 的值,而使用 to 时条件范围只包含 的值不包含 的值。
注意: 和 必须是整数值。
示例:
@for KaTeX parse error: Expected '}', got '#' at position 30: …gh 3 { .item-#̲{i} { width: 2em * $i; }
}

(5.4 @each)
格式: $var in , 是一连串的值,也就是值列表。
示例:(一个变量----一个值列表)
@each KaTeX parse error: Expected '}', got '#' at position 50: …alamander { .#̲{animal}-icon {
background-image: url(’/images/#{$animal}.png’);
}
}
示例:(多个变量----多个值列表)
@each $animal, $color, KaTeX parse error: Expected '}', got '#' at position 156: …te, move) { .#̲{animal}-icon {
background-image: url(’/images/#{$animal}.png’);
border: 2px solid $color;
cursor: $cursor;
}
}
示例3:(多个变量----对象)
@each $header, KaTeX parse error: Expected '}', got '#' at position 45: …h3: 1.2em) { #̲{header} {
font-size: $size;
}
}

(5.5 @while)
示例:
$i: 6;
@while KaTeX parse error: Expected '}', got '#' at position 17: … > 0 { .item-#̲{i} { width: 2em * $i; }
$i: $i - 2;
}

(5.6 @content)
示例:(向混合样式中导入内容)
@mixin apply-to-ie6-only {

  • html {
    @content; //导入的地方
    }
    }
    @include apply-to-ie6-only {
    #logo { //导入的内容
    background-image: url(/logo.gif);
    }
    }

编译为

  • html #logo {
    background-image: url(/logo.gif);
    }

(输出方式:)
嵌套输出方式编译:sass --watch test.scss:test.css --style nested
展开输出方式编译:sass --watch test.scss:test.css --style expanded
紧凑输出方式编译:sass --watch test.scss:test.css --style compact //样式都在一行
压缩输出方式编译:sass --watch test.scss:test.css --style compressed //样式压缩

将.scss文件转化的css代码并保存到一个新文件中:
sass app.scss app.css

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/354485.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mysql 主从同步-读写分离

主从同步与读写分离测试 一、 实验环境(主从同步) Master centos 7.3 192.168.138.13 Slave centos 7.3 192.168.138.14 二、在master操作 安装并配置文件[rootlocalhost ~]# yum install mariadb-server …

coherence安装_Oracle Coherence:分布式数据管理

coherence安装本文介绍如何使用Oracle Coherence提供分布式&#xff08;分区&#xff09;数据管理。 在下面的示例应用程序中&#xff0c;创建了一个名为OTV的新集群&#xff0c;并且在该集群的两个成员之间分配了一个名为user-map的缓存对象。 二手技术&#xff1a; JDK 1.6.…

AtomicReference 原子引用

原创 2016年03月04日 13:35:2076381.简介 赋值操作不是线程安全的。若想不用锁来实现&#xff0c;可以用AtomicReference<V>这个类&#xff0c;实现对象引用的原子更新。 使用场景&#xff1a;一个线程使用student对象&#xff0c;另一个线程负责定时读表&#xff0c;更新…

MongoDB基础使用

5.MongoDB基础使用 5.1.常用的命令&#xff08;重点&#xff09; > Help 查看帮助 显示数据库列表 > show dbs 创建数据库 > use dbname 如果数据库不存在&#xff0c;则创建数据库dbname&#xff0c;否则切换到指定数据库dbname。创建的数据库并不在数据库的列表中…

使用一些可选的将字符串配置属性转换为其他类型

有一天&#xff0c;您遇到一些代码&#xff0c;并认为这很漂亮&#xff0c;为什么我没有想到呢&#xff1f; 因此&#xff0c;我的长期同事Mark Warner在使用方法引用处理从String进行转换的标准名称/值存储模式方面有一个不错的选择。 int size store.getProperty("cac…

AttributeError: module 're' has no attribute 'sub'

文件不能同名&#xff08;import re re.py)转载于:https://www.cnblogs.com/realmonkeykingsun/p/7992613.html

django-uwsgi配置

一、安装uwsgi uwsgi是一个应用服务器&#xff0c;非静态文件的网络请求就必须通过他完成&#xff0c;他也可以充当静态文件服务器&#xff0c;但不是它的强项。 注意&#xff1a;uwsgi必须安装在系统级别的Python环境中&#xff0c;不要安装到虚拟环境中。 uwsgi是使用pytho…

C++堆和栈详解(转)

一、预备知识—程序的内存分配 一个由C/C编译的程序占用的内存分为以下几个部分 1、栈区&#xff08;stack&#xff09;— 由编译器自动分配释放 &#xff0c;存放函数的参数值&#xff0c;局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区&#xf…

JavaFX技巧来节省内存! 属性和可观察物的阴影场

在 JavaFX的世界中&#xff0c; Properties API允许UI开发人员将值绑定到UI控件。 这种功能非常容易&#xff0c;但是当对象模型经常使用属性时&#xff0c;应用程序可能会很快耗尽内存。 我通常会编写两个单独的对象&#xff0c;例如pojo类和表示模型对象。 此技术通常在基于S…

nginx部署与小程序配置

nginx部署与小程序配置说明 1、安装nginx $ sudo apt-get update $ sudo apt-get install nginx2、配置https: 查看&#xff1a; https://help.aliyun.com/knowledge_detail/95491.html?spm5176.2020520154.cas.64.7dd7Quq8Quq8ap mkdir /opt/cert把证书上传到这个文件夹…

Maven实战:Pom.xml详解

什么是pom? pom作为项目对象模型。通过xml表示maven项目&#xff0c;使用pom.xml来实现。主要描述了项目&#xff1a;包括配置文件&#xff1b;开发者需要遵循的规则&#xff0c;缺陷管理系统&#xff0c;组织和licenses&#xff0c;项目的url&#xff0c;项目的依赖性&…

Liunx 命令大全

1.ifconfig 用于配置和显示Linux内核中网络接口的网络参数 2.type 用来显示指定命令的类型&#xff0c;判断给出的指令是内部 令还是外部指令 3.man Linux下的帮助指令&#xff0c;通过man指令可以查看Linux 中的指令帮助、配置文件帮助和编程帮助等信息 4.help 用于显示 shell…

如何在Hibernate Search 5.5.2 / Apache Lucene 5.4.x中处理停用词?

停用词&#xff0c;例如[“ a”&#xff0c;“ an”&#xff0c;“ and”&#xff0c;“ are”&#xff0c;“ as”&#xff0c;“ at”&#xff0c;“ be”&#xff0c;“ but”&#xff0c;“ by”&#xff0c;“ for”&#xff0c;“ if”&#xff0c;“在”&#xff0c;“成…

windows路径操作API函数

路径截断与合并函数 PathRemoveArgs 去除路径的参数 PathRemoveBackslash 去除路径最后的反斜杠“\” PathAddBackslash 在路径最后加上反斜杠“\” PathRemoveBlanks 去除路径前后的空格 PathAddExtension 在文件路径后面加上扩展名 PathRemoveExtensio…

docker安装问题

1、卸载docker重装 将所有含docker的文件找出来 find / -name ‘docker’ 或cd到根目录后搜索&#xff1a; find -name ‘docker 删除搜索的文件或目录&#xff1a; rm -rf … 删除全部的docker有关文件命令 rm -rf $(find -name ‘docker’) 2、安装docker 安装依赖 su…

【BZOJ1814】Ural 1519 Formula 1 插头DP

【BZOJ1814】Ural 1519 Formula 1 题意&#xff1a;一个 m * n 的棋盘,有的格子存在障碍,求经过所有非障碍格子的哈密顿回路个数。(n,m<12) 题解&#xff1a;插头DP板子题&#xff0c;刷板子&#xff0c;附带题解链接。 如何存放状态呢&#xff1f;可以采用hash&#xff0c;…

docker-compose安装问题

&#xff08;一&#xff09;docker-compose安装超时 1、设置一个timeout pip install --default-timeout100 docker-compos2、下载到本地 docker_compose-1.27.0-py2.py3-none-any.whl首先去下载&#xff1a;https://pypi.org/project/docker-compose/#files 然后用xftp上传…

java更改包名称_更改Java包名称如何改变我的系统架构

java更改包名称即使只是少量更改角度&#xff0c;也可能对您如何使用系统产生深远影响。 假设您正在用Java编写Web应用程序。 在系统中&#xff0c;您处理订单&#xff0c;客户和产品。 作为一个Web应用程序&#xff0c;您的类包括诸如Controller&#xff0c;PersonRepository&…

linux系统界面光标不见了---木有了

直接在界面输入命令 echo -e “\033[?25l” 隐藏光标 echo -e “\033[?25h” 显示光标

Java----前端验证之验证码额实现

验证码是常用的登录验证方式之一,最大的作用就是保证安全,验证码的生成在java中实现的方式有很多种,比如后台生成传输到前端页面,在前台直接生成进行验证,下面写一个最简单实现验证码验证登录的例子. 生成验证码: 验证码验证逻辑: From表单登录: 没错,就这么的简单.在scripts生…