首页 > 其他分享 >sass快速入门笔记

sass快速入门笔记

时间:2024-02-21 17:57:16浏览次数:14  
标签:blue 入门 sass color 混合器 笔记 border css

本文记录了sass基本内容,包含声明、嵌套、导入 、混合等

使用场景

  • 将反复使用的 css属性值用一个变量声明,开发过程使用这个变量,方便后期修改该值,不用全局搜索替换(降低修改风险)。

变量声明

  • 用关键字$声明
  • 变量受{...}定义范围影响,在{...}内定义的在外部不可使用
  $highlight-color: #F90;
  .selected {
    border: 1px solid $highlight-color;
  }

  //编译后

  .selected {
    border: 1px solid #F90;
  }
  • 可以在变量中使用变量
  $highlight-color: #F90;
  $highlight-border: 1px solid $highlight-color;
  .selected {
    border: $highlight-border;
  }

  //编译后
  .selected {
    border: 1px solid #F90;
  }
  • 变量名与css相同,包含中划线和下划线
  • 中划线和下划线在使用中相同,使用中划线命名不影响用下划线方式引用
$link-color: blue;
a {
  color: $link_color;
}

//编译后
a {
  color: blue;
}

嵌套css规则

  • 在css中层级较深指定某一块DOM时
  #content article h1 { color: #333 }
  #content article p { margin-bottom: 1.4em }
  #content aside { background-color: #EEE }
  • sass中可以写为
#content {
  article {
    h1 { color: #333 }
    p { margin-bottom: 1.4em }
  }
  aside { background-color: #EEE }
}

 /* 编译后 */
#content article h1 { color: #333 }
#content article p { margin-bottom: 1.4em }
#content aside { background-color: #EEE }
  • & --> 父选择器的标识符
// 给a标签添加鼠标移入属性
article a {
  color: blue;
  &:hover { color: red }
}

// 编译后
article a { color: blue }
article a:hover { color: red }
  • 子组合选择器和同层组合选择器:>、+和~;
  • 嵌套属性;
nav {
  border: {
    style: solid;
    width: 1px;
    color: #ccc;
  }
}

nav {
  border: 1px solid #ccc {
  left: 0px;
  right: 0px;
  }
}
// 比下边这种同等样式的写法要好 
nav {
  border: 1px solid #ccc;
  border-left: 0px;
  border-right: 0px;
}

导入SASS文件

import引入

css中@import引入文件,在执行到import时才会引入,导致页面加载渲染不流畅;sass中将sass编译成css时就会执行import将文件导入,这也就意味着会生成一个css文件,减少多余文件请求。

使用sass部分文件

当只想生成少数css时,可以将不需要生成独立css的文件特殊命名。以下划线开头的命名,sass就不会在编译时单独编译这个文件输出为css,而只把这个文件用作import导入用。

default --> 默认变量值

important相反意思,若已经声明过了就用已经声明的值,否则就用当下的设定的默认值。

  // 如果之前已经声明过$fancybox-width变量,那么当前$fancybox-width赋值400px的操作就无效。如果之前没有做这样的声明,$fancybox-width将默认为400px。

  $fancybox-width: 400px !default;
  .fancybox {
    width: $fancybox-width;
  }

嵌套导入

  • sass允许@import命令写在css规则内,生成的css文件对应的sass内容会直接编译在当前css中
// 局部文件_blue-theme.scss
aside {
  background: blue;
  color: white;
}

// 然后把他导入到css内
.blue-theme {@import "blue-theme"}

// 生成的结果和直接在.blue-theme选择器内写_blue-theme.scss文件的内容完全一样。
.blue-theme {
  aside {
    background: blue;
    color: #fff;
  }
}

原生的CSS导入;

静默注释

  • // 双斜杠

@mixin-->混合器

  • 实现大段样式的重复使用
// 使用@mixin声明
@mixin rounded-corners {
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px;
  border-radius: 5px;
}

// @include来使用这个混合器
notice {
  background-color: green;
  border: 2px solid #00aa00;
  @include rounded-corners;
}

// sass最终生成
.notice {
  background-color: green;
  border: 2px solid #00aa00;
  -moz-border-radius: 5px;
  -webkit-border-radius: 5px;
  border-radius: 5px;
}

何时使用混合器

  • 滥用会导致样式表过大
  • 判断一组属性是否应该组合成一个混合器,一条经验法则就是你能否为这个混合器想出一个好的名字。如果你能找到一个很好的短名字来描述这些属性修饰的样式,比如rounded-cornersfancy-font或者no-bullets,那么往往能够构造一个合适的混合器。如果你找不到,这时候构造一个混合器可能并不合适。

混合器中的CSS规则

  • 使用方法和sass基本使用方法一直,支持子类选择伪类选择
// 混合器中定义
@mixin no-bullets {
  list-style: none;
  li {
    list-style-image: none;
    list-style-type: none;
    margin-left: 0px;
  }
}

// 使用
ul.plain {
  color: #444;
  @include no-bullets;
}

// 编译后
ul.plain {
  color: #444;
  list-style: none;
}
ul.plain li {
  list-style-image: none;
  list-style-type: none;
  margin-left: 0px;
}

给混合器传参

