Scss の基本構文と SASS ファイルのインポート方法の簡単な分析
この記事では、最も基本的な使い方と構文を中心に紹介します。Scss で導入された変数やネスティングにより、開発作業が大幅に容易になっていることがわかります。独自の補間式と組み合わせることで、CSS 風の記述は非常に柔軟です!
Sass 構文の紹介
sass には、Sass (初期のインデント形式: Indented Sass) と SCSS ( Sassy CSS)
現在最も一般的に使用されているのは SCSS です。サフィックスが scss に変更された CSS ファイルは、Sassy CSS
構文を使用して直接書き込むことができます。
すべての有効な CSS は有効な SCSS でもあります。
変数の使用
Sass は、変数を識別するために $
記号を使用します。
変数の目的は、スタイル シート全体で一部の情報やデータを保存して再利用できるようにすることです。
色、フォント セット、または再利用したい CSS 値の保存など。
1. 変数宣言
は、CSS プロパティ宣言 (プロパティ宣言
) と非常によく似ています。
たとえば、変数 $highlight-color
を値 #F90
とフォント セット変数で宣言します。
$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 や太字など) が存在する場所であればどこでも使用できます。
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 で使用されます。ダッシュ (ハイフン
) と下線 (アンダースコア
)#変数名の
$link-color をアンダースコア
$link_color で参照できます。
$link-color: blue; a { color: $link_color; } //编译后 a { color: blue; }
対照的に、水平線を使用することが一般的です。
ネスティング (ネスティング<span style="font-size: 18px;"></span>
)
#content article h1 { color: #333 } #content article p { margin-bottom: 1.4em } #content aside { background-color: #EEE }
Scss ネストされた
Sass では、ルール ブロックでのネストを利用します。 -rule ブロックにより、繰り返されるセレクターを 1 回だけ書き込むことができるため、重複が避けられ、読みやすくなります。 たとえば、上記の例では、scss ネストを利用しています:#content { article { h1 { color: #333 } p { margin-bottom: 1.4em } } aside { background-color: #EEE } }
外側の層から内側の層へ、ネストされたルール ブロックを開き、親セレクターが子の選択の前に配置されて新しいセレクターが形成され、内部のネストされたブロック処理がループで開かれます。
##親セレクターの識別子&通常、sass がネストを解析するとき、親セレクター (
#content##) #) は、スペースによってサブセレクター (article および
aside) の前に接続され、(
#contentarticle および
#contentざるを得ない#) を形成します##)、子孫セレクターを生成します。 ただし、疑似クラス
:hover
、複数のクラス名などについては、「子孫セレクター」によって接続しないでください。例:
article a { color: blue; :hover { color: red } }
generatedデフォルトでは、article a :hover
は、ホバーすると、article 要素内の a リンクのすべての子要素を赤にします。これは明らかに間違っています (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 のネストされた機能は、埋め込まれたグループ セレクターを結合解除するときに、埋め込まれた各セレクターを正しく結合します。<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>.container{
h1,h2,h3{
margin-bottom:.8em;
}
}</pre><div class="contentsignin">ログイン後にコピー</div></div><p>sass会组合成 <code>.container h1
、 .container h2
、.container h3
三者的群组选择器:.container h1, .container h2, .container h3{ xxx }
。同样,群组选择器内的嵌套也会以这种方式解析:
nav, aside { a {color: blue} } // nav a, aside a {color: blue}
子组合选择器和同层组合选择器:>、+和~
这三种选择器必须和其他选择器配合使用。
/* 子组合选择器&gt; */ article &gt; 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 } &gt; section { background: #eee } /* 放在 外层选择器后边 */ dl &gt; { dt { color: #333 } dd { color: #555 } } nav + &amp;amp; { margin-top: 0 } }
解开后的css为:
article ~ article { border-top: 1px dashed #ccc } article &gt; footer { background: #eee } article dl &gt; dt { color: #333 } article dl &gt; dd { color: #555 } nav + article { margin-top: 0 }
最后一句,
nav + &amp;
使用父选择器&后,原本默认的嵌套规则不再适用,而是直接应用 & 组合的结果。
属性嵌套
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:&quot;blue&quot;; .nav { border: #{$bWidth} solid #ccc; &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(&quot;women-holding-hands&quot;, &quot; &quot;);
编译后的CSS为:
@charset &quot;UTF-8&quot;; span.emoji-women-holding-hands { font-family: IconFont; font-variant: normal; font-weight: normal; content: &quot; &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: &quot;../fonts/roboto&quot;; @font-face { // 引号中作为一个正常的函数调用解析 src: url(&quot;#{$roboto-font-path}/Roboto-Thin.woff2&quot;) format(&quot;woff2&quot;); font-family: &quot;Roboto&quot;; font-weight: 100; } @font-face { // 使用数学表达式,解析为普通的函数调用 src: url($roboto-font-path + &quot;/Roboto-Light.woff2&quot;) format(&quot;woff2&quot;); font-family: &quot;Roboto&quot;; font-weight: 300; } @font-face { // 作为一个插值表达式特殊处理 src: url(#{$roboto-font-path}/Roboto-Regular.woff2) format(&quot;woff2&quot;); font-family: &quot;Roboto&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 &quot;sidebar&quot;; @import &quot;sidebar.scss&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 &quot;blue-theme&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 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









HTMLはWeb構造を定義し、CSSはスタイルとレイアウトを担当し、JavaScriptは動的な相互作用を提供します。 3人はWeb開発で職務を遂行し、共同でカラフルなWebサイトを構築します。

vue.jsでBootstrapを使用すると、5つのステップに分かれています。ブートストラップをインストールします。 main.jsにブートストラップをインポートしますブートストラップコンポーネントをテンプレートで直接使用します。オプション:カスタムスタイル。オプション:プラグインを使用します。

ブートストラップスプリットラインを作成するには2つの方法があります。タグを使用して、水平方向のスプリットラインを作成します。 CSS Borderプロパティを使用して、カスタムスタイルのスプリットラインを作成します。

Bootstrapフレームワークをセットアップするには、次の手順に従う必要があります。1。CDNを介してブートストラップファイルを参照してください。 2。独自のサーバーでファイルをダウンロードしてホストします。 3。HTMLにブートストラップファイルを含めます。 4.必要に応じてSASS/LESSをコンパイルします。 5。カスタムファイルをインポートします(オプション)。セットアップが完了したら、Bootstrapのグリッドシステム、コンポーネント、スタイルを使用して、レスポンシブWebサイトとアプリケーションを作成できます。

ブートストラップに画像を挿入する方法はいくつかあります。HTMLIMGタグを使用して、画像を直接挿入します。ブートストラップ画像コンポーネントを使用すると、レスポンシブ画像とより多くのスタイルを提供できます。画像サイズを設定し、IMG-Fluidクラスを使用して画像を適応可能にします。 IMGボーダークラスを使用して、境界線を設定します。丸い角を設定し、IMGラウンドクラスを使用します。影を設定し、影のクラスを使用します。 CSSスタイルを使用して、画像をサイズ変更して配置します。背景画像を使用して、背景イメージCSSプロパティを使用します。

回答:ブートストラップの日付ピッカーコンポーネントを使用して、ページで日付を表示できます。手順:ブートストラップフレームワークを紹介します。 HTMLで日付セレクター入力ボックスを作成します。ブートストラップは、セレクターにスタイルを自動的に追加します。 JavaScriptを使用して、選択した日付を取得します。

ブートストラップボタンの使用方法は?ブートストラップCSSを導入してボタン要素を作成し、ブートストラップボタンクラスを追加してボタンテキストを追加します
