sass的多种用法
sass的多种用法
主要归纳总结sass的常见用法,作为个人笔记使用,部分知识点并不仔细讲解。具体可参考文档:sass官网
一、嵌套
.svg{
position: absolute;
left: 0;
bottom: 20px;
width: 100%;
path{
transition: all 500ms ease;
}
}
注意嵌套中常用的&
符号。
除了选择器的嵌套,还有属性的嵌套:
nav {
border: {
style: solid;
width: 1px;
color: #ccc;
}
}
nav {
border: 1px solid #ccc {
left: 0px;
right: 0px;
}
}
二、变量的使用
sass
使用$
符号来标识变量。
注意变量是有作用域的,与js变量作用域类似。
$highlight-color: #F90;
.selected {
border: 1px solid $highlight-color;
}
三、混合器@mixin
可以通过sass
的混合器实现大段样式的重用。(例如固定的样式:清楚浮动,文字超出使用省略号等,或者是网站统一的按钮样式等。)
比如清除浮动:
@mixin clearfix(){
&:after{
display: block;
content: "";
clear: both;
}
}
然后就可以在你的样式表中通过@include
来使用这个混合器.
.box{
@include clearfix;
}
1、混合器传参
当@include
混合器时,参数其实就是可以赋值给css
属性值的变量。
@mixin multi-text($width, $row) {
max-width: $width;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: $row;
-webkit-box-orient: vertical;
}
p{
@include multi-text(350px,2);
}
当使用@include混合器时,有时候可能会很难区分每个参数是什么意思,参数之间是一个什么样的顺序。为了解决这个问题,sass
允许通过语法$name: value
的形式指定每个参数的值。这种形式的传参,参数顺序就不必再在乎了,只需要保证没有漏掉参数即可。
p{
@include multi-text(
$width:350px,
$row:2
)
}
2、默认参数值
为了在@include
混合器时不必传入所有的参数,我们可以给参数指定一个默认值。参数默认值使用$name: default-value
的声明形式,默认值可以是任何有效的css
属性值,甚至是其他参数的引用。
@mixin btn($width:100px,$height:36px){
width: $width;
height: $height;
line-height: $height;
text-align: center;
border-radius: 8px;
cursor: pointer;
}
button-1{
@include btn;
}
button-2{
@include btn(120px,40px);
}
四、选择器继承
选择器继承是说一个选择器可以继承为另一个选择器定义的所有样式。这个通过@extend
语法实现。
//通过选择器继承继承样式
.error {
border: 1px solid red;
background-color: #fdd;
}
.seriousError {
@extend .error;
border-width: 3px;
}
在上边的代码中,.seriousError
将会继承样式表中任何位置处为.error
定义的所有样式。以class="seriousError"
修饰的html
元素最终的展示效果就好像是class="seriousError error"
五、函数指令
@function getBg($name){
@return '../../../../images/' + $name;
}
.box{
background-image:url(getBg('bg.png'));
}
与 mixin 相同,也可以传递若干个全局变量给函数作为参数。一个函数可以含有多条语句,需要调用 @return
输出结果。
六、控制指令
1、@if
当
@if
的表达式返回值不是false
或者null
时,条件成立,输出{}
内的代码。@if
声明后面可以跟多个@else if
声明,或者一个@else
声明。如果@if
声明失败,Sass 将逐条执行@else if
声明,如果全部失败,最后执行@else
声明。
$type: monster;
p {
@if $type == ocean {
color: blue;
} @else if $type == monster {
color: green;
} @else {
color: black;
}
}
2、@for
@for
指令可以在限制的范围内重复输出格式,每次按要求(变量的值)对输出结果做出变动。这个指令包含两种格式:@for $var from <start> through <end>
,或者@for $var from <start> to <end>
,区别在于through
与to
的含义:当使用 through 时,条件范围包含 与 的值,而使用 to 时条件范围只包含 的值不包含 的值。另外,$var
可以是任何变量,比如$i
;<start>
和<end>
必须是整数值。
常用于相同元素不同的(背景)图片:
.item{
@for $i from 1 through 7 {
>div:nth-child(#{$i}) {
.item {
background-image: url('../../../images/us/service-#{$i}.png');
}
@if $i == 7 {
margin: 0 auto;
}
}
}
}
插值语句#{}
通过
#{}
插值语句可以在选择器或属性名中使用变量。$name: foo;
$attr: border;
p.#{$name} {
#{$attr}-color: blue;
} //编译为:
p.foo {
border-color: blue;
}
3、@each
@each
指令的格式是$var in <list>
,$var
可以是任何变量名,比如$length
或者$name
,而<list>
是一连串的值,也就是值列表。
(1)简单循环
@each $animal in puma, sea-slug {
.#{$animal}-icon {
background-image: url('/images/#{$animal}.png');
}
}
//编译为:
.puma-icon {
background-image: url('/images/puma.png');
}
.sea-slug-icon {
background-image: url('/images/sea-slug.png');
}
(2)复杂循环
@each $animal, $color, $cursor in (puma, black, default),
(sea-slug, blue, pointer),
(egret, white, move){
// $animal => (puma, black, default)
// $color => (sea-slug, blue, pointer)
// $cursor => (egret, white, move)
}
另一种写法:( 一一对应)
@each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em){
// $header => h1,h2,h3
// $size => 2em,1.5em,1.2em
}
4、@while
@while
指令重复输出格式直到表达式返回结果为 false
。这样可以实现比 @for
更复杂的循环,只是很少会用到。
$i: 6;
@while $i > 0 {
.item-#{$i} { width: 2em * $i; }
$i: $i - 2;
}
//编译为:
.item-6 {
width: 12em;
}
.item-4 {
width: 8em;
}
.item-2 {
width: 4em;
}
5、if()
if()
是 Sass 的一个内建函数,与之相似的@if
则是一个内建指令。if()
用来做条件判断并返回特定值.
@mixin test($condition) {
$color: if($condition, blue, red);
color:$color
}
.firstClass {
@include test(true);
}
.secondClass {
@include test(false);
}
//编译结果
.firstClass {
color: blue;
}
.secondClass {
color: red;
}
在上例中,if()
函数内的三个参数分别代表:测试条件,测试成功返回值,测试失败返回值(除了 false
和 null
之外的所有测试条件都被视为测试成功)。
七、导入sass文件
sass
也有一个@import
规则,sass的
@import规则在生成
css文件时就把相关文件导入进来。
(开发过程中通常将比较常用的sass按照功能单独放在某个文件中,在使用的时候导入)
官方文档是这样说的:
当通过
@import
把sass
样式分散到多个文件时,你通常只想生成少数几个css
文件。那些专门为@import
命令而编写的sass
文件,并不需要生成对应的独立css
文件,这样的sass
文件称为局部文件。对此,sass
有一个特殊的约定来命名这些文件。此约定即,
sass
局部文件的文件名以下划线开头。这样,sass
就不会在编译时单独编译这个文件输出css
,而只把这个文件用作导入。当你@import
一个局部文件时,还可以不写文件的全名,即省略文件名开头的下划线。举例来说,你想导入themes/_night-sky.scss
这个局部文件里的变量,你只需在样式表中写@import
"themes/night-sky";
。
@import '../../part/variable';
.light{
color:$base-color;
}
这里就是在_variable.scss文件中定义了网站主题色—变量$base-color,导入之后就可以在当前scss文件直接使用变量。
1、默认变量值:
!default
标签含义是:如果这个变量被声明赋值了,那就用它声明的值,否则就用这个默认值。
$fancybox-width: 400px !default;
.fancybox {
width: $fancybox-width;
}
如果用户在导入你的
sass
局部文件之前声明了一个$fancybox-width
变量,那么你的局部文件中对$fancybox-width
赋值400px
的操作就无效。2、静默注释
body {
color: #333; // 这种注释内容不会出现在生成的css文件中
padding: 0; /* 这种注释内容会出现在生成的css文件中 */
}
八、数据类型
1、空值null
尽管null
表示什么都没有,但当使用length(..)
还是会返回length
为1
。这是因为null
仍然表示的是一个真实存在的实体。
2、布尔型
这个数据类型只有两个值:true
和false
。在Sass中,只有自身是false
和null
才会返回false
,其他一切都将返回true
3、数字
数字在CSS中使用很广泛,大部分都是结合CSS的单位一起使用,但在技术上而言它依然算是数字。只要操作数字和兼容的单位,这样都是有效的。
$size: 18; // A number
$px-unit: $size * 1px; // A pixel measurement
$px-string: $size + px; // A string
$px-number: $px-unit / 1px; // A number
4、字符串
在Sass中,使用单引号(''
)或双引号(""
)包裹的都是字符串,就是他们包裹的是一个空格,那也是字符串.
如果你想在一个字符串是使用一个变量,而你又不想让这个变量直接变成了字符串,那就得使用到一个被称为变量插值,简单点说,就是使用#{}
来包裹这个变量。
$name: 'Gajendar';
$author: 'Author : $name'; // 'Author : $name'
$author: 'Author : #{$name}';
5、颜色
Sass主要是给你提供一些额外的功能,这样你就可以更有效的使用颜色。
用的比较多的函数方法:
rgba($red, $green, $blue, $alpha) : Creates a Color from red, green, blue, and alpha values.
6、数组
用空格或逗号作分隔符,1.5em 1em 0 2em, Helvetica, Arial, sans-serif
数组方法:
7、maps
相当于 JavaScript 的 object,(key1: value1, key2: value2)
Sass中的Map其实就是类似于关联数组,常常以
key/value
对键值出现。Map必须用括号(()
)括起来,每对键值之间使用逗号分隔。在Map中,一个给定的key
只能有一个相关的value
,但一个给定的value
可以被映射到许多不同的key
上。另外,在Map中映射给key
的值value
可以是任何数据类型,包括Map.
$styling: (
'font-family': 'Lato',
'font-size': 1.5em,
'color': tomato,
'background': black
);
Map方法:
map-get($map, $key) : Returns the value in a map associated with a given key.
map-merge($map1, $map2) : Merges two maps together into a new map.
map-remove($map, $keys…) : Returns a new map with keys removed.
map-keys($map) : Returns a list of all keys in a map.
map-values($map) : Returns a list of all values in a map.
map-has-key($map, $key) : Returns whether a map has a value associated with a given key.
keywords($args) : Returns the keywords passed to a function that takes variable arguments.
几篇不错的sass技巧文章
sass的多种用法的更多相关文章
- splice的多种用法
(一)splice的多种用法: splice(n,m) 从索引n开始删除m个.返回删除项组成新数组 splice(n) 从索引n开始删除到末尾 splice(n,m,x) 从索引n开始删除m个,并且把 ...
- Android之Notification的多种用法(转)
我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏里有一个短信的小图标提示啊?你是不是也想实现这种功能呢?今天的Notification就是解决这个问题的. 我们也 ...
- Android之Notification的多种用法
我们在用手机的时候,如果来了短信,而我们没有点击查看的话,是不是在手机的最上边的状态栏里有一个短信的小图标提示啊?你是不是也想实现这种功能呢?今天的Notification就是解决这个问题的. 我们也 ...
- WPF小知识,MessageBox的多种用法
我们在程序中经常会用到MessageBox. 现将其常见用法总结如下: 1.MessageBox.Show("Hello~~~~"); 最简单的,只显示提示信息. 2.Messag ...
- mysql CASE WHEN的基础和多种用法
CASE计算条件列表并返回多个可能结果表达式之一. CASE 具有两种格式: 简单 CASE 函数将某个表达式与一组简单表达式进行比较以确定结果. CASE 搜索函数计算一组布尔表达式以确定结果. 两 ...
- C++ 回调函数的多种用法
什么是回调函数, 就是以函数指针做参数传递给另一个函数称之为回调函数, 字面意思很简单, 但就这几个字想理解回调函数, 那又很难.因此别就这这字面意思, 只要知道怎么用, 在什么情况下用就行了 什么场 ...
- dedecms内容页调用缩略图 缩略图多种用法(借鉴)
给大家分享一下文章内容页调用缩略图的方法. 这种问题是:文章有缩略图,但是文章里面没有,想把缩略图添加到文章里面. 1.文章内容页调用缩略图方法如下两种.第一种没有大小设置.原图显示.第二种.可以设大 ...
- dedecms内容页调用缩略图 缩略图多种用法(借鉴)
文章内容页调用缩略图方法如下两种.第一种没有大小设置.原图显示.第二种.可以设大小, (1) {dede:field.image/} (2)<img src="{dede:field. ...
- sort()的多种用法
sort() 方法用于对数组的元素进行排序. 一.默认情况 在默认情况下, sort() 方法按升序排列数组项.为了实现排序, sort() 方法会调用每个数组项的 toString() 转型方法, ...
随机推荐
- 前端 Dom 直接选择器
文档对象模型(Document Object Model,DOM)是一种用于HTML和XML文档的编程接口.它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式.我们最为关心的是,DOM把 ...
- C# 预定义语言
官网: https://msdn.microsoft.com/zh-cn/library/88td0y52.aspx [Conditional("DEBUG")] 作为预处理中的一 ...
- python和shell之间变量的相互调用
python -> shell: 1.环境变量 2.字符串连接 3.通过管道 import os var=’123’ os.popen(’wc -c’, ’w’).write(var) 4.通过 ...
- MySQLdb使用批量插入executemany方法插入mysql
python的MySQLdb库可以使用批量操作executemany,进行多行插入. 比如向user表(username,salt,pwd)插入数据,具体的sql语句如下: sql = 'INSERT ...
- PAT 1084 Broken Keyboard[比较]
1084 Broken Keyboard (20 分) On a broken keyboard, some of the keys are worn out. So when you type so ...
- vueRouter点击打开新页签
一.vue 路由使用 vue是单页面SPA,一般我们使用vue-router 设定路由进行页面跳转的时候,都是直接覆盖当前页面.比如,在a页面中有如下超链接 <router-link to=&q ...
- [Windows Powershell]-学习笔记(3)
Powershell 通过函数扩展别名 在powershell中设置别名的确方便快捷,但是在设置别名的过程中并设置参数的相关信息,尽管别名会自动识别参数,但是如何把经常使用的参数默认设定在别名里面呢? ...
- 【U3D】脚本引用的类,如何显示在编辑器界面
有时候,我们的类里面会组合其他功能模块 如何让这些功能类的值在编辑器界面出现呢? 1:引用类的访问类型必须是Public 2: 类必须声明为可序列化的,即在类头加入以下声明 [System.Seria ...
- oracle 分区表详解
一.分区表的概述: Oracle的表分区功能通过改善可管理性.性能和可用性,从而为各式应用程序带来了极大的好处.通常,分区可以使某些查询以及维护操作的性能大大提高.此外,分区还可以极大简化常见的管理任 ...
- ultraedit 查看文件
转自:https://wenda.so.com/q/1481655902726192 1 UltraEdit在打开文件的时候,会对文件类型进行检查.如果是二进制文件,会自动转为16进制显示模式.如下图 ...