// 混合
@mixin link-colors($normal, $hover, $visited) {
  color: $normal;
  &:hover { color: $hover; }
  &:visited { color: $visited; }
}

// 使用
a {
  @include link-colors(blue, red, green);
}
// 也可以写出$name: value的方式,不用按规定顺序传
a {
    @include link-colors(
      $normal: blue,
      $visited: green,
      $hover: red
  );
}

// 编译后
a { color: blue; }
a:hover { color: red; }
a:visited { color: green; }

混合器默认参数值

  • 为了在@include混合器时不必传入所有的参数,我们可以给参数指定一个默认值。
  • 参数默认值使用$name: default-value的声明形式,默认值可以是任何有效的css属性值,甚至是其他参数的引用
@mixin link-colors(
    $normal,
    $hover: $normal,
    $visited: $normal
  )
{
  color: $normal;
  &:hover { color: $hover; }
  &:visited { color: $visited; }
}
  • 和JS类似function(a,b=2,c=3){return a,b,c)

使用选择器继承来精简CSS

//通过选择器继承继承样式
.error {
  border: 1px solid red;
  background-color: #fdd;
}
.seriousError {
  @extend .error;
  border-width: 3px;
}
  • 何时使用继承

  • 继承的高级用法

  • 继承的工作细节

  • 使用继承的最佳实践

标签:blue,入门,sass,color,混合器,笔记,border,css
From: https://www.cnblogs.com/facy/p/18025025

相关文章

  • jQuery入门
    原文链接:https://zhuanlan.zhihu.com/p/635366269为什么要学jQuery?使用JavaScript开发过程中,有许多的缺点:查找元素的方法单一、遍历数组很麻烦,通常要嵌套一大堆的for循环有兼容性问题、想要实现简单的动画效果也很麻烦、代码冗余。为了解决这些问题,我们在JavaScript开发中使用jQ......
  • gorm入门
    目录1.简介2.实例3.增删改查新增更新删除查询高级查询原生sql4.模型类约定字段标签关联标签单个声明BelongsTo一对一HasOne一对一一对多多对多文档1.简介特定: 全功能ORM 关联(HasOne,HasMany,BelongsTo,ManyToMany,多态,单表继承) Create,Save,Update,Delete,Find中钩子方......
  • Multi-behavior Self-supervised Learning for Recommendation论文阅读笔记
    Abstract本文提出了一个多行为自监督学习框架,以及一种自适应优化方法。具体而言,我们设计了一个行为感知的图神经网络,结合自注意力机制来捕捉行为的多样性和依赖关系。为了增强对目标行为下的数据稀疏性和辅助行为的嘈杂交互的鲁棒性,我们提出了一种新的自监督学习范式,以在行为间和......
  • 《Effective Java》阅读笔记-第九章
    EffectiveJava阅读笔记第九章通用编程第57条将局部变量的作用域最小化将局部变量的作用域最小化,可以增强代码的可读性和可维护性,并降低出错的可能。将局部变量的作用域最小化,最好的办法就是在第一次使用变量的地方声明它。几乎每一个局部变量都应该进行初始化。第5......
  • 《Effective Java》阅读笔记-第八章
    EffectiveJava阅读笔记第八章方法第49条检查参数的有效性基于“发生错误后应尽快检测出错误”这一通用原则,应对方法的参数进行检查。Java7中增加了Objects.requireNonNull方法,可以很方便的对参数进行null检查并抛出异常:publicvoidsomeMethod(Stringargs){ar......
  • 《Effective Java》阅读笔记-第十一章
    EffectiveJava阅读笔记第十一章并发第78条同步访问共享的可变数据多线程访问变量时,需要进行同步,否则就会产生并发问题。同步代码块、加锁等或者直接不共享变量,也就是将可变数据限制在单个线程内。ThreadLocal这种第79条避免过度同步为了避免活性失败和安全性失败......
  • 《Effective Java》阅读笔记-第十章
    EffectiveJava阅读笔记第十章异常第69条只针对异常的情况才使用异常说白了就是不要吧你的业务逻辑用异常来写。举个反例比如用抛出异常来遍历一个数组:try{inti=0;while(true){range[i++].doSomething();}}catch(ArrayIndexOutOfBoun......
  • 《Effective Java》阅读笔记-第十二章
    EffectiveJava阅读笔记第十二章序列化第85条其他方法优先于Java本身的序列化Java本身的序列化漏洞过多,很容易被攻击。避免被序列化攻击的最好方式就是不要反序列化任何字节流,并且新的系统中没有任何理由使用Java本身的序列化。JSON和Protobuf是两种优秀的序列化......
  • mybatisplus学习笔记01
    常用注解中@TableId注释需要特别注意,不仅要写明值value与表内的属性对应,还要写明是否自增等类型还有@TableField的常见场景需要记忆mp中大部分的配置都是继承的mybatis,所以很类似想要使用mp,基本流程为上图所示......
  • 线段树学习笔记
    目录线段树的基础知识什么是线段树线段树的基本操作线段树的建树线段树的单点修改线段树的区间查询线段树的区间修改模板动态开点一些例题TheChildandSequence解法分析CodeLegacy相关知识:线段树优化建图解法分析Code线段树的基础知识什么是线段树线段树是一种分治思想的二叉......