TIL 013 | Sass(SCSS) Mixin & Extend
Today, I Learned.
[かっこいいライオンのようにフロントアカデミーを整理]中学校からの内容を整理✏️ Sass ✏️
・ mixinはファイルインポートを作成して使用してもよいし、mixinを使用したファイル内で宣言して使用してもよいし、複数のmixinを作成して使用する場合は
使用
Extendは、関連する要素間でスタイルコードを繰り返す場合に使用します.スタイルを作成した選択者のクラスを拡張したり、mixin選択者用に若干異なる様式を適用 extend該当選択者の同一ソースコード
既存の作成したクラスにコードをインポートできます.クラス名を
使用
(%selectorはCSSにコンパイルしません.)
1-1. 方法より1-2推奨方法.
これは、Webページ内で生成される様々なモードに関するコードです.
2つのdivの転送リンク機能は同じですが、少し異なるスタイルを採用しているため、重複するコードをbox-frameに組み合わせました.
[かっこいいライオンのようにフロントアカデミーを整理]中学校からの内容を整理
- Sass(SCSS) Mixin & Extend.
✏️ Sass ✏️
1. Mixin
Mixin
コードを再利用するために作成された機能であり、選択者間で繰り返されるコードはmixinで作成することができ、所望の選択サブブロックにmixinが含まれるため、コード重複を減らすことができる.
1-1. @mixinの使い方
@mixin 이름(parameter) {} //생성
@include 이름(argument) //사용
@mixin 이름(parameter) {} //생성
@include 이름(argument) //사용
@Mixin 이름(parameter)
{}内に重複コードを入れる.@include
スタイルが欲しい要素に入れればよい._mixins.scss
ファイルで管理する.- SCSS
// mixin
@mixin flex-center {
display: flex;
justify-content: center;
align-items: center;
}
.card {
@include flex-center;
background: gray;
}
.aside {
@include flex-center;
background: white;
}
- CSS
.card {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
background: gray;
}
.aside {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
background: white;
}
すべての重複するコードを1つのmixinに集約して使用するのは、正しいmixinの使用方法ではなく、上のコードのようにスタイル別に分割してmixinを作成します.相互に関連付けられたスタイル属性を組み合わせてこそ、より使用性の高いmixinを作ることができるからです.1-2. @content
使用
@content
必要な部分にスタイルを追加して伝えることができます.- SCSS
@mixin custom-font($x, $y) {
font-size: $x + $y + px;
@content;
}
div {
@include custom-font(10, 10){
color: red;
};
}
- CSS
div {
font-size: 20px;
color: red;
}
2. Extend
Extendは、関連する要素間でスタイルコードを繰り返す場合に使用します.スタイルを作成した選択者のクラスを拡張したり、
%
スタイルを個別に定義したりして、スタイルを拡張して必要な選択者にスタイルを適用したりすることができます.2-1. 2つの拡張方法
2-1-1. クラス名の取得
既存の作成したクラスにコードをインポートできます.クラス名を
@extend
とともに記入すると、クラス内のすべてのコードが展開されます.- SCSS
.profile-user {
background-image: url("../assets/user.jpg");
background-size: cover;
background-position : 50% 50%;
border-radius: 50%;
width : 50px;
height : 50px;
}
.comment-user {
@extend .profile-user;
}
- CSS
.profile-user,
.comment-user {
background-image: url("../assets/user.jpg");
background-size: cover;
background-position : 50% 50%;
border-radius: 50%;
width : 50px;
height : 50px;
}
.profile-user
コード全体を拡張.comment-user
2-1-2. %placeholder
%
extend用途の選び方をする.使用
@extend
導入前%placeholder
スタイルブロックでOK.(%selectorはCSSにコンパイルしません.)
1-1. 方法より1-2推奨方法.
- SCSS
%base-button {
width: 133px;
height: 44px;
display: flex;
justify-content: center;
align-items: center;
font-size: 14px;
border-radius: 10px;
}
.follow-button {
@extend %base-button;
background-color: #ffffff;
color: #ff375f;
border: 3px solid #ff375f;
}
.message-button {
@extend %base-button;
background-color: #ff375f;
color: white;
}
- CSS
/*CSS*/
.follow-button,
.message-button {
width: 133px;
height: 44px;
display: flex;
justify-content: center;
align-items: center;
font-size: 14px;
border-radius: 10px;
}
.follow-button {
background-color: #ffffff;
color: #ff375f;
border: 3px solid #ff375f;
}
.message-button {
background-color: #ff375f;
color: white;
}
2-2. 例
2-2-1. 例:パターン
これは、Webページ内で生成される様々なモードに関するコードです.
%
を使用してスタイルブロックを作成し、各モデルにスタイルを適用します.- SCSS
%modal {
position: relative;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: #fff;
border-radius: 6px;
}
.login-modal {
@extend %modal;
width: 272px;
height: 405px;
padding: 10px 20px;
}
.event-modal {
@extend %modal;
width: 340px;
height: 160px;
padding: 18px;
}
- CSS
/*CSS*/
.login-modal,
.event-modal {
position: relative;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
background-color: #fff;
border-radius: 6px;
}
.login-modal {
width: 272px;
height: 405px;
padding: 10px 20px;
}
.event-modal {
width: 340px;
height: 160px;
padding: 18px;
}
2-2-2. 例:フォトリンクボックス
2つのdivの転送リンク機能は同じですが、少し異なるスタイルを採用しているため、重複するコードをbox-frameに組み合わせました.
- SCSS
%box-frame {
border: 2px solid #bb6bd9;
border-radius: 15px;
width: 574px;
height: 310px;
}
.phoster-span {
@extend %box-frame;
span {
display: inline-block;
border-top: 2px solid #bb6bd9;
padding: 16px 0 17px;
text-align: center;
}
}
.phoster-none {
@extend %box-frame;
}
- CSS
/*CSS*/
.phoster-span,
.phoster-none {
border: 2px solid #bb6bd9;
border-radius: 15px;
width: 574px;
height: 310px;
}
.phoster-span span {
display: inline-block;
border-top: 2px solid #bb6bd9;
padding: 16px 0 17px;
text-align: center;
}
Reference
この問題について(TIL 013 | Sass(SCSS) Mixin & Extend), 我々は、より多くの情報をここで見つけました https://velog.io/@dhforb123/TIL-013-SassSCSS-Mixin-Extendテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol