もともと知っているつもりだったのですが、基本的にsass
は以前の会社で企画書を書くときに使っていた書き方で、とてもスムーズでした。しばらくElement Plus
は、自分のコンポーネントライブラリのエンジニアリング構造を参考に設計していたのですが、Element Plus
その優雅なsass
使い方を見て、自分の浅はかさと無知を恥じるようになりました。これがきっかけで体系的に勉強を始めましたsass
. この間、何度も学びと共有を書きたいと思っていましたが、いろいろあってどれも問題なく終わってしまいました. 今日、やっと忙しいスケジュールから抜け出し、励ましの言葉を伝えることができました。
1.はじめに
非常に成熟したcss
プリプロセッサとして、sass
多くの特別な機能を備えているため、よりエレガントで簡潔なスタイルのコードを書くことができます。以前css
にスタイル変数を導入し、ネスティング、関数、ミキシング、コマンド制御などの機能もサポートしており、スタイルのゲームプレイを大幅に拡張します。
sass
と の 2 つの構文形式がありSCSS
ますSass
。
の中でSCSS
、現在広く使われている形式であり、 の文法ベースのみを展開したものCSS3
です。Sass
CSS hacks
vendor-specific syntax
.scss
これはSass
、中括弧の代わりにインデントを使用し、セミコロンの代わりに改行を使用する、最も初期の文法形式です. この形式は特に簡潔で、より便利に記述できます. この形式もすべての機能をサポートしていますがSass
、いくつかの場所でSCSS
異なる表現を使用しており、そのファイル拡張子は.sass
.
どちらの形式も、別の形式のファイルにインポート (@import) して使用できます。またsass-convert
、コマンドライン ツールを使用して別の形式に変換することもできます。
# Sass转为SCSS
sass-convert style.sass style.scss
# SCSS转为Sass
sass-convert style.scss style.sass
ここではインストールと使用については紹介しませんが、Sass
結局のところ、ほとんどのプロジェクトはwebpack
パッケージ化され、他の構築ツールを使用してビルドされloader
、コンパイルを支援する対応するツールや他のツールによって補完されます。sass
コマンド ラインでコマンドを使用してスタイル ファイルをコンパイルする必要があるプロジェクトはほとんどないはずです。
ただし、エンコーディング形式には言及する価値があります。と同様にCSS
、 を使用@hcarset
して特定のエンコーディング形式を宣言できます。スタイル ファイルの先頭 (最初の文字)@charset "encoding-name"
に挿入するSass
と、指定されたエンコーディング形式に従ってファイルがコンパイルされます。もちろん、使用するエンコード形式はUnicode
文字セットに変換可能でなければなりません。Sass
ファイルをUTF-8
encodingで出力CSS
し、コンパイルされたファイルに文字以外が現れる場合は、出力ファイルに宣言をASCII
追加します。@charset
2.基本機能拡張
1. ネストされたルールNested Rules
Sass
CSS
あるスタイル セットを別のスタイル セットに埋め込むことをサポートしCSS
、内側のスタイルは外側のセレクターを親セレクターとして使用します。
#main p {
color: #00ff00;
width: 97%;
.redbox {
background-color: #ff0000;
color: #000000;}
}
これはSass
次のようにコンパイルされますCSS
。
#main p {
color: #00ff00;
width: 97%;
}
#main p .redbox {
background-color: #ff0000;
color: #000000;
}
ネスティング機能によりコード量が大幅に削減され、面倒な親セレクターを繰り返し記述する必要がなくなり、管理が容易になります。
2. 親セレクター&
( Referencing Parent Selectors: &
)
ネストでは、要素の:hover
スタイルを設定する場合やbody
、要素に特定の値がある場合など、親セレクターを参照する必要がある場合は、親セレクター、つまりその外側のセレクターを参照するために使用classname
できます。&
a {
font-weight: bold;
text-decoration: none;
// & 引用父元素&:hover { text-decoration: underline; }
// body.firefox 可以直接引用
body.firefox & { font-weight: normal; }
}
次のようにSass
コンパイルされますCSS
。
a {
font-weight: bold;
text-decoration: none;
}
a:hover {
text-decoration: underline;
}
body.firefox a {
font-weight: normal;
}
&
セレクターの最初の文字である必要がありますが、その後にサフィックスを続けて複合セレクターを生成できます。
#main {
color: black;
// #main-sidebar 字符串拼接,这就有点好玩了&-sidebar { border: 1px solid; }
}
これは次のようにコンパイルされます。
#main {
color: black;
}
#main-sidebar {
border: 1px solid;
}
3. 属性の入れ子Nested Properties
両方が属性として名前空間を持っているなどCSS
、同じ名前空間 ( ) に従うものもあります。現時点では、記述を簡素化し、管理を容易にするために、属性を名前空間にネストすることが許可されています。namespace
font-family, font-size, font-weight
font
Sass
.funky {
// 注意命名空间这里要加冒号
font: {
family: fantasy;
size: 30em;
weight: bold;}
}
次のようにコンパイルしますCSS
。
.funky {
font-family: fantasy;
font-size: 30em;
font-weight: bold;
}
その中で、名前空間には独自の属性値を含めることもできます。
.funky {
// font-size/line-height
font: 20px/24px {
family: fantasy;
weight: bold;}
}
コンパイルすると:
.funky {
/* font-size/line-height */
font: 20px/24px;
font-family: fantasy;
font-weight: bold;
}
4. プレースホルダー セレクター%foo
( Placeholder Selectors
: %foo
)
プレースホルダー セレクターは、シンボルがであり、命令を介して呼び出す必要があることを除いて、id
セレクターおよびセレクターに似ています。そうしないと、コンパイルに参加しません。class
%
@extend
Sass
5. 注意事項Comments
Sass
単一行コメント//
と複数行コメントの両方がサポートされてい/* */
ます。複数行のコメントはコンパイル済みCSS
ファイルに完全に出力されます。複数行のコメントの最初の文字は、このコメントを圧縮出力モード!
で保持し、通常は著作権情報を追加するために使用されるファイルに出力することを意味します。補間ステートメント ( )は、複数行のコメントで変数値を出力できます。(補間に使用します。)CSS
interpolation
#{$val}
// Sass
$version: "1.2.3";
/* This CSS is generated by My Snazzy Framework version #{$version}. */
// 编译为CSS:
/* This CSS is generated by My Snazzy Framework version 1.2.3. */
3.高度な機能拡張
1.SassScript
Sass
という名前の強力な関数を提供しますSassScript
。この関数は任意の属性に適用でき、変数や算術演算などの追加関数を属性で使用できます。
1.1Interactive Shell
Interactive Shell
コマンド ラインでテストできる機能SassScript
。コマンド ラインsass -i
で と入力し、テストする内容を入力しSassScript
て出力を表示します。
sass -i
>> "Hello, Sassy World!"
"Hello, Sassy World!"
>> 1px + 1px + 1px
3px
>> #777 + #777
#eeeeee
>> #777 + #888
white
1.2 変数$
Variables: $
変数の使用は非常に簡単です。
// 声明变量
$width: 5em;
#main {// 使用变量
width: $width;
}
変数にはブロック レベルのスコープがあり、ネストされたルール内の変数は、ネストされたルール内でのみ使用できるローカル変数です。グローバル変数はどこでも使用できます。宣言を追加!global
すると、ローカル変数がグローバル変数に変わります。
// Sass
#main {// !global声明,转换为全局变量
$width: 5em !global;
width: $width;
}
#sidebar {
// 使用全局变量
width: $width;
}
// 编译为CSS:
#main {
width: 5em;
}
#sidebar {
width: 5em;
}
1.3 データ型Data Types
SassScript
7
主なデータ型がサポートされています:
- 数字、単位
1, 2, 3, 6, 10px
など; - string (引用符付きと引用符なしの両方がサポートされています),
"foo", "bar", baz
; - 色
blue, #04a3f9, rgba(255,0,0,0.5)
など; - ブール値、
true, false
; - ヌル、
null
; list
区切り文字としてスペースまたはカンマを使用した配列 ( )1.5em 1em 0 2em, Helvetica, Arial, sans-serif
;maps
JS
、これはwhereObject
、と同等(key1: value1, key2: value2)
です。
さらに、文字セットや宣言など、他の属性値SassScript
もサポートされていますが、これらは特別に扱われず、引用符で囲まれていない文字列として扱われます。CSS
Unicode
!important
1.3.1 文字列
SassScript
引用符付き文字列 ( )と引用符なし文字列 ( )の両方がquoted strings
サポートされています。これら 2 つの文字列はコンパイル時に相互に変換されませんが、1 つのケースを除きます。( ) を使用すると、引用符で囲まれた文字列が引用符なしの文字列にコンパイルされます。これは、 でセレクター名を引用するのに便利です。unquoted strings
#{}
interpolation
mixin
// Sass
@mixin firefox-message($selector) {
body.firefox #{$selector}:before {
content: "Hi, Firefox users!";}
}
@include firefox-message(".header");
// 编译为CSS
body.firefox .header:before {
content: "Hi, Firefox users!";
}
1.3.2 配列 ( lists
)
配列とは、スペースまたはカンマで区切られた、またはそのような一連の値Sass
を処理する方法を指します。実際、個々の値も 1 つの値のみを含む配列として扱われます。CSS
margin: 10px 15px 0 0
font-face: Helvetica, Arial, sans-serif
配列自体には多くの関数はありませんが、Sass list functions
多くの新しい関数を配列にもたらします:nth
関数は配列内の項目に直接アクセスできます;join
関数は複数の配列を一緒に接続できます;append
関数は配列に新しい値を追加できます;@each
関数配列内の各項目を走査できます。
配列にはサブ配列を含めることができます。たとえば1px 2px, 5px 6px
、 は と2 つ1px 2px
の配列を含む配列です。5px 6px
内側と外側の配列が同じ分離方法を使用している場合、括弧を使用して内側のレイヤーをラップする必要があります(1px 2px) (5px 6px)
。括弧はコンパイル時に保持されないため、どちらの書き方をしても1px 2px, 5px 6px
、(1px 2px) (5px 6px)
最終的なコンパイル結果は同じでSass
もファイル内での意味が異なる場合、前者は 4 つの値を含む配列を意味し、後者は配列を意味します。括弧は「グループ化」の概念を強調していると言えます。
()
空の配列を表すために使用され、 empty を表すこともできますmap
。空の配列は直接コンパイルされずCSS
、配列に空の配列または null 値がある場合、それらはコンパイル時にクリアされます。1px 2px () 3px
またはなど1px 2px null 3px
。コンマ区切りの配列では、末尾のコンマを保持できます。これは、特に単一の値のみを含む配列を宣言する必要がある場合に、配列の構造上の関係を強調するためのものです。(1,)
たとえば1
、 のみを含む配列を表します。
1.3.3maps
map
はキーと値のペアのコレクションでkey
あり、value
どちらも任意SassScript
のオブジェクトにすることができます。それとlist
両方が関数で動作します。たとえば、map-get
関数を使用してキー値を検索したり、関数をmap-merge
使用して新しいキーと値のペアを追加したり、@each
ディレクティブを使用して各キーと値のペアにスタイルを追加したりできます。map
どこでも使用できますがlist
、その逆はできません。map
関数内で使用する場合は、形式の配列list
として扱われます。key1 value1, key2 value2
1.3.4 色
どのCSS
カラー式もカラー値を返しSassScript
ます。これには、多数の名前付きの色が含まれています (多くの場合、引用符で囲まれていない文字列unquoted strings
と区別できません)。
1.4 操作Operations
すべてのデータ型は等価演算==
OR!=
をサポートしています。さらに、各データ型には独自の演算メソッドもあります。
1.4.1 数値演算Number Operations
SassScript
足し算、引き算、掛け算、割り算、丸め演算 ( +, -, *, /, %
) をサポートし、必要に応じて値を単位間で変換します。関係演算子 ( >, <, >=, <=
) は、数値演算にも使用できます。
// Sass
p {
width: 1in + 8pt;
}
// 编译为:
p {
width: 1.111in;
}
- 除算操作
/
除算演算は別の言及に値します。/
記号は通常、CSS
数字を区切る役割を果たします。ではSassScript
、/
数字の区切りだけでなく、割り算にも。次の 3 つの場合/
は、除算と見なされます。
- 値または値の一部が変数または関数の戻り値である場合。
- 値が括弧で囲まれている場合。
- 値が算術式の一部である場合。
// Sass
p {
font: 10px/8px; // 普通的CSS
$width: 1000px;
width: $width/2; // 使用了变量,是除法运算
width: round(1.5)/2; // 函数返回值,是除法运算
height: (500px/2); // 使用圆括号,是除法运算
margin-left: 5px + 8px/2px; // 算数运算表达式的一部分,是除法运算
}
// 编译为CSS
p {
font: 10px/8px;
width: 500px;
height: 250px;
margin-left: 9px;
}
/
変数を使用する必要があり、それを除算演算子として使用したくない場合は#{}
、変数を次のようにラップできます。
// Sass
p {$font-size: 12px;$line-height: 30px;font: #{$font-size}/#{$line-height};
}
// 编译为CSS
p {font: 12px/30px;
}
1.4.2 色値操作Color Operations
色値の操作はセクションで計算されます。つまりR, G, B
、値は個別に計算されます。
p {
color: #010203 + #040506;
}
分割して計算し01 + 04 = 05
02 + 05 = 07
03 + 06 = 09
、次のようにコンパイルします。
p {
color: #050709;
}
を使用できますcolor functions
。これは、色の計算よりも少し便利です。
色の値は、数値演算と組み合わせることもできます。
p {
color: #010203 * 2;
}
// 计算 01 * 2 = 02 02 * 2 = 04 03 * 2 = 06,然后编译为:
p {
color: #020406;
}
色の値に が含まれている場合、算術演算は値に対して作用しないため、演算を実行するalpha channel
には計算に含まれる色の値が同じ値でなければならないことに注意してください。alpha
alpha
p {
// 需要保证有相同的alpha值color: rgba(255, 0, 0, 0.75) + rgba(0, 255, 0, 0.75);
}
カラー値の値は、機能またはalpha
で調整できます。opacity
transparentize
// Sass
$translucent-red: rgba(255, 0, 0, 0.5);
p {
color: opacify($translucent-red, 0.3);
background-color: transparentize($translucent-red, 0.25);
}
// 被编译为:
p {
color: rgba(255, 0, 0, 0.8);
background-color: rgba(255, 0, 0, 0.25);
}
1.4.3 文字列操作String Operations
+
連結文字列を使用します。+
左側の値によって、最終的なコンパイル結果が引用されるか引用されないかが決まります。
演算式を他の値と組み合わせて使用する場合は、スペースをコネクタとして使用します。
p {
margin: 3px + 4px auto;
}
// 编译为:
p {
margin: 7px auto;
}
#{}
以下を使用して動的な値を挿入できます。
$value: null;
p:before {content: "I ate #{$value} pies!";
}
// 编译为CSS:
p:before {content: "I ate pies!";
}
1.4.4 ブール演算Boolean Operations
ブール演算のサポートand
, or
, not
.
1.4.5 配列操作
配列は直接操作をサポートしておらず、list functions
を使用してのみ操作できます。
1.5 括弧(Parentheses)
括弧が最初にカウントされます。
1.6 関数Functions
SassScript
多くの関数が組み込まれており、一部はCSS
通常のステートメントを使用して呼び出すこともできます。
p {
color: hsl(0, 100%, 50%);
}
// 编译为:
p {
color: #ff0000;
}
- キーワード引数
Keyword Arguments
Sass
関数はキーワード引数を許可します。上記の例は次のように記述できます。
p {
color: hsl($hue: 0, $saturation: 100%, $lightness: 50%);
}
Sass
多くの組み込み関数があるため、ここでは拡張しません。
1.7 補間ステートメントInterpolation #{}
変数は、次の方法でセレクターまたはプロパティ名で使用でき#{}
ます。
$name: foo;
$attr: border;
p.#{$name} {#{$attr}-color: blue;
}
// 编译为:
p.foo {border-color: blue;
}
1.8SassScript
で&
&
親セレクターを表します。以下のように、&
の値((".foo.bar" ".baz.bang"), ".bip.qux")
。
.foo.bar .baz.bang, .bip.qux {$selector: &;
}
親セレクターがない場合&
、値はnull
です。mixin
これは、親セレクターがあるかどうかを検出するために適用できます。
@mixin does-parent-exist {
@if & {
// 有父选择器
&:hover {
color: red;
}} @else {
// 没有父选择器
a {
color: red;
}}
}
1.9 変数のデフォルト値 ( Variable Defaults
):!default
変数の末尾に追加すると、宣言が割り当てられていない変数に値を割り当てる!default
ことができます。!default
割り当ては、変数に値が割り当てられていないか、null 値が割り当てられているnull
場合にのみ機能します!default
。
$content: "First content";
// 变量已被赋值,无效
$content: "Second content?" !default;
$new_content: "First time reference" !default;
#main {
content: $content;
new-content: $new_content;
}
// 编译为:
#main {
content: "First content";
new-content: "First time reference";
}
2.@-Rules
コマンド ( Directives
)で
Sass
すべてCSS3 @-Rules
の 、およびSass
特定のディレクティブ ( directives
) がサポートされています。
2.1@import
Sass
インポートと@import
ファイリングを可能にする拡張機能。インポートされたファイルはマージされ、同じファイルにコンパイルされます。さらに、インポートされたファイルに含まれる変数は、インポートされたファイルで使用できる場合と使用できない場合があります。.scss
.sass
CSS
mixin
通常、ファイル@import
は検出されてインポートされますが、次の例外は通常の構文Sass
として扱われます。CSS
- ファイル拡張子は
.css
; - ファイル名は次
http://
で始まります。 - ファイル名は
url()
; @import
含むmedia queries
。
一度に複数のファイルをインポートすることができます.拡張子が書かれていない場合は、同じ名前のファイルを検索しようとし.scss
ます.sass
.
@import "rounded-corners", "text-shadow";
インポート ファイルでも補間ステートメントを使用できますが、インポート メソッド#{}
にのみ使用できます。CSS
url()
$family: unquote("Droid+Sans");
@import url("http://fonts.googleapis.com/css?family=#{$family}");
// 编译为:
@import url("http://fonts.googleapis.com/css?family=Droid+Sans");
@imports
また、パーシャルとネストという 2 つの特別な使用法もあります。
- 分音 (
Partials
)
ファイルをインポートSass
したいが、 としてコンパイルしたくないCSS
場合があります。ファイル名の前にアンダースコアを追加すると、Sass
コンパイルしないように指示されます。import ステートメントではアンダースコアは必要ないことに注意してください。たとえば、ファイルの名前が の場合_colors.scss
、次のコードはファイルをインポートしますが、_colors.scss
ファイルは としてコンパイルされませんCSS
。
@import "colors";
なお、同名で先頭にアンダースコアを含むファイルと先頭にアンダースコアを含まないファイルが存在する場合、アンダースコアを付加したファイルは無視されます。
- ネスティング
@import
ほとんどのシナリオでは、ファイルの最上位で使用します@imports
。実際、ネストはスタイルまたはに@imports
ネストすることもできます。最上位レイヤーで使用する場合との違いは、この方法でインポートされたスタイルは、「ローカル スコープ」として理解できるネストされたレイヤーにのみ表示されることです。CSS
@media
// example.scss
.example {
color: red;
}
// main.scss
#main {
@import "example";
}
最終的に次のようにコンパイルされます。
#main .example {
color: red;
}
ただし、このネストされたフォームによって@import
インポートされたファイルには@mixin
、などの@charset
トップレベルの命令があってはならないことに注意してください。
2.2@media
Sass
は と@media
同じですCSS
が、次の新機能が追加されています。
CSS
ルール内でネストすることができます。ルールに@media
ネストされるCSS
と、コンパイルされると、ファイルの最外層にコンパイルされ、以前にネストされたときに親セレクターが含まれます。これは非常に便利です。
// Sass
.sidebar {
width: 300px;
@media screen and (orientation: landscape) {
width: 500px;}
}
// 编译为
.sidebar {
width: 300px;
}
@media screen and (orientation: landscape) {
.sidebar {
width: 500px; }
}
@media
ネスティングが許可queries
され、コンパイル時に自動的に追加されますand
。
@media screen {
.sidebar {
@media (orientation: landscape) {
width: 500px;
}}
}
// 编译为
@media screen and (orientation: landscape) {
.sidebar {
width: 500px; }
}
SassScript
条件の名前または値の代わりに (変数、関数など) を使用できます。
$media: screen;
$feature: -webkit-min-device-pixel-ratio;
$value: 1.5;
@media #{$media} and ($feature: $value) {
.sidebar {
width: 500px;}
}
// 编译为
@media screen and (-webkit-min-device-pixel-ratio: 1.5) {
.sidebar {
width: 500px; }
}
2.3@extend
- セレクターは、 を介して別のセレクターのスタイルを継承する
@extend
ように作成できます。
.error {
border: 1px #f00;
background-color: #fdd;
}
.error.intrusion {
background-image: url("/image/hacked.png");
}
.seriousError {
// 继承,此时所有使用到 .error 的样式都会被继承过来
@extend .error;
border-width: 3px;
}
// 编译为
.error, .seriousError {
border: 1px #f00;
background-color: #fdd; }
.error.intrusion, .seriousError.intrusion {
background-image: url("/image/hacked.png");
}
.seriousError {
border-width: 3px;
}
Placeholder Selectors
プレースホルダ セレクタ
Sass
特定の要素ではなく、継承のために一連のスタイルを定義する必要がある場合がありますが、それがコンパイルされて個別に出力されないことを願っています。Sass
スタイル ライブラリを作成すると、このようなシーンがより頻繁に発生します。こうして、プレースホルダ セレクタが誕生しました。その使用法は、id
セレクターまたはclass
セレクターとほぼ同じです。セレクターの表記は%
です。単独で使用すると、プレースホルダー セレクターはSass
無視され、出力ファイルにコンパイルされません。
// 不会被编译到输出文件中
#context a%extreme {
color: blue;
font-weight: bold;
font-size: 2em;
}
@extend
次のユーザーが使用する必要があります。
.notice {
@extend %extreme;
}
// 被编译为
#context a.notice {
color: blue;
font-weight: bold;
font-size: 2em;
}
!optional
声明
!optional
宣言を使用すると、@extend
新しいセレクターを生成しないことが可能です。
// 不可以,因为没有 .notice
a.important {
@extend .notice
}
// 可以
a.important {
@extend .notice !optional;
}
- コマンドで使用
@extend
無駄なコードを大量に生成しないようにするため@extend
に、命令内で ( ) を拡張し、拡張を同じ命令レベルのセレクターに限定します。
@media print {
.error {
border: 1px #f00;
background-color: #fdd;}
.seriousError {
// 可以
// .error 同在一个 @meida层级中
@extend .error;
border-width: 3px;}
}
// 以下为反面栗子
.error {
border: 1px #f00;
background-color: #fdd;
}
@media print {
.seriousError {
// 不可以, .error 不在当前的@meida指令层级中
@extend .error;
border-width: 3px;}
}
2.4@at-root
ディレクティブを使用@at-root
して、選択したセレクターを最も外側のレベルに持ち上げます。
.parent {...
@at-root .child { ... }
}
// 编译为
.parent { ... }
.child { ... }
- 複数のセレクターを含むブロックレベルの構造にすることができます。
.parent {...
@at-root {
.child1 { ... }
.child2 { ... }}
.step-child { ... }
}
// 编译为
.parent { ... }
.child1 { ... }
.child2 { ... }
.parent .step-child { ... }
with:xxx yyy ...
orを使用without:xxx yyy ...
して、最も外側のレイヤーに昇格されたセレクターに対して外側のディレクティブが有効であることを確認します。
// without:
@media print {
.page {
width: 8in;
// without: media 让选择器不受外层的@media影响
@at-root (without: media) {
color: red;
}}
}
// 编译为
@media print {
.page {
width: 8in;}
}
.page {
color: red;
}
3. 制御コマンドControl Derectives
コントロール ディレクティブは、特定の条件下でスタイルを参照するために使用されます。
3.1if()
組み込みif
関数は、任意のSassScript
スクリプト コンテキストで使用できます。
3.2@if
@if
条件は、命令の式の戻り値がfalse
またはでない場合に満たされnull
ます。後で@else if
接続できます@else
。
$type: monster;
p {
@if $type == ocean {
color: blue;} @else if $type == matador {
color: red;} @else if $type == monster {
color: green;} @else {
color: black;}
}
// 编译为
p {
color: green;
}
3.3@for
@for $var from <start> through <end>
このディレクティブには、 、またはの 2 つの形式があります@for $var from <start> to <end>
。どちらも開始点を含んでいます<start>
が、違いはto
含まれていませんが<end>
、through
含まれています<end>
。また、$var
任意の変数を指定できますが、整数である必要があります<start>
。<end>
@for $i from 1 to 3 {
.item-#{$i} { width: 2em * $i; }
}
// 编译为
.item-1 {
width: 2em;
}
.item-2 {
width: 4em;
}
3.4@each
@each
コマンド形式:@each $var in <list>
@each $animal in puma, sea-slug, egret, salamander {.#{$animal}-icon {
background-image: url('/images/#{$animal}.png');}
}
// 编译为
.puma-icon {
background-image: url('/images/puma.png'); }
.sea-slug-icon {
background-image: url('/images/sea-slug.png'); }
.egret-icon {
background-image: url('/images/egret.png'); }
.salamander-icon {
background-image: url('/images/salamander.png'); }
- 複数の変数を同時に適用できます。これは、フォームは似ているが値が異なるスタイルを記述する場合に便利です。
@each $animal, $color, $cursor in (puma, black, default),
(sea-slug, blue, pointer),
(egret, white, move) {.#{$animal}-icon {
background-image: url('/images/#{$animal}.png');
border: 2px solid $color;
cursor: $cursor;}
}
// 编译为
.puma-icon {
background-image: url('/images/puma.png');
border: 2px solid black;
cursor: default; }
.sea-slug-icon {
background-image: url('/images/sea-slug.png');
border: 2px solid blue;
cursor: pointer; }
.egret-icon {
background-image: url('/images/egret.png');
border: 2px solid white;
cursor: move; }
maps
配列として扱われるため、次のようlists
に@each
も使用できmap
ます。
@each $header, $size in (h1: 2em, h2: 1.5em, h3: 1.2em) {#{$header} {
font-size: $size;}
}
// 编译为
h1 {
font-size: 2em; }
h2 {
font-size: 1.5em; }
h3 {
font-size: 1.2em; }
3.5@while
while
循環、わかりました。
$i: 6;
@while $i > 0 {
.item-#{$i} { width: 2em * $i; }
// 更改条件变量
$i: $i - 2;
}
//编译为
.item-6 {
width: 12em; }
.item-4 {
width: 8em; }
.item-2 {
width: 4em; }
4. 混合コマンド ( Mixin Directives
)
mixin
再利用可能なスタイルを定義するために使用されます。
4.1 混合命令の定義@minin
( Defining a Mixin: @mixin
)
名前とスタイルを追加した後@mixin
、混合命令を定義できます.セレクターと属性を含める必要があることに注意してください,また&
、親セレクターを参照するために使用することもできます.
// 定义名为 clearfix 的混合指令
@mixin clearfix {
display: inline-block;
// & 指代父选择器。注意,这个混合指令里虽然它没有父选择器,
// 但是混合指令使用的地方,可以产生父选择器&:after {
content: ".";
display: block;
height: 0;
clear: both;
visibility: hidden;}
// 这里的 & 同理* html & { height: 1px }
}
4.2 混合命令の参照@include
( Including a Mixin: @include
)
@include MixinName
mixin ディレクティブを引用するために使用します。
.page-title {
// 引用混合指令,将 clearfix 中的规则混入到 .page-title 中
@include clearfix;
padding: 4px;
margin-top: 10px;
}
- また、属性を定義せずに、参照する親セレクターを持たずに、最も外側のレベルで直接参照して混合することもできます。
@mixin silly-links {
a {
color: blue;
background-color: red;}
}
@include silly-links;
//编译为
a {
color: blue;
background-color: red; }
作成する mixin ディレクティブでは、ファイルのどこにでも安全にインポートできるように、子孫セレクターのみを定義するのが最善です。
- 複合ディレクティブは、他の複合ディレクティブを参照できます。
@mixin compound {
@include highlighted-background;
@include header-text;
}
@mixin highlighted-background { background-color: #fc0; }
@mixin header-text { font-size: 20px; }
4.3 パラメータ ( Arguments
)
パラメーターを使用して、混合コマンドのスタイルの変数を設定し、値を割り当てることができます。混合命令を参照して定義する場合、パラメータの順序は 1 対 1 で対応し、パラメータにはデフォルト値を割り当てることができます。
// $width有默认值
@mixin sexy-border($color, $width: 1in) {
// 注意这里得 border,是CSS命名空间
border: {
color: $color;
width: $width;
style: dashed;}
}
p { @include sexy-border(blue); }
h1 { @include sexy-border(blue, 2in); }
// 编译为
p {
border-color: blue;
border-width: 1in;
border-style: dashed; }
h1 {
border-color: blue;
border-width: 2in;
border-style: dashed; }
さらに、パラメーターについてさらに 2 つの重要な点があります。
- キーワード パラメータ(
Keyword Arguments
):Mixin
パラメータを参照渡しする場合は、パラメータ キーワード (パラメータ名) を指定して値を正確に渡します。
p { @include sexy-border($color: blue); }
h1 { @include sexy-border($color: blue, $width: 2in); }
書き方は少し面倒ですが、読みやすく、正確に割り振ることができます。
- パラメーター変数(
Variable Arguments
): 混合コマンドに必要なパラメーターの数がわからない場合は、パラメーターの末尾にパラメーター変数を使用...
して宣言Sass
できます。これらのパラメーターは値のリストとして扱われます。
@mixin box-shadow($shadows...) {
-moz-box-shadow: $shadows;
-webkit-box-shadow: $shadows;
box-shadow: $shadows;
}
.shadows {
@include box-shadow(0px 4px 5px #666, 2px 6px 10px #999);
}
// 编译为
.shadowed {
-moz-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;
-webkit-box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;
box-shadow: 0px 4px 5px #666, 2px 6px 10px #999;
}
引用するときにパラメーター変数を使用することもできます。
@mixin colors($text, $background, $border) {
color: $text;
background-color: $background;
border-color: $border;
}
$values: #ff0000, #00ff00, #0000ff;
.primary {
@include colors($values...);
}
// 编译为
.primary {
color: #ff0000;
background-color: #00ff00;
border-color: #0000ff;
}
4.4 コンテンツを混合コマンドにインポートする@content
( Passing Content Blocks to a Mixin
)
を引用する場合Mixin
、特にファイルの最外層で引用する場合は、@content
プレースホルダーを使用して、テンプレートやスロットなどと同様に、@include
次のコンテンツをその位置にインポートできます。@content
@mixin apply-to-ie6-only {* html {
@content;}
}
@include apply-to-ie6-only {
#logo {
background-image: url(/logo.gif);}
}
// 编译为
* html #logo {
background-image: url(/logo.gif);
}
スタイル ライブラリで頻繁に使用Mixin
されるためです。Sass
使い方を簡単にするために、とで=
表すことができます。@mixin
+
@include
// Sass (这里就是Sass格式的语法了,而非SCSS格式)
=apply-to-ie6-only* html
@content
+apply-to-ie6-only
#logo
background-image: url(/logo.gif)
- ブロック レベルのコンテンツと変数のスコープ:
@content
ブロック レベルのコンテンツをインポートすることにより、そのスコープはそれが定義されているコンテキストに関連付けられ、混合命令内のスコープとは関係ありません。
$color: white;
@mixin colors($color: blue) {
background-color: $color;
// @content 的内容的作用域在定义它的地方
@content;
border-color: $color;
}
.colors {
@include colors { // 这里的color,虽然会被插入到@content的位置// 但是它的作用域是在定义它的地方,
// 而定义它的地方,$color是全局变量,值为whitecolor: $color; }
}
// 编译为
.colors {
background-color: blue;
color: white;
border-color: blue;
}
すべての定義がグローバル スコープにあるわけではないことに注意してください。また、定義がセレクターにネストされていて、そのスコープがセレクターのローカル スコープである可能性もあります。
5. 機能説明 ( Function Directives
)
Sass
カスタム関数を許可します。関数は、任意の属性値または で使用できますSassScript
。名前の競合を避けるために、カスタム関数名にプレフィックスを付けることができます。
$grid-width: 40px;
$gutter-width: 10px;
@function grid-width($n) {
@return $n * $grid-width + ($n - 1) * $gutter-width;
}
#sidebar { width: grid-width(5); }
// 编译为
#sidebar {
width: 240px;
}
6. 出力フォーマット
6.1:nested
Nested ( :nested
) はのデフォルトの出力形式で、 と の関係sass
を明確に反映しています。セレクターと属性は別の行を占め、インデントはファイル内のインデントと一致しており、インデントに依存してネスト レベルが反映されます。CSS
HTML
sass
// 编译后输出的CSS文件
#main {
color: #fff;
background-color: #000; }
#main p {
width: 10em; }
6.2:expanded
エキスパンド(:expanded
)形式は手書きと同じで、セレクターはインデントされません。
#main {
color: #fff;
background-color: #000;
}
#main p {
width: 10em;
}
6.3:compact
コンパクトな形式 ( Compact
) は場所をとらず、各CSS
ルールは 1 行しか占有しません。ネストされたセレクターは空白行を残しません。ネストされていないセレクターはそれらの間に空白行を残します。
#main { color: #fff; background-color: #000; }
#main p { width: 10em; }
.huge { font-size: 10em; font-weight: bold; text-decoration: underline; }
6.4:compressed
圧縮形式(Compressed
)は、空白行、スペース、コメントなどを残さず、出力量が最も少なくなります。
#main{color:#fff;background-color:#000}#main p{width:10em}.huge{font-size:10em;font-weight:bold;text-decoration:underline}
やっと
HTML、CSS、JavaScript、HTTP、TCPプロトコル、ブラウザ、VUE、React、データ構造やアルゴリズムなど、「フロントエンドメーカーインタビュー集」をまとめ、合計201問のインタビュー質問をまとめ、それぞれに回答を作成質問 答えて分析します。
困っている友達、記事の最後にあるカードをクリックしてこのドキュメントを受け取り、無料で共有できます
ドキュメントの一部は次のとおりです。
記事の長さには制限があり、次のコンテンツは順次表示されません
困っている友達は、下のカードをクリックして無料で入手できます