scss使用指南--每天一点

我们平时都称之为 Sass,其实可分成sass和scss, 其中Sass 是以严格的缩进式语法规则来书写,不带大括号({})和分号(;),以“.sass”后缀为扩展名;而 SCSS 是 Sass 3 引入新的语法,其语法完全兼容 CSS3,并且继承了 Sass 的语法书写和我们的 CSS 语法书写方式非常类似,较为宽松,以“.scss”后缀为扩展名;二者可以说是一个东西

sass嵌套

  1. 选择器嵌套

    这里的 & 代表 nav a ,理解起来有点 像js中this 的意思

<header>
    <nav>
        <a href="#">home</a>
        <a href="#">page</a>
    </nav>
</header>

    nav a {
        color:red;
    }
    header nav a {
        color:green;
    }
nav {
  a {
    color: red;

    header & {
      color:green;
    }
  }
}
  1. 属性嵌套(有相同的属性前缀)

    如 font, background等,也有可能是 -webkit-

.box {
     font-size: 12px;
     font-weight: bold;
}
.box {
  font: {
   size: 12px;
   weight: bold;
  }
}
  1. 伪类嵌套

    同上选择器嵌套一样 使用 & 关键字

.clearfix{
&:before,
&:after {
    content:"";
    display: table;
  }
&:after {
    clear:both;
    overflow: hidden;
  }
}
clearfix:before, .clearfix:after {
  content: "";
  display: table;
}
.clearfix:after {
  clear: both;
  overflow: hidden;
}

占位符:

语法:%placeholder,
用法:占位符不被 @extend 调用不产生任何代码

%bg {
  background-color: #FF0;
}
%w {
  width: 100px;
}
.box {
  @extend %w;
  height: 100px;
  @extend %bg;
}

sass 语法

允许使用变量 以 $ 开头

$test: #ff9500
div{
       color: $test;
}

也可以字符串拼接

$side : left;

.rounded {
        border-#{$side}-radius: 5px;
 }

也可以加减乘除 简单计算

sass分享:

内容:全局、默认、局部变量
使用:默认变量 在局部中无效,覆盖 默认变量 不分上下顺序

<div class="box1">
  <div class="box2">box2</div>
</div>
$backgroundColor: #FF0;                  // 全局变量
$backgroundColor: #000 !default;      // 默认变量
$color: #F0F;

.box1 {
  $color: #CCC;                                   // 局部变量
  width: 100px;
  height: 100px;
  background-color: $backgroundColor; // #FF0
  .box2 {
    color: $color;                                      // #CCC
  }
}

控制指令 (Control Directives)

混合指令

mixin 技术文档翻译 混合类型
mixing 混合 (mix 的现在分词)

mixin sass官方文档称 混合指令
@mixin 为定义混合指令
@include 为引用楼上定义的混合指令

<div class= "parent">
111
</div>
<div class= "child">
222
</div>
<div class= "test">
333
</div>
.parent {
  color: red;
}
.child {
  @extend .parent;
  font-size: (21px * 3);
}
@minxin auto {
  margin: 0 auto;
}
.test {
  width: 200px;
  @include auto;
}

sass 的 @if 控制指令

<div class="demo"></div>

单独使用@if:

当@if 的表达式不是false或者null时, 条件成立, 输出{} 内的代码

.demo{
  $fx: bottom;
  @if ($fx == top) {
    border-color: transparent transparent pink transparent;
    border-style: dashed dashed solid dashed;
  }
  @else if($fx == right){
    border-color: transparent transparent transparent pink;
    border-style: dashed dashed dashed solid;
  }
  @else if($fx == bottom){
    border-color: pink transparent transparent transparent;
    border-style: solid dashed dashed dashed;
  }
  @else if($fx == left){
    border-color: transparent pink transparent transparent;
    border-style: dashed solid dashed dashed;
  }

  width: 0px;
  height: 0px;
  overflow: hidden;
  border-width: 60px;
}

混合指令 + @if 指令

// 画三角形@mixin声明
@mixin sj($fx:top,$size:100px,$color:red){

  @if ($fx == top) {
    border-color: transparent transparent $color transparent;
    border-style: dashed dashed solid dashed;
  }
  @else if($fx == right){
    border-color: transparent transparent transparent $color;
    border-style: dashed dashed dashed solid;
  }
  @else if($fx == bottom){
    border-color: $color transparent transparent transparent;
    border-style: solid dashed dashed dashed;
  }
  @else if($fx == left){
    border-color: transparent $color transparent transparent;
    border-style: dashed solid dashed dashed;
  }

  width: 0px;
  height: 0px;
  overflow: hidden;
  border-width: $size;

}

