Skip to content

Instantly share code, notes, and snippets.

@watilde
Created March 24, 2015 07:15
Show Gist options
  • Save watilde/67df7206d1c1c04c3a56 to your computer and use it in GitHub Desktop.
Save watilde/67df7206d1c1c04c3a56 to your computer and use it in GitHub Desktop.
.className = {
text-align: center,
color: #000,
&.hasClassName: {
color: red
}
};
@oti
Copy link

oti commented Mar 24, 2015

アンパサンドはそれでよさそうだけど、子要素の入れ子記述はどうしたらいいんかの。直接の子要素とか隣接セレクタはそのまま書けそうだけど。

.className = {
  >.child: {prop: value},  // Child combinator
  +.next: {prop: value},  // Next-sibling combinator
  " .child": {prop: value}, // quoting include space...?
};

@watilde
Copy link
Author

watilde commented Mar 24, 2015

コメントありがとうございます!

Sassと同じにしようかなぁと考えてます

.className = {
  .child: { prop : value }
}

@oti
Copy link

oti commented Mar 24, 2015

あそっか、別にスペースとかはいらなくてよかったんだ。

となると他は擬似クラスとか擬似要素の構文が気になるけど、これもそのまま書けば大丈夫そうなのかな

.className = {
  .child:nth-child(n): { prop : value },
  .child::after: { prop : value },
  .child:not(:nth-child(n)): { prop : value }
};

読みづらさがでなくもない…

@watilde
Copy link
Author

watilde commented Mar 24, 2015

Sassで書いてもツラいところは同じことになりそうですね><
変数とテンプレートリテラル使って展開したら短く書けそうですね

e.g.

var child = function (n) { return `nth-child(${n})`; };
var after = "::after";
var notChild = function (n) { return `not(:nth-child(${n}))`; };

.className = {
  `.child${child(n)}`: { prop : value },
  `.child${after}`: { prop : value }
  `.child${notChild(n)})`: { prop : value }
};

CSSの文脈に限り、テンプレートリテラルに必要な ` を省略する機能も提供できそう

@oti
Copy link

oti commented Mar 24, 2015

LGTM!
変数を使うのはありですねー。でもJSってオブジェクトのキー側にfunctionは使えるんでしたっけ?
Sassだとインターポレーションでセレクタやプロパティに変数をうめこむのができますけども。

@watilde
Copy link
Author

watilde commented Mar 24, 2015

可能にします 😼

この構文をトランスパイルしてJSにして、実行結果のObjectをCSSにするイメージなので
なんとかできそう。あとは良い名前を考えてじわじわやっていきます〜

@oti
Copy link

oti commented Mar 24, 2015

可能にします 😼

カッコイイ...///

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment