第5章 現場で使える実践Sassテクニック
5-1 管理 / 運用・設計で使えるテクニック
ネストが深すぎると生じる問題を把握して、バランスを見ながら利用する
#wrap {
#wrapInner {
#page {
#contents {
#contentsInner {
#main {
section {
margin-bottom: 50px;
.item {
.image {
float: left;
}
.text {
overflow: hidden;
p {
margin: 0 0 1em;
}
}
}
}
}
}
}
}
}
}
#wrap #wrapInner #page #contents #contentsInner #main section {
margin-bottom: 50px;
}
#wrap #wrapInner #page #contents #contentsInner #main section .item .image {
float: left;
}
#wrap #wrapInner #page #contents #contentsInner #main section .item .text {
overflow: hidden;
}
#wrap #wrapInner #page #contents #contentsInner #main section .item .text p {
margin: 0 0 1em;
}
サイトの基本設定を変数にして一元管理する
@charset "UTF-8";
// ===================================================================
// 設定
// ===================================================================
// ================================
// 幅関係の設定
// ================================
// 全体
$width-base: 1200px;
// 最大幅
$width-max: 1200px;
// 最小幅
$width-min: 300px;
// メインエリアの幅
$width-main: 800px;
// サイドバーの幅
$width-side: 360px;
// ================================
// フォント関係の設定
// ================================
// ベースフォント
$font-base: "メイリオ", "Meiryo", "ヒラギノ角ゴ Pro W3", "Hiragino Kaku Gothic Pro", verdana, Sans-Serif;
// 明朝
$font-serif: Georgia, YuMincho, "Yu Mincho", 游明朝体, "ヒラギノ明朝 Pro W6", "Hiragino Mincho Pro", "HGS明朝E", "MS P明朝", serif;
// ================================
// 色関係の設定
// ================================
// サイトカラー
$color-base: white;
$color-main: #0062b2;
$color-sub: #def1fa;
// フォントカラー
$color-font: #000;
// リンクカラー
$color-link: #ff8c28;
$color-link_visited: #39f;
$color-link_hover: #cc7020;
$color-link_active: #00f;
// ボーダーカラー
$color-border: #d2d2d2;
// ================================
// ブレイクポイント
// ================================
$breakpoints: (
sp: "screen and (max-width:599px)",
pc: "screen and (min-width:600px)",
);
複数人で制作する場合は、各自のSass ファイルを用意する
// 制作者用のSassファイルをインポート @import "_hirasawa"; @import "_morita";
コメントを活用してソースを分かりやすくする
@charset "UTF-8"; // ---------------------------------------------------- // style guide // 基本的な考えは、FLOCSS( https://github.com/hiloki/flocss )ベース。 // // #命名規則 // BEMをベースに以下のルールで記載。 // block__element.-modifier // Blockが複数単語になる場合は、「blockName」のようにキャメルケースにする。 // 大枠のレイアウトに属する場合のみ、id を許容する。#header など。 // // ----------------------------------------------------
@charset "UTF-8"; /*! ======================================== ※※※※※※※※※※※※※※※※※※※※※※※※※※※ このCSSファイルはSassから生成されていますので、 編集しないようご注意ください。 ※※※※※※※※※※※※※※※※※※※※※※※※※※※ ========================================= */
大規模サイトで活用できる@import のネスト
#contents p {
padding-bottom: 15px;
}
#uniqueID p {
padding-bottom: 0;
}
#uniqueID {
@import "_local.scss";
}
p {
padding-bottom: 0;
}
.notes {
font-weight: bold;
}
a {
&:hover {
text-decoration: none;
}
}
.notes {
&__item {
margin: 10px;
}
.box & {
padding: 0;
}
}
#uniqueID a:hover {
text-decoration: none;
}
#uniqueID .notes__item {
margin: 10px;
}
.box #uniqueID .notes {
padding: 0;
}
SASS 記法も使ってみよう
@mixin mgn($value: 10px) {
margin: $value;
}
.list {
@include mgn(5px);
li {
display: inline-block;
a {
font-size: 1.2rem;
color: green;
}
}
}
=mgn($value: 10px)
margin: $value
.list
+mgn(5px)
li
display: inline-block
a
font-size: 1.2rem
color: green
&(アンパサンド)を活用してBEM 的な設計を快適に
.navigation {
width: 100%;
}
.navigation__item {
color: #666;
}
.navigation__item_state_active {
color: #000;
}
.navigation {
width: 100%;
&__item {
color: #666;
&_state_active {
color: #000;
}
}
}
.info {
margin-bottom: 50px;
}
.info__body {
background: #fafafa;
border: 1px solid #aaa;
}
.info--new .info__body {
border: 1px solid #d75893;
}
.info {
margin-bottom: 50px;
&__body {
background: #fafafa;
border: 1px solid #aaa;
}
&--new {
.info__body {
border: 1px solid #d75893;
}
}
}
.info {
margin-bottom: 50px;
&__body {
background: #fafafa;
border: 1px solid #aaa;
}
&--new {
.info {
&__body {
border: 1px solid #d75893;
}
}
}
}
.info {
$block: &;
margin-bottom: 50px;
&__body {
background: #fafafa;
border: 1px solid #aaa;
}
&--new {
#{$block}__body {
border: 1px solid #d75893;
}
}
}
@keyframes をルールセット内に書いて関係性をわかりやすくする
.example {
@keyframes anima-example {
0% {
transform: translate(0%, -100%);
}
100% {
transform: translate(0%, 0%);
}
}
animation: anima-example 0.9s linear 500ms 1;
}
.example {
animation: anima-example 0.9s linear 500ms 1;
}
@keyframes anima-example {
0% {
transform: translate(0%, -100%);
}
100% {
transform: translate(0%, 0%);
}
}
エクステンドはスコープを決めて利用する
.btn {
display: inline-block;
margin-bottom: 15px;
padding: 10px;
}
.btn--blue {
@extend .btn;
background-color: blue;
}
.btn--red {
@extend .btn;
background-color: red;
}
.local-nav__list {
@extend .btn;
color: black;
background-color: #ccc;
}
.local-nav__list {
display: inline-block;
margin-bottom: 15px;
padding: 10px;
color: black;
background-color: #ccc;
}
EditorConfig とstylelint でコーディングルールを統一する
root = true //プロジェクトルートであることを示す [*] //すべての言語の設定 indent_style = space //インデントの種類(spaceかtab) indent_size = 2 //インデントのサイズ end_of_line = lf //改行コード charset = utf-8 //文字コード
stylelint でコードを解析しエラーを表示する
npm install --global stylelint
{
"rules": {
"indentation": 2, //インデントのサイズ
"string-quotes": "double", //ダブルクォーテーションを指定
"number-leading-zero": "never", //1未満の小数点に0を使わない
"declaration-block-trailing-semicolon": "never", //セミコロン必須
"declaration-colon-space-before": "never", //コロンの前にスペース禁止
"declaration-colon-space-after": "always", //コロンの後にスペース必須
}
}