//mixin的调用
.demo{
  @include sj(left, 66px, pink);
}

less 与sass有个很明显的区别
变量
咱们sass 变量用 $ 开头
less 是以 @ 开头的

sass语法 @for 控制指令

@for 指令可以在限制的范围内重复输出格式,每次按要求(变量的值)对输出结果做出变动;

这个指令包含两种格式:
@for $var from through ,
或者
@for $var from to

<ul>
  <li class="item-1">至尊魔法师</li>
  <li class="item-2">王</li>
  <li class="item-3">奇异博士</li>
  <li class="item-4">莫度男爵</li>
  <li class="item-5">哈姆雷特</li>
  <li class="item-6">蜘蛛侠</li>
  <li class="item-7">非人哉</li>
</ul>

from ... through

// 当使用 through 时,条件范围包含 与 的值

// 个人分析: 可以将一个页面,不同div中嵌套的元素设置样式,只要命名符合一定的规律

@for $i from 1 through 7 {
  .item-#{$i} {
    width: 6em * $i;
    background: pink;
    margin: 6px 0;
  }
}

from ... to

使用 to 时条件范围只包含 的值不包含 的值。另外,$var 可以是任何变量,比如 $i; 和 必须是整数值。

@for $i from 1 to 7 {
  .item-#{$i} {
    width: 6em * $i;
    background: pink;
    margin: 6px 0;
  }
}
@each $usr in nezha, aolie, xiaoyu, xiaotian {
    .#{$usr}-avatar {
        background-image: url('/img/#{$usr}.png');
     }
}

@each 后面的 $usr 变量用于保存每次遍历到的元素,然后使用差值语法(#{var})来拼接正确的图片路径

//@each 指令同样可以用于循环输出,和 @for 的差别在于,@each 通过遍历 list 或者 map 实现循环输出
// 如果遍历的对象是一个 map,那么我们就可以使用两个变量来存储元素的 key 和 value

$frz: ( usr1:xiaotian, usr2:sanyan, usr3:shancai, usr4:longnv );

@each $key, $usr in $frz {
    .#{$usr}-avatar {
        background-image: url('/img/#{$usr}.png');
    }
}

运算的坑

加号居然可以不需要空格隔开,但必须单位统一


$sidebar-width: 220px;
$content-width: 720px;
$gap-width: 20px;
$other-width: 2em;

.container {
    // width: $sidebar-width+$content-width + $gap-width;
    width: $sidebar-width + $other-width;
    margin: 0 auto;
}

还可以做字符连接

  1. 如果有引号的字符串被添加了一个没有引号的字符串 (也就是,带引号的字符串在 + 符号左侧), 结果会是一个有引号的字符串。
  2. 如果一个没有引号的字符串被添加了一个有引号的字符串 (没有引号的字符串在 + 符号左侧), 结果将是一个没有引号的字符串。
p:before {
  content: "bing" + jian;
  font-family: sans- + "serif";
}

编译后

p:before {
  content: "bingjian";
  font-family: sans-serif;
}

减法 - 需要注意空格了,否则就完蛋喽

$full-width: 960px;
$sidebar-width: 200px;

.content {
  width: $full-width - $sidebar-width;
}

乘法
能够支持多种单位(比如 em ,px , %);
如果进行乘法运算时,两个值单位相同时,只需要为一个数值提供单位即可(多个乘数中只需要一个乘数提供单位,否则报错)。

.box {
  width: 10px * 2;
}

否则

.box {
  width: 10px * 6px;
}

error: 60px*px isn‘t a valid CSS value.

除法

众所周知“/”符号在 CSS 中已做为一种符号使用。其在 CSS 中通常起到分隔数字的用途,
因此在 Sass 中做除法运算时,直接使用“/”符号做为除号时,将不会生效,
编译时既得不到我们需要的效果,也不会报错。
需要给运算的外面添加一个小括号()才能执行除法运算

.box {
  width: (100px / 2);
}

总结: ”/ ”符号被当作除法运算符时有以下几种情况:
   如果数值或它的任意部分是存储在一个变量中或是函数的返回值。
  如果数值被圆括号包围。
  如果数值是另一个数学表达式的一部分。

