LoginSignup
25
24

More than 5 years have passed since last update.

Stylus のススメ -cssメタ言語-

Last updated at Posted at 2016-02-01

はじめに

皆さんはcssメタ言語は何を使っていますか?
主流は相変わらずsass+compassですね。とあるきっかけでstylusに切り替えたところ、こちらの方が使い勝手が良く肩入れする様になりました。で、周囲で使っている人が少なく日本語情報も少ないので、記事を書くことにしました。

Stylus EXPRESSIVE, DYNAMIC, ROBUST CSS
http://stylus-lang.com/

ちなみに筆者はlessを使用したことはありませんし、sassも最近のバージョンは弄ってないので、他言語の方が良いとか、そんなもの他でも出来るというツッコミあればいただけると嬉しいです。インスール方法とか他CSSに関するタスクランナーなどの設定は割愛。

透過的mixinが良い

stylusを使っていて一番良いと感じたところが、透過的mixinです。予めmixinを定義しておけば、cssにプロパティがある様に扱えるので「こんなプロパティがあったらなぁ」という想いが解消されます。

_mixins.styl
rect(w=0,h=0,l=0,t=0)
  width w
  height h
  left l
  top t
style.styl
@import '_mixins'
.box
  rect 10px 20px 30px 40px
style.css
/* yield  */
.box {
  width: 10px;
  height: 20px;
  left: 30px;
  top: 40px;
}

sassの場合、mixinを呼び出す時は明示的に@includeをつけなければいけませんが、stylusはこれを省略することが出来るため、あたかもそのプロパティが元からある様に振る舞えます。但しその恩恵から、そもそものプロパティさえもオーバーライドしてしまうので、mixinの命名には注意が必要です。

インデントのネストがちょっとね…という時は

sassが支持される理由として「CSS本来の書式に近い」といった点があるかと思います。stylusはsassと同じ様に書くことが出来ます。またlessと同じ様に書くことも出来ます。なんなら混合しても大丈夫。コロンやセミコロンの付与も自由。

style.styl
@import '_mixins'
.box {
  rect: 10px 20px 30px 40px;
  &.yellow{
    background-color: #0ff;
  }
}
style.css
/* yield  */
.box {
  width: 10px;
  height: 20px;
  left: 30px;
  top: 40px;
}
.box.yellow {
  background-color: #ff0;
}

とにかく自由なので、プロジェクトに応じてガイドラインが必要かと。

単位指定を省略するmixin

単位指定はpxが多いため、ただの数値指定はpxになる様にmixinをネストして定義しておきます。

_mixins.styl
_px(v)
  if type(v) == 'unit'
    if unit(v) == ''
      unit(v, 'px')
    else
      v
  else
    v

rect(w=0,h=0,l=0,t=0)
  width _px(w)
  height _px(h)
  left _px(l)
  top _px(t)

こういう定義にしておけば、%とかvwも指定さえすれば適応されるので問題なし。

style.styl
@import '_mixins'
.box
  rect 10 20 30% 40vw
style.css
/* yield  */
.box {
  width: 10px;
  height: 20px;
  left: 30%;
  top: 40vw;
}

ショートハンド化してEmmet風に

オレオレmixinの究極系。Emmetばりに短いタイプ量で済むため、作業効率が上がります。コードを共有する場合は意味不明になるかも。

_mixins.styl
_px(v)
  if type(v) == 'unit'
    if unit(v) == ''
      unit(v, 'px')
    else
      v
  else
    v

rect(w=0,h=0,l=0,t=0)
  width _px(w)
  height _px(h)
  left _px(l)
  top _px(t)

re(w=0,h=0,l=0,t=0)
  rect w h l t

style.styl
@import '_mixins'
.box
  re 10 20 30 40
25
24
2

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
25
24