浅析Scss基础语法和导入SASS文件的方法

本篇文章主要介绍最基础的使用和语法,可以看到,scss引入的变量和嵌套,极大地方便了开发工作,结合其自带的插值表达式,使得css样式编写非常灵活!

浅析Scss基础语法和导入SASS文件的方法

Sass语法介绍

sass有两种语法格式Sass(早期的缩进格式:Indented Sass)和SCSS(Sassy CSS)

目前最常用的是SCSS,任何css文件将后缀改为scss,都可以直接使用Sassy CSS语法编写。

所有有效的 CSS 也同样都是有效的 SCSS。

立即学习“前端免费学习笔记(深入)”;

使用变量

sass使用$符号来标识变量。

变量的作用就是,让你在整个样式表中保存并重用一些信息或数据。

比如存储颜色(color)、字体集,或任何你想重用的CSS值。

1. 变量声明

和css属性的声明(property declaration)很像!

如,声明值为 #F90 的变量 $highlight-color,字体集变量:

$highlight-color: #F90;$font-stack: Helvetica, sans-serif; body {    font: 100% $font-stack;    color: $highlight-color;}

输出结果为:

body {    font: 100% Helvetica, sans-serif;    color: #F90;}

变量有作用域,当变量定义在css规则块内,则该变量只能在此规则块内使用。

2. 变量引用

凡是css属性的标准值(比如说1px或者bold)可存在的地方,就可以使用变量。

css生成时,变量会被它们的值所替代。

$color:#A34554;.box {  width: 300px;  height: 400px;  &-left{    width: 30%;    color: $color;  }}

生成css为:

.box {    width: 300px;    height: 400px;}.box-left{    width: 30%;    color: #A34554;}

声明变量时,变量的值也可以引用其他变量,如下 $highlight-border 变量中使用了 $highlight-color 变量:

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

3. 变量名中的中横线(hyphen)和下划线(underscore)

sass的变量名可以使用中划线和下划线,用中划线声明的变量可以使用下划线的方式引用,反之亦然。

也就是,变量名中的中横线和下划线没有区别,两者互通。

比如下面的示例,中横线的$link-color,可以通过下划线的$link_color引用。

$link-color: blue;a {  color: $link_color;}//编译后a {  color: blue;}

相对,使用中横线更普遍些!

嵌套(<span style="font-size: 18px;">Nesting</span>

css中重复写选择器是非常恼人的。尤其是嵌套的html元素样式,如:

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

Scss的嵌套

Sass中,借助在规则块中嵌套子规则块,可以使重复选择器只写一遍,避免重复而且可读性更高。

比如上面的示例,借助scss嵌套:

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

scss嵌套打开(解析)的规则是:从外层到内层,将嵌套规则块打开,父级的选择器放在子级选择的前面组成一个新的选择器,然后再循环打开内部的嵌套块处理。

父选择器的标识符&

通常,sass解析嵌套时,把父选择器(#content)通过一个空格连接到子选择器的前边(articleaside)形成(#content article#content aside),即生成后代选择器。

但是对于伪类:hover、对于多class名等情况,则不应该以”后代选择器”的方式连接,比如:

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

默认生成的article a :hover会让article元素内a链接的所有子元素在被hover时都会变成红色,显然是不正确的(应该应用到a自身)。

为此sass提供了一种特殊的选择器:父选择器&。它可以更好的控制嵌套规则!

只要是选择器可以放置的地方,就都可以在嵌套中同样使用&

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

展开时,&被父选择器直接替换:

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

通过&可以在嵌套块内,实现在父选择器之前添加选择器(非常灵活)。

如:

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

群组选择器嵌套

css中,使用,分割的群组选择器可以同时应用样式在多个选择器上,如:

h1, h2 {  margin: 0;}

但是,如果想对一个特定的容器元素内的多个元素,使用群组选择器时,就会有很多重复性工作。

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

而,sass的嵌套特性,在解开一个内嵌的群组选择器时,会把每一个内嵌选择器正确的结合起来:

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

sass会组合成 .container h1.container h2.container h3 三者的群组选择器:.container h1, .container h2, .container h3{ xxx }

同样,群组选择器内的嵌套也会以这种方式解析:

nav, aside {  a {color: blue}}// nav a, aside a {color: blue}

子组合选择器和同层组合选择器:>、+和~

这三种选择器必须和其他选择器配合使用。

/* 子组合选择器> */article > section { border: 1px solid #ccc }/* 相邻组合选择器+  选择 元素后紧跟的指定元素 */header + p { font-size: 1.1em }/* 同层全体组合选择器~,选择所有跟在article后的同层article元素 */article ~ article { border-top: 1px dashed #ccc }

在sass中使用时,可以通过嵌套直接生成正确的结果(位于外层选择器的后面,或内层选择器的前面均可!),而不需要使用&

article {  /* 放在 里层选择器前边 */  ~ article { border-top: 1px dashed #ccc }  > section { background: #eee }  /* 放在 外层选择器后边 */  dl > {    dt { color: #333 }    dd { color: #555 }  }  nav + & { margin-top: 0 }}

解开后的css为:

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

最后一句,nav + & 使用父选择器&后,原本默认的嵌套规则不再适用,而是直接应用 & 组合的结果

属性嵌套

sass中,属性也可以进行嵌套!

把属性名从中划线-的地方断开,在该属性后边添加一个冒号:,紧跟一个{ }块,把子属性部分写在这个{ }块中。这样就可以实现属性的嵌套。

nav {  border: {     style: solid;     width: 1px;     color: #ccc;  }}

编译生成如下:

nav {  border-style: solid;  border-width: 1px;  border-color: #ccc;}

结合属性的缩写形式,可以实现在嵌套属性中指明需要额外样式的特殊子属性。

nav {  border: 1px solid #ccc {    /* 单独设置的 子属性 */     left: 0px;     right: 0px;  }}/* 生成后 */nav {  border: 1px solid #ccc;  border-left: 0px;  border-right: 0px;}

插值(Interpolation

类似 es6 中的插值表达式,Sass也提供了插值计算的方式。

插值几乎可以用在任何地方,作为一个 SassScript 表达式的嵌入结果。

Sass的插值写法为:#{$variable_name}

利用插值动态生成选择器、属性名和值

可以使用插值获取变量或函数调用到一个选择器、或属性值。

比如:

$bWidth:5px;$style:"blue";.nav {    border: #{$bWidth} solid #ccc;    &.nav-#{$style} {        color: #{$style};    }}// 编译为:.nav {  border: 5px solid #ccc;}.nav.nav-blue {  color: blue;}

属性名使用插值变量

使用插值的一个好处是,可以直接将变量值作为属性名使用。

如下,通过插值,属性名直接用变量来替代,这样就可以动态生成属性。

不使用插值,直接在属性的位置使用变量$property,将会被处理为对变量的赋值!

$value:grayscale(50%);$property:filter;.nav{   #{$property}: $value;}// 编译为:.nav {   filter: grayscale(50%);}

在 @mixin 中使用插值

@mixin 混合器将在下一节介绍。

插值在写mixin时非常有用,比如下面通过传递的参数创建选择器(来自官网):

@mixin define-emoji($name, $glyph) {  span.emoji-#{$name} {    font-family: IconFont;    font-variant: normal;    font-weight: normal;    content: $glyph;  }}@include define-emoji("women-holding-hands", " ");

编译后的CSS为:

@charset "UTF-8";span.emoji-women-holding-hands {  font-family: IconFont;  font-variant: normal;  font-weight: normal;  content: " ";}

css的特殊函数(Special Functions【仅作了解】)

CSS中的许多函数都可以在Sass中正常使用,但也有一些特殊的函数有所不同。

所有的特殊函数,调用都返回不带引号的字符串。

url()

url() 函数在CSS中很常见,但是它的参数可以是带引号或不带引号的URL。

不带引号的URL在 Sass 中是无效的,所以需要特殊逻辑进行解析。

如下是url()的示例,如果url()的参数是有效的不带引号URL,Sass会原样解析它,并且不带引号时也可以使用插值表达式;如果不是有效的不带符号URL,将会解析其中的变量或函数,并转换为普通的CSS函数调用。

$roboto-font-path: "../fonts/roboto";@font-face {    // 引号中作为一个正常的函数调用解析    src: url("#{$roboto-font-path}/Roboto-Thin.woff2") format("woff2");    font-family: "Roboto";    font-weight: 100;}@font-face {    // 使用数学表达式,解析为普通的函数调用    src: url($roboto-font-path + "/Roboto-Light.woff2") format("woff2");    font-family: "Roboto";    font-weight: 300;}@font-face {    // 作为一个插值表达式特殊处理    src: url(#{$roboto-font-path}/Roboto-Regular.woff2) format("woff2");    font-family: "Roboto";    font-weight: 400;}

calc(), clamp(), element()

算数表达式 calc() 和 Sass 的冲突;element() 的参数可以color。

使用它们时,Sass除了处理插值,其他都会保持原样解析!

min() 和 max()

Sass早于CSS支持使用 min() 和 max(),为了兼容所以需要特殊处理。

如果 min() 和 max() 函数调用的是普通CSS,则会被编译为CSS的  min() 和 max()。

普通CSS(Plain CSS)包含嵌套调用 calc(), env(), var(), min(), max() 以及 插值。

但是,只要包含 SassScript 的特性,比如 Sass的变量、函数调用,min() 和 max() 就会被作为 Sass 的函数处理。

$padding: 12px;.post {  // max()没有使用插值以外的Sass特性, 所以将会被编译为 CSS 的 max().  padding-left: max(#{$padding}, env(safe-area-inset-left));  padding-right: max(#{$padding}, env(safe-area-inset-right));}.sidebar {  // 应为没有通过插值使用sass变量,此处会调用Sass内置的 max()  padding-left: max($padding, 20px);  padding-right: max($padding, 20px);}

注释

sass另外提供了一种不同于css标准注释格式/* ... */的注释语法,即静默注释,以//开头,直到行末结束。

在生成的css中,静默注释将会被抹除,这样,可以按需抹除一些注释,而不需要全部显示给其他人。

body {  color: #333; // 这种注释内容不会出现在生成的css文件中  padding: 0; /* 这种注释内容会出现在生成的css文件中 */}

当标准注释 /* ... */ 出现在原生css不允许的地方时,也会在编译后的css中被抹去。

多行注释 /* ... */ 在 compressed 模式下会被移除,但是如果以 /*! 开头,则仍会包含在生成的 CSS 中。

导入SASS文件

使用@import可以导入另外的sass文件(在生成css文件时会把相关文件导入进来)。在被导入文件中定义的变量和混合器maxin等均可在导入文件中使用。

css中的@import导入其他css文件很不常用,因为它是在执行到@import规则时才会加载其他的css文件,这会导致页面加载变慢、样式的错乱和延迟等问题。

注:Sass官方目前已经开始打算用 @use 替代 @import 规则,因此鼓励使用 @use。但是,目前只有 Dart Sass 支持 @use,因此,现阶段主要还是使用 @import。

scss导入sidebar.scss文件,可以使用如下规则:

@import "sidebar";@import "sidebar.scss";

sass局部文件(或分部文件,partial file

有的sass文件是专门用于被@import命令导入的,而不需要单独生成css文件,这样的文件称为局部文件。

sass的约定是:sass局部文件的文件名以下划线 _ 开头,sass在编译时就不会将这个文件编译输出为css。

@import 局部文件时,可以省略文件开头的下划线和.scss后缀,不需要写文件的全名。

局部文件可以被多个不同的文件引入。对于需要在多个页面甚至多个项目中使用的样式,非常有用。

默认变量值

通常情况下,在反复多次声明一个变量时,只有最后一个声明有效(即使用最后一个声明赋予的值)。

sass通过!default标签可以实现定义一个默认值(类似css的!important标签对立),!default表示如果变量被声明赋值了则用新声明的值,否则用默认值。

比如一个局部文件中:

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

如果用户在导入该sass局部文件之前,声明了一个 $fancybox-width 变量,那么局部文件中对 $fancybox-width 赋值400px的操作就无效。如果用户没有做这样的声明,则 $fancybox-width 将默认为400px。

也就是,在后面使用 !default 声明的变量,并不会覆盖其前面声明赋值的相同变量值。

嵌套导入

sass可以在嵌套规则块的内部使用@import导入局部文件【局部文件会被直接插入到css规则内导入它的地方】。

如局部文件_blue-theme.sass内容为:

aside {  background: blue;  color: white;}

将它导入到一个CSS规则内:

.blue-theme {@import "blue-theme"}

生成的结果跟你直接在 .blue-theme 选择器内写 _blue-theme.scss 文件中的内容完全一样。

.blue-theme {  aside {    background: blue;    color: #fff;  }}

原生的CSS导入的支持

sass中支持原生css的导入,会生成原生的scc @import(在浏览器解析css时再下载并解析)。

sass中@import生成原生css导入的条件是:

被导入文件的名字以.css结尾;被导入文件的名字是一个URL地址(比如http://www.sass.hk/css/css.css%EF%BC%89被导入文件的名字是CSS的url()值。

如果想将原始的css文件,当做sass导入,可以直接修改.css后缀为.scss(sass语法完全兼容css)。

更多编程相关知识,请访问:编程入门!!

以上就是浅析Scss基础语法和导入SASS文件的方法的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1621874.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
CSS如何给文字二次加粗并加上边框(技巧分享)
上一篇 2025年12月24日 07:39:45
normalize和css reset分别是什么文件?又有什么区别?
下一篇 2025年12月24日 07:39:54

相关推荐

  • 修复Django电商项目中AJAX过滤产品列表图片不显示问题

    在Django电商项目中,当使用AJAX动态加载过滤后的产品列表时,常遇到图片无法正常显示的问题。这通常是由于前端模板中图片加载方式(如data-setbg属性结合JavaScript库)与AJAX动态内容更新机制不兼容所致。解决方案是直接在AJAX返回的HTML中使用标准的标签来渲染图片,确保浏览…

    2026年5月10日
    000
  • css max-height属性怎么用

    max-height 属性设置元素的最大高度。 说明 该属性值会对元素的高度设置一个最高限制。因此,元素可以比指定值矮,但不能比其高。不允许指定负值。 注意:max-height 属性不包括外边距、边框和内边距。 立即学习“前端免费学习笔记(深入)”; 值描述none 默认。定义对元素被允许的最大高…

    2026年5月10日
    100
  • 修复点击时按钮抖动:CSS垂直对齐实践

    本文探讨了在Web开发中,交互式按钮(如播放/暂停按钮)在点击时发生意外垂直位移的问题。通过分析CSS样式变化对元素布局的影响,我们发现这是由于按钮不同状态下的边框样式和内边距改变,以及默认的垂直对齐行为共同作用所致。核心解决方案是利用CSS的vertical-align属性,将其设置为middle…

    2026年5月10日
    100
  • 使用 Jupyter Notebook 进行探索性数据分析

    Jupyter Notebook通过单元格实现代码与Markdown结合,支持数据导入(pandas)、清洗(fillna)、探索(matplotlib/seaborn可视化)、统计分析(describe/corr)和特征工程,便于记录与分享分析过程。 Jupyter Notebook 是进行探索性…

    2026年5月10日
    000
  • 如何在HTML中插入表单元素_HTML表单控件与输入类型使用指南

    HTML表单通过标签构建,包含action和method属性定义数据提交目标与方式,常用input类型如text、password、email等适配不同输入需求,配合label、required、placeholder提升可用性,结合textarea、select、button等控件实现完整交互,是…

    2026年5月10日
    100
  • 前端缓存策略与JavaScript存储管理

    根据数据特性选择合适的存储方式并制定清晰的读写与清理逻辑,能显著提升前端性能;合理运用Cookie、localStorage、sessionStorage、IndexedDB及Cache API,结合缓存策略与定期清理机制,可在保证用户体验的同时避免安全与性能隐患。 前端缓存和JavaScript存…

    2026年5月10日
    200
  • JavaScript 动态菜单点击高亮效果实现教程

    本教程详细介绍了如何使用 JavaScript 实现动态菜单的点击高亮功能。通过事件委托和状态管理,当用户点击菜单项时,被点击项会高亮显示(绿色),同时其他菜单项恢复默认样式(白色)。这种方法避免了不必要的DOM操作,提高了性能和代码可维护性,确保了无论点击方向如何,功能都能稳定运行。 动态菜单高亮…

    2026年5月10日
    200
  • html5怎么画实线_HTML5用CSS border-style:solid画元素实线边框【绘制】

    可通过CSS的border-style属性设为solid添加实线边框:一、内联样式用border:2px solid #000;二、内部样式表统一设置如div{border:1px solid #333};三、外部CSS文件定义.my-box{border:3px solid red}并引入;四、单…

    2026年5月10日
    200
  • css如何禁止滚动条

    css禁止滚动条的方法:1、完全隐藏,代码为【】;2、在不需要时隐藏,代码为【】;3、样式表方法。 本教程操作环境:windows7系统、css3版,DELL G3电脑。 1、完全隐藏 在里加入scroll=”no”,可隐藏滚动条;   立即学习“前端免费学习笔记(深入)”;…

    2026年5月10日
    000
  • 动态更新圆形进度条:JavaScript成绩计算器集成指南

    本文档旨在指导开发者如何将JavaScript成绩计算系统与动态圆形进度条集成,实现可视化展示平均成绩。我们将详细讲解如何修改现有的JavaScript代码,使其在计算出平均分后,能够动态更新圆形进度条的进度,从而提供更直观的用户体验。本文档包含详细的代码示例和注意事项,帮助开发者轻松实现这一功能。…

    2026年5月10日
    000
  • React组件中动态属性值的管理与同步:利用状态实现受控组件

    本教程旨在解决react组件中动态属性值同步使用的问题。我们将探讨如何利用react的`usestate` hook来管理组件内部状态,从而实现一个属性的值动态地影响另一个属性,并构建出可预测、易于维护的受控组件。文章将通过具体代码示例,详细阐述从初始化状态到处理状态更新的完整过程,并强调受控组件在…

    2026年5月10日
    000
  • 如何讲html和css_讲解HTML与CSS结合使用基础【基础】

    需将HTML与CSS结合使用以实现网页结构与样式的分离:HTML定义标题、段落等语义结构,CSS控制颜色、字体等外观;可通过内联样式、内部样式表或外部CSS文件引入样式,并利用类选择器和ID选择器精准应用。 如果您希望网页不仅展示内容,还能具备基本的样式和结构布局,则需要将HTML与CSS结合使用。…

    2026年5月10日
    100
  • CSS伪元素与固定背景:移动友好的实现策略

    本文深入探讨了如何利用CSS的::before伪元素、position: fixed和z-index属性,创建一种在移动设备上表现更稳定的全屏固定背景效果,以替代传统background-attachment: fixed可能存在的兼容性问题。教程将详细解析这些核心CSS概念及其在构建响应式布局中的…

    2026年5月10日
    000
  • JavaScript计算器开发:解决数值显示与初始化问题

    本教程深入探讨了使用JavaScript构建计算器时常见的数值显示异常问题,特别是由于类属性未初始化导致的`Cannot read properties of undefined`错误。我们将详细分析问题根源,并通过在构造函数中调用初始化方法来解决该问题,同时优化显示逻辑,确保计算器功能稳定且界面显…

    2026年5月10日
    000
  • HTML表单如何实现PWA支持?怎样添加离线功能?

    答案是利用Service Worker缓存资源并结合Background Sync API实现离线提交与自动同步。通过注册Service Worker缓存表单相关文件,拦截提交行为,将离线数据存入IndexedDB,并注册后台同步任务,待网络恢复后由Service Worker自动发送数据,确保提交…

    2026年5月10日
    000
  • CSS技巧:在复杂悬停效果中确保图像始终可见

    CSS技巧:在复杂悬停效果中确保图像始终可见CSS技巧:在复杂悬停效果中确保图像始终可见CSS技巧:在复杂悬停效果中确保图像始终可见CSS技巧:在复杂悬停效果中确保图像始终可见

    本教程探讨如何在包含悬停效果的CSS卡片布局中,确保图像始终显示在最顶层而不被裁剪或遮挡。通过调整HTML结构,利用CSS的position和z-index属性,以及引入pointer-events,我们将解决图像被overflow: hidden和扩展叠加层遮盖的问题,实现复杂的视觉交互效果。 在…

    2026年5月10日 用户投稿
    000
  • HTML文档如何工作?如何编辑HTML格式文件?

    HTML文档如何工作?如何编辑HTML格式文件?HTML文档如何工作?如何编辑HTML格式文件?HTML文档如何工作?如何编辑HTML格式文件?HTML文档如何工作?如何编辑HTML格式文件?

    浏览器解析和渲染html的过程包括:1. 解析html构建dom树;2. 结合css构建渲染树;3. 布局计算元素位置;4. 绘制像素到屏幕。编辑html可使用记事本、vs code、sublime text等文本或代码编辑器,其中vs code因语法高亮、自动补全和插件生态成为主流选择。标准htm…

    2026年5月10日 用户投稿
    000
  • JavaScript 中使用多个 querySelector 更新页面元素

    本文旨在讲解如何在 JavaScript 的 if 语句中使用多个 querySelector 来更新不同的页面元素,并提供示例代码和注意事项,帮助开发者理解并应用此技术。通过该方法,可以根据特定条件动态修改页面内容,提升用户体验。 使用 querySelector 在 if 语句中更新多个元素 在…

    2026年5月10日
    100
  • HTTP客户端请求缓存与重用优化

    合理使用客户端缓存与连接复用可显著提升Web性能。通过Cache-Control、ETag和Last-Modified实现条件请求,避免重复传输;启用Keep-Alive并维护TCP连接池以减少握手开销;优先采用HTTP/2或HTTP/3实现多路复用与低延迟连接;针对静态资源设置长缓存,动态数据使用…

    2026年5月10日
    000
  • CodeIgniter在IIS环境下实现URL重写与index.php移除指南

    本教程详细指导如何在IIS服务器上部署的CodeIgniter应用中,移除URL中不必要的index.php。核心解决方案涉及修改CodeIgniter的config.php文件,将$config[‘index_page’]设置为空,并辅以正确的IIS web.config重…

    2026年5月10日
    100

发表回复

登录后才能评论
关注微信