p {
  font: 10px/8px;        // 纯 CSS,不是除法运算
  $width: 1000px;
  width: $width/2;          // 使用了变量,是除法运算
  width: round(1.5)/2;        // 使用了函数,是除法运算
  height: (500px/2);          // 使用了圆括号,是除法运算
  margin-left: 5px + 8px/2px;  // 使用了加(+)号,是除法运算
}

还有一种情况

Sass 的除法运算还有一个情况。先回忆一下,在乘法运算时,如果两个值带有相同单位时,做乘法运算时,出来的结果并不是我们需要的结果。但在除法运算时,如果两个值带有相同的单位值时,除法运算之后会得到一个不带单位的数值。 

.box {
  width: (1000px / 100px);?
}

颜色运算 - 分段运算

  所有算数运算都支持颜色值,并且是分段运算的。也就是说,红、绿和蓝各颜色分段单独进行运算。如:

p {
  background-color: #012423 + #120923;
  color: #324334 * 2
}

有顺工作

将所有的Mixins、Placeholder、Functions和变量放置在一起。将他们放置一起,可以确认他们可以很快的编写以及将来重复使用。

  1. 整站的元素应该放在一个base文件夹中。base文件夹应该包括全局的变量,如字体和颜色等
  2. 对于特定模块的Mixins、Functions 和变量,为了保证模块能正常运行,需要将这些集中放置在module文件中

限制嵌套

使用嵌套的黄金规则:

  1. 嵌套永远不要超过三个层级
  2. 确保输出的CSS简洁、可重用
  3. 使用嵌套是很有意义的,而不是默认选项

过度的嵌套会导致很多问题的发生,代码变得复杂,而且太过于依赖HTML结构。这样将导致后面的样式需要使用!important来覆盖

scss 基本用法

  1. 变量(局部/全局)声明:$+变量名:变量值;默认变量在变量名后加default,!global变成全局变量。
  2. 混合宏(可重用的代码块):声明混合宏@mixin border-radius { }; 调用混合宏 @include。 border-radius; 声明的时候还可以带默认参数,调用可以传参。
  3. 继承: @extend .btn; 继承btn class。任何选择器都能继承,可以连续继承。
  4. 占位符%:占位符声明的代码如果不被@extend调用,就不会被编译产生css代码。
  5. 插值:#{$参数名},插入传入或定义的参数。
  6. 注释:/* */ :会在编译出来的css文件中显示;//内容:不会显示。/!/:重要注释,任何style的css文件中都会有,一般放置css文件版权说明等信息。
  7. 加减法:同单位的数值之间可以做加减法。
  8. 乘除法:只能乘数值;如果除式中没有变量或者不是在一个数学表达式中(有加法减法等),就要将除式运算用小括号括起来,否则“/”不会被当做除号运算。
  9. 颜色运算:算术运算都支持颜色值,并且是分段计算的,01+05=06
  10. 字符串连接:+,$content: "Hello" + "" + "Sass!";cursor: e + -resize;有引号的字符串和没有引号的字符串相加,以左边字符有无引号为准。
  11. 父类选择器:&,表示引用父元素,
  12. if语法:@if,@else,
  13. 循环语法:@for,@while,@each,
  14. 函数:@function double ($number){ @return $number*2; }
  15. import:导入其他的scss

原文地址:https://www.cnblogs.com/yc8930143/p/10662255.html

时间: 2024-11-04 03:36:16

scss使用指南--每天一点的相关文章

scss样式指南学习笔记(一)

