LoginSignup

This article is a Private article. Only a writer and users who know the URL can access it.
Please change open range to public in publish setting if you want to share this article with other users.

More than 5 years have passed since last update.

CSS講義 第5回

Last updated at Posted at 2017-09-14
1 / 13

今日覚えていってほしいこと

  • CSSのプリプロセスとポストプロセス
  • Sass(SASS・SCSS)の基本的な構文
  • PostCSS

CSSのプリプロセス・ポストプロセス

CSSプリプロセッサー(CSSメタ言語)

  • CSSとは異なる独自の構文で記述された文字列を入力とし、ブラウザが解釈可能なCSSコードを出力するもの。SassやLess、Stylus等がその実装に当たる。

image.png

CSSポストプロセッサー

  • CSSを入力とし、より効果的なCSSに変換し、最適化するもの。例えば、コードを圧縮したり、自動でベンダープリフィックスを付与したり、プロパティ宣言の順番を読みやすいように並び変えたりするもので、CSSWring(圧縮)やAutoprefixer(ベンダープレフィックスの付与)、CSSComb(プロパティの並び替え)がその実装。

image.png

引用:CSSのプリプロセスとポストプロセス、そしてReworkとPostCSS

:relieved: pre:前 post:後


image.png


Sass

  • Syntactically Awesome Stylesheets (構文的にすごいスタイルシート)
  • SASS記法とSCSS記法を持つ
  • 変数が利用できる
  • ネストできる
  • 同一のネームスペースを持つプロパティは、ネームスペースでネストできる
  • @import でCSSファイルを1つにまとめられる
  • @mixin@include でスタイルを使いまわせる
  • @mixin では変数に引数利用も可能
  • 加減乗除ができる
  • @if @for @each @while で、条件分岐や繰り返しができる

:relieved: https://codepen.io/hisako135/pen/xXGZer


image.png


PostCSS

  • Node.js製のCSSパーサー
  • パーサーした結果のAST(JSオブジェクト)を操作するための便利なAPIを提供する
  • PostCSS自体はCSSには何もしない
  • ASTを操作し、CSSを変換する処理はプラグインが施す
  • PostCSSとそれらのプラグインを含めたエコシステムをPostCSSと呼ぶことが多い
  • 有名どころのプラグインはAutoprefixer

:relieved:AST(abstract syntax tree):抽象構文木
全てのトークン(字句)が構文木に含まれる。 これらのトークンには、"(" や ")" など後の処理(意味解析など)に不要なものも含まれる。 これら不要なトークンを除いたものを、抽象構文木(abstarct syntax tree)という。
image.png

:relieved:エコシステム:「生態系」を指す英語「ecosystem」を比喩的に用い、依存関係や協調関係の連携構造を指す


PostCSSはポストプロセッサー、ではない

  • 過去、PostCSSで作られたAutoprefixer等を「ポストプロセッサー」と命名し、PostCSSはポストプロセッサーを作るためのツールとしていた
  • しかし、cssnextやPreCSSといった言語拡張(プリプロセス)のためのツールも作られるようになり、PostCSSチームは「ポストプロセッサー」という単語を使わないことになった

スクリーンショット 2017-09-15 8.09.13.png


cssnext(postcss-cssnext)

  • プリプロセッサーとしてのPostCSSプラグイン
  • 将来的にCSSの仕様として入る可能性のあるプラグインをまとめたもの
    • postcss-custom-properties
    • postcss-custom-media
    • postcss-custom-selectors
    • postcss-apply など

:relieved: https://codepen.io/hisako135/pen/wraGow
:relieved: CSSの仕様自体が破棄される可能性がなくはない...


例1) postcss-custom-properties

:point_down: CSSで変数を使いたい場合、Sassでは$を使うが、これはSassによる独自構文でありCSSの標準構文ではない

$brand-color: #88E18E;
 //変換前
.logo {
 color: $brand-color;
}

//変換後
.logo {
 color: #88E18E;
}

:point_down: Custom Propertiesでの変数定義のシンタックス。:rootセレクタ内でのみ定義が可能。

:root {
 --brand-color: #88E18E;
}

.logo {
 color: var(--brand-color)
}

例2) postcss-custom-media

@custom-media --mobile (max-width: 415px);

@media (--mobile) {
  .selector {
      property: value;
  }
}

ポストプロセッサーとしてのプラグイン

  • CSS最適化を目的とするプラグイン
    1. Autoprefixer:ベンダープリフィックスを自動で付与する
    2. cssnano:圧縮
    3. postcss-sorting:プロパティ宣言の順序をソートするためのプラグイン など...

PostCSSを使用するメリット

  • 必要な機能だけを使用することができる
  • その結果パフォーマンスも良く、ビルドを早くすることができる
  • PreCSSを使えばSassっぽい記法で書ける
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up