SASS基础

Wesley13
• 阅读 753

特点:

1.在css基础上增加特性:变量、嵌套(nesting)、混合(@mixin)、继承(@extend);

2.通过函数进行颜色值与属性值的运算;

3.提供控制指令等高级功能;

4.自定义输出指令;

数据类型:

Sass 和 JavaScript 语言类似,也具有自己的数据类型,在 Sass 中包含以下几种数据类型:

1. 数字(Number): 如,1、 2、 13、 10px;

2. 字符串(String):有引号字符串或无引号字符串,如,”foo”、 ‘bar’、 baz;

3. 颜色:如,blue、 #04a3f9、 rgba(255,0,0,0.5);

4. 布尔型(boolean):如,true、 false;

5. 空值(null):如,null;

6. 值列表:用空格或者逗号分开,如,1.5em 1em 0 2em 、 Helvetica, Arial, sans-serif。

ps: javascript数据类型:number, string, boolean, null, undefined, object(三大引用类型object, array, function);es6新增:sysbol, map, set。

变量控制:

1.通过粒度区分,为不同的值取不同的名字。

嵌套(nesting)

普通嵌套

#main p {
  color: #00ff00;
  width: 97%;

  .redbox {
    background-color: #ff0000;
    color: #000000;
  }
}

父选择器:&

a {
  font-weight: bold;
  text-decoration: none;
  &:hover { text-decoration: underline; }
  body.firefox & { font-weight: normal; }
}

属性嵌套

.funky {
  font: {
    family: fantasy;
    size: 30em;
    weight: bold;
  }
}

选择器:

1.可以在父选择器之前添加选择器。eg:

#content aside {
color: red;
body.ie & { color: green }
}

/*编译后*/
#content aside {color: red};
body.ie #content aside { color: green }

2.子组合选择器和同层组合选择器。

.a > .b  :class a下的直接子元素class b

.a + .b  :class a元素后紧邻的同级兄弟元素class b

.a ~ .b  :class a同级的所有class b

article {
~ article { border-top: 1px dashed #ccc }
>section{background: #eee }
dl> {
dt{color: #333 }
dd{color: #555 }
}
nav+ & {margin-top: 0 }
}

混合宏(**@mixin**):定义@mixin,调用@include

作用:混合指令(Mixin)用于定义可重复使用的样式,避免了使用无语意的 class,比如 .float-left。混合指令可以包含所有的 CSS 规则,绝大部分 Sass 规则,甚至通过参数功能引入变量,输出多样化的样式。

优点:可传参。

缺点:如果在样式文件中调用同一个混合宏,会产生多个对应的样式代码,造成代码冗余。

@mixin text-overflow {
    text-overflow: eclipsis;
    overflow: hidden;
    white-space: nowrap;
}

.message {
    width: 100px;
    @includetext-overflow;
}

混合器传参:

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

a {
     @include link-color(red, blue, yellow);
}

变量传参数:

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

默认参数值:

@mixin link-color($normal:red, $hover:blue, $visited:yellow) {
 color: $normal;
    $:hover {
        color: $hover;
    }
    $:visited {
        color:$visited;   
    }   
}

继承(@extend):

作用:将重复使用的样式,延伸(extend)给需要包含这个样式的特殊样式。

缺点:如果是类(.class),不管有没有调用(@extend),在编译的时候,都会生成对应的css。

1. 延伸class。

2. 【延伸复杂选择器】Class 选择器并不是唯一可以被延伸 (extend) 的,Sass 允许延伸任何定义给单个元素的选择器。eg:.classA.classB, a:hover, a.classA[href^="http://"]等。

.hoverlink {
  @extend a:hover;
}

3.【多重延伸】同一个选择器可以延伸给多个选择器,它包含的属性将继承给所有被延伸的选择器。多重延伸可以使用逗号分隔选择器名。@extend .error,.attention  ==  @extend .error; @extend .attention;

.error {
  border: 1px #f00;
  background-color: #fdd;
}
.attention {
  font-size: 3em;
  background-color: #ff0;
}
.seriousError {
  @extend .error;
  @extend .attention;
  border-width: 3px;
}

4. 【继续延伸】当一个选择器延伸给第二个后,可以继续将第二个选择器延伸给第三个

.error {
  border: 1px #f00;
  background-color: #fdd;
}
.seriousError {
  @extend .error;
  border-width: 3px;
}
.criticalError {
  @extend .seriousError;
  position: fixed;
  top: 10%;
  bottom: 10%;
  left: 10%;
  right: 10%;
}

5. 【选择器列】暂时不可以将选择器列 (Selector Sequences),比如 .foo .bar 或 .foo + .bar,延伸给其他元素,但是,却可以将其他元素延伸给选择器列。

#fake-links .link {
  @extend a;
}

a {
  color: blue;
  &:hover {
    text-decoration: underline;
  }
}

占位符选择器(Placeholder Selectors: %foo)

占位符选择器,看起来很像普通的 id 或 class 选择器,只是 # 或 . 被替换成了 %。可以像 class 或者 id 选择器那样使用,当它们单独使用时,不会被编译到 CSS 文件中。

占位和继承基本类似,唯一不同的是,相同的生成CSS块并没有在类中存在,而是额外声明。如果不调用已声明的占位符,将不会产生任何CSS。如果在不同选择器调用占位符,那么编译出来CSS将会把相同的代码合并在一起。@extend-Only Selectors

缺点:不能传参。建议使用此选择器,而非(@extend)。

%mt15 {
  margin-top: 15px;
}
%pt15{
  padding-top: 15px;
}

.btn6 {
  @extend %mt15;
  @extend %pt15;
}
.block {
  @extend %mt15;
  @extend %pt15;
}

%mt15 {
  margin-top: 15px;
}
%pt15{
  padding-top: 15px;
}

.btn6 {
  @extend %mt15;
  @extend %pt15;
}
.block {
  //@extend .btn6    
  @extend %mt15;
  @extend %pt15;
}

对比如下:

参考:https://www.cnblogs.com/alice-shan/p/4956302.html

SASS基础

条件语句

@if

p {
    @if 1 + 1 == 2 { border: 1px solid; }
    @if 5 < 3 { border: 2px dotted; }
}

@else

@if lightness($color) > 30% {
    background-color: #000;
  } @else {
    background-color: #fff;
  }

循环

@for

 @for $i from 1 to 10 {
    .border-#{$i} {
      border: #{$i}px solid blue;
    }
  }

@while

$i: 6;

@while $i > 0 {
  .item-#{$i} { width: 2em * $i; }
  $i: $i - 2;
}

@each

$direction: 'left', 'right', 'top', 'bottom';

//set padding
@each $dir in $direction {
  @each $value in '0', '5', '10' {
    .pd-#{$dir}-#{$value} {
      padding-#{$dir}: #{$value}px;
    }
  }
}

自定义函数

@function double($n) {
  @return $n * 2;
}


#sidebar {
  width: double(5px);
}

我的博客即将同步至腾讯云+社区,邀请大家一同入驻:https://cloud.tencent.com/developer/support-plan?invite\_code=alxx9wrtnw2

点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Stella981 Stella981
3年前
Sass
嵌套规则(NestedRules)Sass允许将一套CSS样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器mainp{color:00ff00;width:97%;.redbox{
Wesley13 Wesley13
3年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
3年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这