SassはCSSの拡張言語で、効率的にCSSを記述することができる言語になります。この記事では、Sass / Scss セレクタ、継承、関数、変数の基本的な書き方の一覧をまとめました。
コメント
/*! コメント */
// このコメントは CSS に含まれません
/* このコメントは、圧縮モードを除いて含まれます */
/*! このコメントは圧縮モードでも含まれます */
cssにコンパイル後 2 : このコメントは除かれます。
/*! コメント */
/* このコメントは、圧縮モードを除いて含まれます */
/*! このコメントは圧縮モードでも含まれます */
子孫結合子
& は外側のクラス名として扱うことができ & を利用して 8 : 前にセレクターを追加、14 : 関連するクラスを作成することができます。
ul {
li {
list-style-type: none;
}
}
li {
ul & {
list-style-type: none;
}
}
.nav {
&__ul {
li {
list-style-type: none;
}
}
}
ul li {
list-style-type: none;
}
ul li {
list-style-type: none;
}
.nav__ul li {
list-style-type: none;
}
擬似クラス / 疑似要素
& を利用して5 : 擬似クラス : や 9 : 疑似要素 ::
ul {
li {
list-style-type: none;
&:hover {
opacity: .8;
}
&::before {
content: ':';
}
}
}
ul li {
list-style-type: none;
}
ul li:hover {
opacity: 0.8;
}
ul li::before {
content: ":";
}
その他の結合子
2 : 子結合子・5 : 一般兄弟結合子・8 : 隣接兄弟結合子
ul {
>li {
list-style-type: none;
}
~li {
list-style-type: none;
}
+li {
list-style-type: none;
}
}
ul > li {
list-style-type: none;
}
ul ~ li {
list-style-type: none;
}
ul + li {
list-style-type: none;
}
メディアクエリ
.container {
background: #ccc;
@media(max-width: 700px) {
& {
background: red;
}
}
}
.container {
background: #ccc;
}
@media (max-width: 700px) {
.container {
background: red;
}
}
変数
@use "sass:map";
$global-color: rgb(215, 111, 111);
h1 {
$local-size: 20px;
color: $global-color;
font-size: $local-size;
}
$font: (
'weight': ('lighter': 500,
'medium': 600,
'bold': 700),
);
.btn_primary {
font-weight: map.get($font, weight, bold) //700
}
3 : スタイルシートの最上位で定義した変数はグローバルであり、宣言後どこからでもアクセスすることができます。
6 : ブロック内で定義した変数はローカルであり、宣言されたブロック内でのみアクセスすることができます。
map を使うとキーとバリューの形で値を設定することができます。
1 : map の読み込み
18 : map を使って値を指定
h1 {
color: rgb(215, 111, 111);
font-size: 20px;
}
.btn_primary {
font-weight: 700;
}
継承
.button {
display: inline-block;
border-radius: 5px;
padding: 6px 15px;
margin: 5px;
&:hover {
opacity: .8;
}
}
%button {
display: inline-block;
border-radius: 5px;
padding: 6px 15px;
margin: 5px;
&:hover {
opacity: .8;
}
}
.primary-button {
@extend %button;
@extend .button;
}
@media(max-width: 500px) {
.primary-button {
@extend %button;
/* 外側で定義されたものは、media の中では使うことができません。 */
}
}
24 , 25 : @extend <selector>で、あるセレクターが別のセレクターのスタイルを継承(引数は取れません)することができます。12~21 : % を使用したセレクタは、CSS出力はされません。
30~31 : 外側で定義されたものは、media query の中では使うことができません。使う場合は media query内で定義する必要があります。
.button, .primary-button {
display: inline-block;
border-radius: 5px;
padding: 6px 15px;
margin: 5px;
}
.button:hover, .primary-button:hover {
opacity: 0.8;
}
.primary-button {
display: inline-block;
border-radius: 5px;
padding: 6px 15px;
margin: 5px;
}
.primary-button:hover {
opacity: 0.8;
}
@media (max-width: 500px) {
.primary-button {
/* 外側で定義されたものは、media の中では使うことができません。 */
}
}
関数
@function size($size: 50px) {
@return calc($size / 2);
}
.title {
font-size: size(100px);
/* font-size: size(); */
}
1~3 : @function 関数は引数を取ることができ、@return 値を返します。1 : コロン + デフォルト値を指定することもできます。
6~7 : 関数名(引数) で使用します。
.title {
font-size: 50px;
}
mixin
@mixin square($size, $radius: 0, $color: #fff) {
width: $size;
height: $size;
background: $color;
display: flex;
align-items: center;
justify-content: center;
@if $radius !=0 {
border-radius: $radius;
}
&::before {
content: '😀';
font-size: size($size);
}
}
.avatar {
@include square($size: 100px, $radius: 50%, $color: green);
}
1~17 : mixin は引数を取ることができ、スタイルを定義することができます。1 : コロン + デフォルト値を指定することもできます。
20 : @include <name>(引数) で呼び出します。
.avatar {
width: 100px;
height: 100px;
background: green;
display: flex;
align-items: center;
justify-content: center;
border-radius: 50%;
}
.avatar::before {
content: "😀";
font-size: 50px;
}
フロー制御
Sassでは4つのフロー制御を使用することができます。
@if
$light-background: #f2ece4;
$light-text: #036;
$dark-background: #6b717f;
$dark-text: #d2e1dd;
@mixin theme-colors($light-theme: true) {
@if $light-theme {
background-color: $light-background;
color: $light-text;
} @else {
background-color: $dark-background;
color: $dark-text;
}
}
@each
$icons: ("eye": "\f112", "start": "\f12e", "stop": "\f12f");
@each $name, $glyph in $icons {
.icon-#{$name}:before {
display: inline-block;
font-family: "Icon Font";
content: $glyph;
}
}
@for
$base-color: #036;
@for $i from 1 through 3 {
ul:nth-child(3n + #{$i}) {
background-color: lighten($base-color, $i * 5%);
}
}
@while
@function scale-below($value, $base, $ratio: 1.618) {
@while $value > $base {
}
@return $value;
}
外部ファイルから変数や関数を使う
ファイル構成
Styles/
├── _variables.scss
└── style.scss
_ (アンダーバー)ファイル名というファイルを作成し、その中で変数を定義して、style.scss ファイルからそれを使ってみます。
// _variables.scss
$text-color: rgb(60, 60, 60);
// style.scss
@use "variables";
h1 {
color: variables.$text-color;
}
2 : @use “ファイル名を指定” で読み込みます。同階層に _variables.scss ファイルがあるので、variables or ./variables で指定することができます。
5 : “ファイル名”.”変数名” で使用することができます。