俺得 RSCSS for Vue.js

卍 自己紹介 卍

†漆黒の黒龍†

@すわくん

Suwa Shigeki

2019新卒

DX - DSG - 城本T - FEエンジニア

 

https://ztrehagem.dev

RSCSS

何?

Reasonable System for CSS Stylesheet Structure

略してRSCSS

Sanity(責任能力・冷静さ・健全さ・SAN値のSAN)

損なわないための

CSS構造アイデア集

SAN値チェックをどうぞ。

It says about ...

 

Components

 

Elements
Variants
Helpers

 

and some ideas.

BEMとかSMACSSみたいだね?

Vue.js & Scoped CSS

おさらい。

HTML
CSS
JS

Component

コンポーネントに閉じ込める。

HTML

CSS

JS

外に影響しない。

Really?

NOT Really.

A Trick

of Scoped CSS on Vue.js

落とし穴。

<main>
    <h1 class="foo">Hello World</h1>

    <List />

Page

List

<ul class="bar">
    <li class="baz"></li>
    <li class="baz"></li>

コンポーネント毎にスタイリング

<main v-abcd>
    <h1 class="foo" v-abcd>Hello World</h1>

    <ul class="bar" v-abcd v-wxyz>
        <li class="baz" v-wxyz></li>
        <li class="baz" v-wxyz></li>

Page

List

Rendered!

Scope毎に一意なattr。なぜ?

Vuetiful.

<head>
    <style>
    .foo[v-abcd] { ... }
    .bar[v-wxyz] { ... }
    .baz[v-wxyz] { ... }
    </style>
</head>
<style lang="scss">
.foo { ... }
</style>
<style lang="scss">
.bar { ... }
.baz { ... }
</style>
<main>
    <h1 class="foo">Hello World</h1>
    <h2 class="bar">Heading</h2>
    <List />

Page

List

<ul class="bar">
    <li class="baz"></li>
    <li class="baz"></li>

Scopedなのでやりたい放題だぜ!

<main v-abcd>
    <h1 class="foo" v-abcd>Hello World</h1>
    <h2 class="bar" v-abcd>Heading</h2>
    <ul class="bar" v-abcd v-wxyz>
        <li class="baz" v-wxyz></li>
        <li class="baz" v-wxyz></li>

Page

List

Rendered!

お分かりいただけただろうか

<main v-abcd>
    <h1 class="foo" v-abcd>Hello World</h1>
    <h2 class="bar" v-abcd>Heading</h2>
    <ul class="bar" v-abcd v-wxyz>
        <li class="baz" v-wxyz></li>
        <li class="baz" v-wxyz></li>

Page

List

.foo[v-abcd]
.bar[v-abcd]
.bar[v-wxyz]
.baz[v-wxyz]

!!! CONFLICT !!!

Re: RSCSS

そのためのRSCSS

Components

It will be named with
at least two words,
with a dash between each word.

Elements

Each component may have elements.
They should have classes that are only one word.

.like-button { ... }
.search-form { ... }
.article-card { ... }
.search-form {
    .field { ... }
    .firstname { ... }
}

ありがちな

<main class="main-box" v-abcd>
    <h1 class="foo" v-abcd>Hello World</h1>
    <h2 class="bar" v-abcd>Heading</h2>
    <ul class="baz-list" v-abcd v-wxyz>
        <li class="baz" v-wxyz></li>
        <li class="baz" v-wxyz></li>

Page

List

.foo[v-abcd]
.bar[v-abcd]
.baz-list[v-wxyz]
.baz[v-wxyz]

Smart!

本当のScoped

Why RSCSS?

BEMでいいじゃん

ul.item_list
    li.item_list__item
    li.item_list__item.item_list__item--highlighted

じゃあBEM

.item_list {
    &__item {
        ...
        &--highlighted {

:thinking_face:

ul.item-list
    li.item
    li.item.-highlighted

シンプル・イズ・ベスト

.item-list {
    .item { ... }
    .item.-highlighted { ... }
}

ドチャクソ良い

RSCSS +
Scoped CSS
on Vue.js

これが宇宙の真理

あなたの悩み
Scoped CSSで
解決しませんか

RSCSS美容外科クリニック

RSCSSは
あなたに最適な
パートナーです

RSCSS美容外科クリニック (2)

Pros of RSCSS with Vue.js

まじめな宣伝文句

シンプルを極めた命名規則

とにかくコードの見通しが良い

Positioning Properties のヒント

marginどうする問題を解決に導きます

Scoped CSS 相乗効果

">" 要らずで変更に強い

俺得 RSCSS Overriding
for Vue.js

これさえあれば迷わない。続きはGistで。

俺得 RSCSS for Vue.js

It's over!

俺得 RSCSS for Vue.js

By Shigeki Suwa

俺得 RSCSS for Vue.js

  • 753