フロントエンド

【Sass】の書き方 bulmaフレームワークから読み解いてみる【初心者向け】

ホームページなりWebサービスを作ろうと思ったらもれなく

『HTML』と『CSS』が必要になりますが、

実は多くのプログラマーが苦手意識を持ってたりするのが『CSS』。

アオキ
なんせ、書くのがめんどくさい。

一行一行書いていかなきゃなのでとてもめんどくさいし、

一箇所変えると他のあらぬところまで影響しちゃったりしてややこしい。

よく使うクラスや書き方を用意しておいてどうにかやりくりしてきたものの、

それでもやっぱりめんどうくさい。

さらには変数もif文も計算もできないということで、

プログラマー
『CSS』はプログラム言語じゃないっしょ。

なんて言われたりします。

そんな世論を知ってか知らずか、

プログラミングっぽい書き方ができる『CSS』が誕生することになりました。

その名も『Sass(サス)』

– Sass・・Syntactically Awesome Style Sheets (構文的に素晴らしいスタイルシート)

機能的には、

  • for分やif文が使える
  • 変数が使える
  • 計算ができる
  • 関数が使える
  • 関数を作れる
  • モジュール化(部品化)できる

などなど。

具体的に『Ssss(サス)』を使ってどれくらいメリットがあるかというと、

最近流行りのCSSフレームワーク『bulma(ブルマ)』を例にとると、

同じ内容を書くために、

  • CSS・・約15,000行
  • Sass・・約5,000行
    (当社調べ)

と、約3倍の行数の差があることがわかりました。

アオキ
3分の1で同じことが書けるのね・・なかなかやるやんけ・・

もちろん『bulma』のなかで、

  • for分やif文が使える
  • 変数が使える
  • 計算ができる
  • 関数が使える
  • 関数を作れる
  • モジュール化(部品化)できる

といった機能ももりもり使われています。

しっかり『Sass(サス)』の使い方、書き方を覚えてCSSをアップデートすべく、

ちょっとだけですが『bulma(ブルマ)』のソースコードを読み解いてみることにしました。

『Sass(サス)』には大きく2つの書き方があります。
 
– Sass・・Rubyっぽい書き方。
– Scss・・CSSっぽい書き方。
 
業界的には『Scss』の方が主流らしいのですが、
『Sass』の方がよりプログラミングっぽく書けるので愛好者も多く、
今回お題のbulmaは『Sass』なのでこちらで解説してみます。

Sponsored link

Sass の書き方 bulma のコードとファイル構成

まずはおもむろに『bulma』のサイトにとんでファイル群をダウンロード。

bulma公式サイト

執筆時点のバージョンは0.7.4

ダウンロードしたファイルを解凍してみると、こんなフォルダ構成。


cssフォルダとsassフォルダがあって、

普通に使う分には、cssフォルダの中の、bulma.min.cssを読み込ませればOKなんですが、

今回のお題は『Sass』の読み解きなので、『Sass』フォルダの中身を見ることに。

すると、

  • baseフォルダ
  • componentsフォルダ
  • elementフォルダ
  • gridフォルダ
  • layoutフォルダ
  • utilitiesフォルダ

と6つのフォルダがあり、同じ階層に『bulma.sass』ファイルもあります。

『bulma.sass』ファイルの中身はこう。

@import という構文の後に、それぞれのフォルダ + _all という記載があります。

『Sass』の機能の中で、

  • モジュール化(部品化)できる

という機能があり、@import の後にファイル名をつけることで、

ファイルをそれぞれ分けてつくっているんですね。

試しに utilitiesフォルダの中の、『_all.sass』ファイルを見て見るとこんな中身。

さらに@import と書いて、それぞれのファイルを読み込んでいます。

図にしたらこんな感じ。

  1. bulma.sassが読み込まれて、
  2. 最初のsass/utilities/_all が読み込まれて、
  3. sass/utilities/_all の中のsassファイルが上から順番に読み込まれると。
アオキ
なんでこんなにファイル分ける必要あるんだろ・・

っと最初は思っちゃうんですが、

よくよく読んで慣れていくにつれ、

アオキ
これ相当考えてつくられてるなぁ、すごい。

って思える様になるかなと思います。

Sponsored link

Sass の書き方 Bulmaの変数初期化ファイルを読む

『bulma.sass』を見ると、最初に utilitiesフォルダを読み込んでいることがわかります。

utilities/_all.sass ファイルの中身を見ると、

  • initial-variable.sass
  • functions.sass
  • derived-variables.sass
  • animations.sass
  • mixins.sass
  • controls.sass

と6つのファイルに分かれています。

まずは一番上の『initial-variable.sass』を見てみます。

『initial-variable』は文字通り、変数の初期化、を設定しているようです。

最初に目につくのが色の指定。

$black:        hsl(0, 0%, 4%) !default
$black-bis:    hsl(0, 0%, 7%) !default
$black-ter:    hsl(0, 0%, 14%) !default