.fuwo{ display:block; //使用两个空格代表缩进,而不是使用tab键 font-family:'Arial'; //字符串用引号包裹起来 background:url('/images/bg.jpg'); //URL最好也用引号包裹起来 opacity: 0.5; //当数字小于1时,应该在小数点前写出0.,永远不要显示小数尾部的0 } $length:0; //当定义长度时,0后面不需要加单位 $value:5; $length:$value * 1px; //将一个单位添

Chrome 开发工具指南

Chrome 开发工具指南 谷歌 Chrome 开发工具,是基于谷歌浏览器内含的一套网页制作和调试工具.开发者工具允许网页开发者深入浏览器和网页应用程序的内部.该工具可以有效地追踪布局问题,设置 JavaScript 断点并可深入理解代码的最优化策略. 适用人群 这篇教程将会带你从头开始使用学习如何利用 Google 提供的组件进行 Chrome 上的相关开发调试工作. 通过本教程,你将学会如何使用这些工具,并且学会如何通过它来分析调试提供的 Demo . 学习前提 在你继续本教程之前,你必须对

Ext JS 6学习文档–第1章–ExtJS入门指南

Ext JS 入门指南 前言 本来我是打算自己写一个系列的 ExtJS 6 学习笔记的,因为 ExtJS 6 目前的中文学习资料还很少.google 搜索资料时找到了一本国外牛人写的关于 ExtJS 6 的电子书 [Ext JS 6 By Example].这份资料在 PACKT 上卖 35.99 刀的,当然了万能的 google 还是帮我下载到了 PDF 文档.大概看了一下,讲的很详细,例子也比较简单,容易理解,现我准备利用工作之余翻译这份文档,为自己学习加深理解,也希望能帮助更多的人学习.

Airbnb JavaScript 编码风格指南(2018年最新版)

原网址 :  https://segmentfault.com/a/1190000013040555 类型 基本类型:直接存取 string number boolean null undefined symbol const foo = 1; let bar = foo; bar = 9; console.log(foo, bar); // => 1, 9 symbol 类型不能完全polyfilled,所以请谨慎使用 复杂类型: 通过引用的方式存取 object array function

最全解析如何正确学习JavaScript指南,必看!

划重点 鉴于时不时,有同学私信问我:怎么学前端的问题.这里统一回复一下,如下次再遇到问我此问题同学,就直接把本文链接地址发给你了. "前端怎么学"应该因人而异,别人的方法未必适合自己.就说说我的学习方法吧:我把大部分时间放在学习js上了.因为这个js的学习曲线,先平后陡.项目实践和练习啥的,我不说了,主要说下工作之外的时间利用问题.我是怎么学的呢,看书,分析源码.个人这几天统计了一下,前端书籍目前看了50多本吧,大部分都是js的.市面上的书基本,差不多都看过. 第一个问题:看书有啥好处

Java程序员的Golang入门指南(上)

Java程序员的Golang入门指南 1.序言 Golang作为一门出身名门望族的编程语言新星,像豆瓣的Redis平台Codis.类Evernote的云笔记leanote等. 1.1 为什么要学习 如果有人说X语言比Y语言好,两方的支持者经常会激烈地争吵.如果你是某种语言老手,你就是那门语言的"传道者",下意识地会保护它.无论承认与否,你都已被困在一个隧道里,你看到的完全是局限的.<肖申克的救赎>对此有很好的注脚: [Red] These walls are funny.

Swift语言指南(一)--语言基础之常量和变量

Swift 是开发 iOS 及 OS X 应用的一门新编程语言,然而,它的开发体验与 C 或 Objective-C 有很多相似之处. Swift 提供了 C 与 Objective-C 中的所有基础类型,包括表示整数的 Int,表示浮点数的 Double 与 Float,表示布尔值的 Bool,以及表示纯文本数据的 String. Swift 还为两个基本集合类型 Array 与 Dictionary 提供了强大的支持,详情可参考 (集合类型)Collection Types. 与 C 语言类

手机短视频应用 --用户行为分析和优化指南

根据趣拍云的数据统计分析,日前所有接入趣拍短视频SDK的App用户每天的鉴权请求平均在1300万次左右,见下图: 趣拍云目前监测到的App短视频拍摄应用,日均启动次数在131133次,日均拍摄完成次数40608次.见下图: 视频拍摄的应用比例大概为开启App次数的1%和0.3%.拍摄完成率大约为30%. 由于趣拍云并非监测所有接入的App的拍摄应用记录,因此实际的日均启动次数和完成拍摄次数会高于上面的数值.所以实际的短视频拍摄应用比例实际会超过1%和0.3%.   根据趣拍云监测的用户拍摄行为具

Linux Kernel - Debug Guide (Linux内核调试指南 )

http://blog.csdn.net/blizmax6/article/details/6747601 linux内核调试指南 一些前言 作者前言 知识从哪里来 为什么撰写本文档 为什么需要汇编级调试 ***第一部分:基础知识*** 总纲:内核世界的陷阱 源码阅读的陷阱 代码调试的陷阱 原理理解的陷阱 建立调试环境 发行版的选择和安装 安装交叉编译工具 bin工具集的使用 qemu的使用 initrd.img的原理与制作 x86虚拟调试环境的建立 arm虚拟调试环境的建立 arm开发板调试环