scss 学习

简介: scss 学习


1. 使用变量;

sass让人们受益的一个重要特性就是它为css引入了变量。你可以把反复使用的css属性值 定义成变量,然后通过变量名来引用它们,而无需重复书写这一属性值。或者,对于仅使用过一 次的属性值,你可以赋予其一个易懂的变量名,让人一眼就知道这个属性值的用途。

sass使用$符号来标识变量(老版本的sass使用!来标识变量。改成是多半因为‘!highlight−color‘看起来太丑了。),比如‘是多半因为!highlightcolor看起来太丑了。),比如highlight-colorsidebar−width‘。为什么选择‘sidebarwidth。为什么选择 符号呢?因为它好认、更具美感,且在CSS中并无他用,不会导致与现存或未来的css`语法冲突。

1.1 变量声明 和 使用

sass变量的声明和css属性的声明很像:

css

// 定义变量名 值是属性值 下面写样式的时候可以直接用变量名替代
$highlight-color: #F90;

css

$nav-color: #F90;
nav {
  $width: 100px;
  width: $width;
  color: $nav-color;
}
//编译后
nav {
  width: 100px;
  color: #F90;
}

再看几个例子

$highlight-color: #F90;
$highlight-border: 1px solid $highlight-color;
.selected {
  border: $highlight-border;
}
//编译后
.selected {
  border: 1px solid #F90;
}

2. 嵌套css规则

在Sass中,你可以像俄罗斯套娃那样在规则块中嵌套规则块。sass在输出css时会帮你把这些嵌套规则处理好,避免你的重复书写。

css

#content {
  article {
    h1 { color: #333 }
    p { margin-bottom: 1.4em }
  }
  aside { background-color: #EEE }
}

css

/* 编译后 */
#content article h1 { color: #333 }
#content article p { margin-bottom: 1.4em }
#content aside { background-color: #EEE }

大多数情况下这种简单的嵌套都没问题,但是有些场景下不行,比如你想要在嵌套的选择器 里边立刻应用一个类似于:hover的伪类。为了解决这种以及其他情况,sass提供了一个特殊结 构&

2.1 父选择器的标识符&;

最常见的一种情况是当你为链接之类的元素写:hover这种伪类时,你并不希望以后代选择器的方式连接。比如说,下面这种情况sass就无法正常工作:

css

article a {
  color: blue;
  :hover { color: red }
}

正确做法

css

article a {
  color: blue;
  &:hover { color: red }
}

2.2 群组选择器的嵌套

在使用css编写样式代码的时候,会遇到这样的场景. 比如 要选中一组中不同的元素

css

.container h1, .container h2, .container h3 { margin-bottom: .8em }

我们需要在每个元素前面都加上父级容器,这样代码量就多了,而且看起来也不整洁. 不过sass 嵌套特性在这种场景也非常有用.就上面的代码sass 是这样做的

sass

.container {
  h1, h2, h3 {margin-bottom: .8em}
}

处理这种群组选择器规则嵌套上的强大能力,正是sass在减少重复敲写方面的贡献之一。尤其在当嵌套级别达到两层甚至三层以上时,与普通的css编写方式相比,只写一遍群组选择器大大减少了工作量。

3. 插值语句 #{}

通过 #{} 插值语句可以在选择器或属性名中使用变量:

$name: foo;
$attr: border;
p.#{$name} {
  #{$attr}-color: blue;
}

编译为

css

p.foo {
  border-color: blue;
}

4. @at-root

Sass的@at-root指令可以让你在样式表中跳出父级选择器,直接回到根选择器的层级。这对于重构或者修改已有规则时非常方便。

下面是一个示例代码:

.parent {
  color: blue;
  @at-root .new-rule {
      color: red;
    }
}

在上述代码中,.new-rule将会输出为顶级规则,而不是.parent .child .new-rule,因此它的颜色是红色而不是蓝色。这个指令可以用于在具体选择器外部重新定义一些属性并保持样式层次结构的清晰性。

编译后的CSS代码如下所示:

css

.parent {
  color: blue;
}
.new-rule {
  color: red;
}

可以看到,.new-rule被提升到了顶级规则,且不再与.parent选择器相关联,它的颜色为红色。

需要注意的是,在使用@at-root指令时,如果在括号内放置了其他内容(如变量、函数等),那么这些内容可能会引起选择器的语法错误。所以,我们应该尽量只在@at-root括号内使用简单的CSS属性,避免出错。

5. 定义混合指令@mixin

在Sass中,@mixin指令用于创建可重复使用的代码块。通过定义一些通用的样式或功能,并将它们组合成一个mixin,然后在需要时调用这个mixin,可以大大简化样式表的编写

下面是一个示例代码:

@mixin border-radius($radius) {
// 兼容其他浏览器
  -webkit-border-radius: $radius;
  -moz-border-radius: $radius;
  border-radius: $radius;
}
.box {
  background-color: #f1f1f1;
  // 引入定义好的混入样式 
  @include border-radius(5px);
}

编译成CSS 之后

css

.box {
  background-color: #f1f1f1;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
  border-radius: 5px;
}

在上述代码中,我们使用了一个@mixin指令定义了一个名为border-radius的mixin,它接受一个参数$radius。在该mixin内部,我们使用了CSS3的前缀来设置圆角半径属性。

然后,在.box选择器内,我们使用@include指令调用了border-radius mixin,并传入了一个参数5px,从而使.box元素拥有了圆角半径。

需要注意的是,变量(如上面的$radius)可以在mixin内部使用,也可以在调用mixin时传递。此外,mixin还支持默认参数和可变参数,能够更加灵活地应对不同情况。

总之,使用@mixin指令可以方便地实现样式代码的复用和管理,提高工作效率。

@mixin border-radius($radius) {
 border-radius: $radius;
}

也类似js里面的Function

  • border-radius ==> function name(方法名)
  • $radius ==> argument(参数)

6. 引用混合样式@include

使用 @include 指令引用混合样式,格式是在其后添加混合名称,以及需要的参数(可选):

.page-title {
  @include large-text;
  padding: 4px;
  margin-top: 10px;
}

编译为

css

.page-title {
  font-family: Arial;
  font-size: 20px;
  font-weight: bold;
  color: #ff0000;
  padding: 4px;
  margin-top: 10px; }

也可以在最外层引用混合样式,不会直接定义属性,也不可以使用父选择器。

@mixin silly-links {
  a {
    color: blue;
    background-color: red;
  }
}
@include silly-links;

编译为

css

a {
  color: blue;
  background-color: red; }

混合样式中也可以包含其他混合样式,比如

less

@mixin compound {
  @include highlighted-background;
  @include header-text;
}
@mixin highlighted-background { background-color: #fc0; }
@mixin header-text { font-size: 20px; }

混合样式中应该只定义后代选择器,这样可以安全的导入到文件的任何位置。

7. 注释

Sass 支持标准的 CSS 多行注释 /* */,以及单行注释 //,前者会 被完整输出到编译后的 CSS 文件中,而后者则不会,例如:

/* This comment is
 * several lines long.
 * since it uses the CSS comment syntax,
 * it will appear in the CSS output. */
body { color: black; }
// These comments are only one line long each.
// They won't appear in the CSS output,
// since they use the single-line comment syntax.
a { color: green; }

编译为:

css

/* This comment is
 * several lines long.
 * since it uses the CSS comment syntax,
 * it will appear in the CSS output. */
body {
  color: black; }
a {
  color: green; }

可以看到 使用// 进行注释的内容 不会出现在编译之后的文件里面


目录
相关文章
|
Java Linux Windows
windows实现自动部署jar包运行程序
windows实现自动部署jar包运行程序
450 0
|
SQL druid Java
springboot +logback+阿里数据源(druid)打印sql日志以及简化日志输出方式
springboot +logback+阿里数据源(druid)打印sql日志以及简化日志输出方式
2582 0
|
存储 缓存 JSON
10款好用的开源 HarmonyOS 工具库
HarmonyOS NEXT 正式版即将发布,你在学习鸿蒙的过程还有哪些好用的工具库吗,欢迎分享给V 哥,关注威哥爱编程,一起学习鸿蒙开发。
697 4
|
SQL 缓存 关系型数据库
MySQL高级篇——性能分析工具
MySQL的慢查询日志,用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long-query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为 10,意思是运行10秒以上(不含10秒)的语句,认为是超出了我们的最大忍耐时间值。它的主要作用是,帮助我们发现那些执行时间特别长的 SOL 查询,并且有针对性地进行优化,从而提高系统的整体效率。当我们的数据库服务器发生阻塞、运行变慢的时候,检查一下慢查询日志,找到那些慢查询,对解决问题很有帮助。
MySQL高级篇——性能分析工具
|
移动开发 前端开发 JavaScript
vue-router学习一:什么是路由,路由分类,路由安装,路由使用,路由默认路径,history模式,默认的linkActiveClass属性,路由代码跳转
这篇文章是关于Vue.js官方路由管理器vue-router的详细介绍,包括路由的基本概念、分类、安装、使用以及在单页面应用中的路由模式和跳转方法。
961 0
vue-router学习一:什么是路由,路由分类,路由安装,路由使用,路由默认路径,history模式,默认的linkActiveClass属性,路由代码跳转
|
SQL 监控 关系型数据库
使用 pt-query-digest 工具分析 MySQL 慢日志
【8月更文挑战第5天】使用 pt-query-digest 工具分析 MySQL 慢日志
738 3
使用 pt-query-digest 工具分析 MySQL 慢日志
|
Java Windows
如何在windows上运行jar包/JAR文件 如何在cmd上运行 jar包 保姆级教程 超详细
本文提供了一个详细的教程,解释了如何在Windows操作系统的命令提示符(cmd)中运行JAR文件。
6648 1
|
存储 前端开发 开发者
scss概念及使用
【7月更文挑战第11天】
428 1
|
设计模式 JavaScript 算法
vue2 原理【详解】MVVM、响应式、模板编译、虚拟节点 vDom、diff 算法
vue2 原理【详解】MVVM、响应式、模板编译、虚拟节点 vDom、diff 算法
587 0
|
JavaScript 前端开发 开发者
太爽了!这10个 Vite 插件,帮我在开发中节省了大量时间!!
太爽了!这10个 Vite 插件,帮我在开发中节省了大量时间!!