$grey-darker:  hsl(0, 0%, 21%) !default
$grey-dark:    hsl(0, 0%, 29%) !default
$grey:         hsl(0, 0%, 48%) !default
$grey-light:   hsl(0, 0%, 71%) !default
$grey-lighter: hsl(0, 0%, 86%) !default

$white-ter:    hsl(0, 0%, 96%) !default
$white-bis:    hsl(0, 0%, 98%) !default
$white:        hsl(0, 0%, 100%) !default

$マークの後に名前をつけることで変数として使えて、

色の指定をRGBではなく、HSLという指定の方法で設定されています。

HSL (色相・彩度・明るさ)の3つの値で色を指定できる書き方

フォントの指定もあれば、フォントのサイズ指定もされています。

$size-1: 3rem !default
$size-2: 2.5rem !default
$size-3: 2rem !default

『rem(レム)』と書くことで、スマホでもPCでも、ベースのサイズを基準に書けるのでバランス調整しやすいメリットがあります。

レスポンシブ対応ということで、こんな記載もありました。

// Responsiveness

// The container horizontal gap, which acts as the offset for breakpoints
$gap: 64px !default
// 960, 1152, and 1344 have been chosen because they are divisible by both 12 and 16
$tablet: 769px !default
// 960px container + 4rem
$desktop: 960px + (2 * $gap) !default
// 1152px container + 4rem
$widescreen: 1152px + (2 * $gap) !default
$widescreen-enabled: true !default
// 1344px container + 4rem
$fullhd: 1344px + (2 * $gap) !default
$fullhd-enabled: true !default

全部変数で定義しているので、$tablet と書けば 769px ということになります。

CSSではいろんな場所に毎回 769pxと手書きで書いていたので、

変数にするだけでもだいぶ楽になります。

ちなみに!default と書くと デフォルト値が設定されます。

Sponsored link

Sass の書き方 Bulmaの関数指定ファイルを読む

次は utilities/functions.sassファイルを抜粋。

@function mergeColorMaps($bulma-colors, $custom-colors)
  // we return at least bulma hardcoded colors
  $merged-colors: $bulma-colors

  // we want a map as input
  @if type-of($custom-colors) == 'map'
    @each $name, $components in $custom-colors
      // color name should be a string and colors pair a list with at least one element
      @if type-of($name) == 'string' and (type-of($components) == 'list' or type-of($components) == 'color') and length($components) >= 1
        $color-base: null

        // the param can either be a single color
        // or a list of 2 colors
        @if type-of($components) == 'color'
          $color-base: $components
        @else if type-of($components) == 'list'
          $color-base: nth($components, 1)
アオキ
見るからに『CSS』じゃない・・

これでもかと言わんばかりに変数+関数+if文もりもりですが、
一つづつさくっと読み解いてみます。

まずは @function

@funciton と書くことで、自作の関数を作ることができます。

utilities/functions.sassファイルの中には、

@function mergeColorMaps
@function powerNumber
@function colorLuminance
@function findColorInvert

と4つの自作関数があるようです。
(名前の付け方も英語でわかりやすい様に工夫されています)

『Sass(サス)』ではif文などのプログラミングらしい文法も使えるので、

  • @if 、@elseif, @else ・・文字通りif文
  • @for, @each ・・繰り返し
  • @return 関数の戻り値を返す

といった文法がたっぷりつかわれています。

また、『Sass』が始めから持っている関数もあって、

  • type-of・・データタイプを判別
  • length・・配列の長さ(値の数)を返す
  • nth・・指定した順番の要素を取り出す

といった関数が使われています。

アオキ
自分で関数作れるなんて、、昔のCSSじゃ考えられなかったぜぃ・・

参考記事

知らないと損するSassの組み込み関数徹底解剖

Sponsored link

Sass の書き方 Bulmaの関数指定ファイルを読む

続いては、utilities/derived-variables.sass。

アオキ
derivedってなんだろか・・?

と思って調べてみると、『派生』という意味らしく。

variablesは変数なので、『変数を派生』という意味になるのかなと。

実際にファイルを見ると確かに、
変数を変数で再定義しているような書き方になっています。

$primary: $turquoise !default

$info: $cyan !default
$success: $green !default
$warning: $yellow !default
$danger: $red !default

$light: $white-ter !default
$dark: $grey-darker !default

例えば

$success: $green !default

という箇所の場合、

最初に読み込まれる『initial-variable.sass』ファイルで、

$green:        hsl(141, 71%,  48%) !default

と指定されているので、

$success: hsl(141, 71%,  48%) !default

という意味になります。

アオキ
なぜにわざわざこんなことをしているんだろう・・

と思っちゃうのですが、

単に 緑色 とするだけでは、

緑色がどんな意味を持っているのかがわからないんですよね。

一色ならいいけれど、

例えば 青と緑と黄色と赤で、色の使い分けどうする?

ってなった時に、

