目錄
Sass語法介紹
导入SASS文件
首頁 web前端 css教學 淺析Scss基礎語法和匯入SASS檔案的方法

淺析Scss基礎語法和匯入SASS檔案的方法

Oct 28, 2021 am 11:07 AM
css scss

本篇文章主要介紹最基礎的使用和語法,可以看到,Scss引入的變數和嵌套,大大方便了開發工作,結合其自帶的插值表達式,使得css樣式編寫非常靈活!

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;
}
登入後複製

插值(<span style="font-size: 18px;">Interpolation</span>

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

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

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

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

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

比如:

$bWidth:5px;
$style:&amp;amp;amp;amp;quot;blue&amp;amp;amp;amp;quot;;

.nav {
    border: #{$bWidth} solid #ccc;
    &amp;amp;amp;amp;amp;.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(&amp;amp;amp;amp;quot;women-holding-hands&amp;amp;amp;amp;quot;, &amp;amp;amp;amp;quot; &amp;amp;amp;amp;quot;);
登入後複製

编译后的CSS为:

@charset &amp;amp;amp;amp;quot;UTF-8&amp;amp;amp;amp;quot;;
span.emoji-women-holding-hands {
  font-family: IconFont;
  font-variant: normal;
  font-weight: normal;
  content: &amp;amp;amp;amp;quot; &amp;amp;amp;amp;quot;;
}
登入後複製

css的特殊函数(<span style="font-size: 18px;">Special Functions</span>【仅作了解】)

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

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

url()

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

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

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

$roboto-font-path: &amp;amp;amp;amp;quot;../fonts/roboto&amp;amp;amp;amp;quot;;

@font-face {
    // 引号中作为一个正常的函数调用解析
    src: url(&amp;amp;amp;amp;quot;#{$roboto-font-path}/Roboto-Thin.woff2&amp;amp;amp;amp;quot;) format(&amp;amp;amp;amp;quot;woff2&amp;amp;amp;amp;quot;);

    font-family: &amp;amp;amp;amp;quot;Roboto&amp;amp;amp;amp;quot;;
    font-weight: 100;
}

@font-face {
    // 使用数学表达式,解析为普通的函数调用
    src: url($roboto-font-path + &amp;amp;amp;amp;quot;/Roboto-Light.woff2&amp;amp;amp;amp;quot;) format(&amp;amp;amp;amp;quot;woff2&amp;amp;amp;amp;quot;);

    font-family: &amp;amp;amp;amp;quot;Roboto&amp;amp;amp;amp;quot;;
    font-weight: 300;
}

@font-face {
    // 作为一个插值表达式特殊处理
    src: url(#{$roboto-font-path}/Roboto-Regular.woff2) format(&amp;amp;amp;amp;quot;woff2&amp;amp;amp;amp;quot;);

    font-family: &amp;amp;amp;amp;quot;Roboto&amp;amp;amp;amp;quot;;
    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 &amp;amp;amp;amp;quot;sidebar&amp;amp;amp;amp;quot;;

@import &amp;amp;amp;amp;quot;sidebar.scss&amp;amp;amp;amp;quot;;
登入後複製

sass局部文件(或分部文件,<span style="font-size: 18px;">partial file</span>

有的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 &amp;amp;amp;amp;quot;blue-theme&amp;amp;amp;amp;quot;}
登入後複製

生成的结果跟你直接在 .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檔案的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vue中怎麼用bootstrap vue中怎麼用bootstrap Apr 07, 2025 pm 11:33 PM

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

HTML,CSS和JavaScript的角色:核心職責 HTML,CSS和JavaScript的角色:核心職責 Apr 08, 2025 pm 07:05 PM

HTML定義網頁結構,CSS負責樣式和佈局,JavaScript賦予動態交互。三者在網頁開發中各司其職,共同構建豐富多彩的網站。

了解HTML,CSS和JavaScript:初學者指南 了解HTML,CSS和JavaScript:初學者指南 Apr 12, 2025 am 12:02 AM

WebDevelovermentReliesonHtml,CSS和JavaScript:1)HTMLStructuresContent,2)CSSStyleSIT和3)JavaScriptAddSstractivity,形成thebasisofmodernWebemodernWebExexperiences。

bootstrap怎麼設置框架 bootstrap怎麼設置框架 Apr 07, 2025 pm 03:27 PM

要設置 Bootstrap 框架,需要按照以下步驟:1. 通過 CDN 引用 Bootstrap 文件;2. 下載文件並將其託管在自己的服務器上;3. 在 HTML 中包含 Bootstrap 文件;4. 根據需要編譯 Sass/Less;5. 導入定製文件(可選)。設置完成後,即可使用 Bootstrap 的網格系統、組件和样式創建響應式網站和應用程序。

bootstrap怎麼寫分割線 bootstrap怎麼寫分割線 Apr 07, 2025 pm 03:12 PM

創建 Bootstrap 分割線有兩種方法:使用 標籤,可創建水平分割線。使用 CSS border 屬性,可創建自定義樣式的分割線。

bootstrap怎麼插入圖片 bootstrap怎麼插入圖片 Apr 07, 2025 pm 03:30 PM

在 Bootstrap 中插入圖片有以下幾種方法:直接插入圖片,使用 HTML 的 img 標籤。使用 Bootstrap 圖像組件,可以提供響應式圖片和更多樣式。設置圖片大小,使用 img-fluid 類可以使圖片自適應。設置邊框,使用 img-bordered 類。設置圓角,使用 img-rounded 類。設置陰影,使用 shadow 類。調整圖片大小和位置,使用 CSS 樣式。使用背景圖片,使用 background-image CSS 屬性。

bootstrap按鈕怎麼用 bootstrap按鈕怎麼用 Apr 07, 2025 pm 03:09 PM

如何使用 Bootstrap 按鈕?引入 Bootstrap CSS創建按鈕元素並添加 Bootstrap 按鈕類添加按鈕文本

bootstrap怎麼調整大小 bootstrap怎麼調整大小 Apr 07, 2025 pm 03:18 PM

要調整 Bootstrap 中元素大小,可以使用尺寸類,具體包括:調整寬度:.col-、.w-、.mw-調整高度:.h-、.min-h-、.max-h-

See all articles