概要と目標
Sassが何かを知り、
Sassの基本的な機能を知ろう。
現場でよく利用されているSassとは何かを知り、
Sassの基本的な機能を学習しましょう。
現場でよく利用されているSassとは何かを知り、
Sassの基本的な機能を学習しましょう。
SassはSyntactically Awesome Stylesheetsの略で、構文的にイケてるスタイルシートという意味。
Sassで書いたスタイルをCSSファイルに変換 (コンパイル) して利用する。
widthやfont-sizeなどの値を計算で求めることができる
Sassには「SASS記法」と「SCSS記法」の2種類の記法がある。
#header {
background-color: #212121;
color: #fff;
}
#header h1 {
float: left;
}
記述が非常に簡素化された記法で、拡張子は「.sass」。
CSSとの互換性は無いため。通常のCSSを書くとエラーになる。
#header
background-color: #212121
color: #fff
h1
float: left
CSSの記述と似ている記法で、拡張子は「.scss」。
CSSと完全互換があり、現在の主流の記法。
#header {
background-color: #212121;
color: #fff;
h1 {
float: left;
}
}
Sassを使うにはSassをインストール必要がある。
ただし、テキストエディタによっては拡張機能を入れるだけで、
環境を作らなくてもSassを利用できるものもある。
Dart製の「Dart Sass」というライブラリを使ってSassをコンパイルする方法。
テキストエディタの拡張機能でSassをコンパイルできるものもある。
@importという便利な機能がありますが、に廃止予定となりました。
CSSをコンパイルするときに出力フォーマットや、
コンパイルする場所などを設定する
Visual Studio Codeの「Live Sass Compiler」を使ってCSSをコンパイルする場合は、
「settings.json」で設定できる。
{
"liveSassCompile.settings.formats": [
{
"format": "expanded",
"extensionName": ".css",
"savePath": "~/../css/"
}
],
}
| 設定名 | 設定値 |
|---|---|
| format |
コンパイル形式
|
| extensionName | コンパイル後の拡張子 |
| savePath | コンパイル先 |
Sassはコンパイルという作業を行うことで、CSSファイルを書き出す。
毎回自分でコンパイルするのは面倒臭い。
Watch機能を使えば、Sassの更新を察知して自動でコンパイルしてくれる。
Visual Studio Codeで、Watch機能を利用するには、「Watch Sass」ボタンを押すだけ。
#header {
overflow: hidden;
h1 {
float: left;
a {
display: block;
}
}
p {
float: left;
}
}
#header {
overflow: hidden;
}
#header h1 {
float: left;
}
#header h1 a {
display: block;
}
#header p {
float: left;
}
子孫セレクタをはじめ、結合子を使った、隣接セレクタや、子セレクタ、
他にも@media をネスト(入れ子)して記述することができる。
下記のようなHTMLに子孫セレクタを使う場合も、Sassなら効率よく記述できる。
<main id="main">
<section>
<h2>中身出し</h2>
<p>これは段落です。</p>
</section>
<section>
<h2>中身出し</h2>
<p>これは段落です。</p>
</section>
</main>
#main {
padding: 1.5em 0;
background-color: #f0f0f0;
}
#main section {
padding: 1.5em 0;
background-color: #fff;
}
#main h2 {
font-size: 1.5em;
}
このようなCSSをSassで記述する場合、ルールをネストして書くことができる。
#main {
padding: 1.5em 0;
background-color: #f0f0f0;
section {
padding: 1.5em 0;
background-color: #fff;
}
h2 {
font-size: 1.5em;
}
}
#main {
padding: 1.5em 0;
background-color: #f0f0f0;
}
#main section {
padding: 1.5em 0;
background-color: #fff;
}
#main h2 {
font-size: 1.5em;
}
ルールのネストは何階層も深くできるし、結合子つきのセレクタだってネストできる。
#main {
padding: 1.5em 0;
background-color: #f0f0f0;
section {
padding: 1.5em 0;
background-color: #fff;
+ section {
margin-top: 1.5em;
}
}
h2 {
font-size: 1.5em;
+ p {
margin-top: 2em;
}
}
}
#main {
padding: 1.5em 0;
background-color: #f0f0f0;
}
#main section {
padding: 1.5em 0;
background-color: #fff;
}
#main section + section {
margin-top: 1.5em;
}
#main h2 {
font-size: 1.5em;
}
#main h2 + p {
margin-top: 2em;
}
@media だってネストできる。
#main {
padding: 1.5em 0;
background-color: #f0f0f0;
section {
padding: 1.5em 0;
background-color: #fff;
+ section {
margin-top: 1.5em;
}
}
h2 {
font-size: 1.5em;
+ p {
margin-top: 2em;
}
}
@media screen and (min-width: 768px) {
padding: 3em 0;
}
}
#main {
padding: 1.5em 0;
background-color: #f0f0f0;
}
#main section {
padding: 1.5em 0;
background-color: #fff;
}
#main section + section {
margin-top: 1.5em;
}
#main h2 {
font-size: 1.5em;
}
#main h2 + p {
margin-top: 2em;
}
@media screen and (min-width: 768px) {
#main {
padding: 3em 0;
}
}
擬似クラスや擬似要素のように、ルールをネストする際、親のセレクタ名を参照したい場合は「&」を使うと参照できる。
下記のようなCSSを作りたい場合、親のセレクタ名を参照することで効率とメンテンス性を向上できる。
a {
color: #212121;
}
a:hover {
color: #35b0ab;
}
.media {
display: block;
overflow: hidden;
}
.media:hover {
background-color: #fafafa;
}
このように、親セレクタを参照したいときは以下のようなSassを記述する
a {
color: #212121;
&:hover {
color: #35b0ab;
}
}
.media {
display: block;
overflow: hidden;
&:hover {
background-color: #fafafa;
}
}
a {
color: #212121;
}
a:hover {
color: #35b0ab;
}
.media {
display: block;
overflow: hidden;
}
.media:hover {
background-color: #fafafa;
}
例えば以下のように、親セレクタの名前を引き継いだ新たなセレクタを作りたいこともある。
そういった時にもこの「&」が使える。
<article>
<a href="#" class="media">
<div class="media__body">
<h3 class="media__title">カードの見出し</h3>
<p class="media__text">カードの本文</p>
</div>
<!-- /.media__body -->
<div class="media__thumbnail">
<figure>
<img src="..." alt="カードのサムネイル">
</figure>
</div>
<!-- /.media__thumbnail -->
</a>
</article>
このように、親セレクタ名引き継いだ、新たなセレクタを作る場合は以下のようなSassを記述する
a {
color: #212121;
&:hover {
color: #35b0ab;
}
}
.media {
display: block;
overflow: hidden;
&:hover {
background-color: #fafafa;
}
&__body {
width: 80%;
float: right;
}
&__thumbnail {
width: 18%;
float: left;
}
}
a {
color: #212121;
}
a:hover {
color: #35b0ab;
}
.media {
display: block;
overflow: hidden;
}
.media:hover {
background-color: #fafafa;
}
.media__body {
width: 80%;
float: right;
}
.media__thumbnail {
width: 18%;
float: left;
}
「-」が付いているプロパティは入れ子構造にして記述することができる。
.heading {
padding-left: 1em;
padding-bottom: .5em;
border-left: 4px solid #212121;
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: #212121;
text-align: left;
text-transform: uppercase;
}
このように、「-」が付いているプロパティは以下のようなSassで記述することができる。
.heading {
padding: {
left: 1em;
bottom: .5em;
}
border: {
left: 4px solid #212121;
bottom: {
width: 1px;
style: solid;
color: #212121;
}
}
text: {
align: left;
transform: uppercase;
}
}
.heading {
padding-left: 1em;
padding-bottom: .5em;
border-left: 4px solid #212121;
border-bottom-width: 1px;
border-bottom-style: solid;
border-bottom-color: #212121;
text-align: left;
text-transform: uppercase;
}
Sassでは、CSSで使える「/*」 ~ 「*/」のコメントはもちろん使える。
それに加えて、Sassファイルのみに残る「// ( スラッシュ2つ)」コメントもある。
/* Heading(CSSのコメントでコンパイル後も残る) */
.heading {
font-weight: bold;
// メインの見出し (Sassのコメントでコンパイル時に削除される)
&--primary {
text-align: center;
font-size: 2em;
}
}
@charset "UTF-8";
/* Heading(CSSのコメントでコンパイル後も残る) */
.heading {
font-weight: bold;
}
.heading--primary {
text-align: center;
font-size: 2em;
}
/*」の直後に「!」を記述します。
/*! Heading(CSSのコメントでコンパイル後も残る) */
.heading {
font-weight: bold;
// メインの見出し (Sassのコメントでコンパイル時に削除される)
&--primary {
text-align: center;
font-size: 2em;
}
}
Sassを使うとCSSの記述を効率よく書けたり、
メンテンス性を向上させることができる。