それぞれの色に意味を持たせることで、統一感がでてくるのかなと。

$info: $cyan !default
$success: $green !default
$warning: $yellow !default
$danger: $red !default

と意味を決めることで、

仮に緑の色合いをちょっと変えたいとなった時も、

『initial-variable.sass』ファイルをちょっと変えるだけで、

緑を使っている箇所がまるっと全て変更されるのでとっても便利。

アオキ
CSSの頃は20箇所くらい地道に編集してましたもんね・・変え残しもたっぷり・・

他にもサイズに意味をつけたり、

$size-small: $size-7 !default
$size-normal: $size-6 !default
$size-medium: $size-5 !default
$size-large: $size-4 !default

フォントにも意味をつけたり、

$family-primary: $family-sans-serif !default
$family-code: $family-monospace !default

自作関数で色を反転させつつ変数にいれて、
さらに変数に意味つけしたり。

$cyan-invert: findColorInvert($cyan) !default

$info-invert: $cyan-invert !default
アオキ
『Sass』ってここまで凝るものなのね・・すごい・・

と思わず見入ってしまったのでした。

また、

$sizes: $size-1 $size-2 $size-3 $size-4 $size-5 $size-6 $size-7 !default

という書き方もあり、これは別ファイルで @forや@eachで回すためのようです。

他にも勉強になる箇所たくさんあるのですが、

アオキ
ちょっと疲れたので次で最後・・

Sass の書き方 Bulmaのボタンってどうなってるのさ?

みんな大好きボタン。

BulmaのSassファイル群の中では、

elementsフォルダの中に、button.sassというファイルが入っています。

その中身はというとこんな感じ。

$button-color: $grey-darker !default
$button-background-color: $white !default

$button-border-color: $grey-lighter !default
$button-border-width: $control-border-width !default

$button-padding-vertical: calc(0.375em - #{$button-border-width}) !default
$button-padding-horizontal: 0.75em !default

$button-hover-color: $link-hover !default
$button-hover-border-color: $link-hover-border !default

$button-focus-color: $link-focus !default
$button-focus-border-color: $link-focus-border !default
$button-focus-box-shadow-size: 0 0 0 0.125em !default
$button-focus-box-shadow-color: rgba($link, 0.25) !default

$button-active-color: $link-active !default
$button-active-border-color: $link-active-border !default

一見なんじゃこりゃなんですが、

これまで見てきた様に、他のファイルで変数が定義されています。

  • utilities/initial-variables.sass (変数の初期化ファイル)
  • utilities/derived-variables.sass (変数の派生)

など。

buttun クラスにはたくさんの設定があるので抜粋しますが、

.button
  @extend %control
  @extend %unselectable
  background-color: $button-background-color
  border-color: $button-border-color
  border-width: $button-border-width
  color: $button-color
  cursor: pointer
  justify-content: center
  padding-bottom: $button-padding-vertical
  padding-left: $button-padding-horizontal
  padding-right: $button-padding-horizontal
  padding-top: $button-padding-vertical
  text-align: center
  white-space: nowrap

@extend でスタイルの継承したり、
他ファイルで定義した変数を使ってスタイルをあてたりしています。

Sass の書き方 BulmaのSassファイルを読んでみて

Bulmaは近年人気なCSSフレームワークなだけあって、

とても洗練された書き方をされているなぁという印象を受けました。

今回の記事では紹介できなかったものの、

他にもたくさん『Sass』の良さげな書き方が満載なので、

『CSS』にめいっぱい時間をとられているならぜひ読んでみてもらえればと思います。

アオキ
爆速コーディングできるようにもりもり読んで吸収していこー

アオキ
ツイッターでも記事ネタ含めちょろちょろ書いていくので、よろしければぜひフォローお願いしますm(_ _ )m

アオキのツイッターアカウント


関連記事一覧 (一部広告あり)

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

CAPTCHA


最近の記事

アーカイブ

  1. オンライン教材

    【React】初心者向け講座をリリースしました【MUI】【Udemy】
  2. オンライン教材

    ChatGPTをビジネス活用する講座をリリースしました【Udemy】
  3. オンライン教材

    【ChatGPT】エンジニア編をリリースしました
  4. オンライン教材

    【AWS】【初心者向け】インフラの基礎からわかる講座をリリースしました【Udem…
  5. バックエンド

    【Laravel第4弾】Vue.js3(CompositionAPI+Scrip…
PAGE TOP
Ads Blocker Image Powered by Code Help Pro

広告ブロックを摘出しました!!

ブラウザ拡張を使用して広告をブロックしていることが摘出されました。

ブラウザの広告ブロッカーの機能を無効にするか、
当サイトのドメインをホワイトリストに追加し、「更新」をクリックして下さい。

あなたが広告をブロックする権利があるように、
当方も広告をブロックしている人にコンテンツを提供しない権利と自由があります。

Powered By
100% Free SEO Tools - Tool Kits PRO