@lism-css/mcp 0.15.0 → 0.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/data/docs-index.json +63 -36
- package/dist/data/guides/SKILL.md +136 -24
- package/dist/data/guides/antipatterns.md +318 -0
- package/dist/data/guides/base-styles.md +3 -5
- package/dist/data/guides/components-core.md +8 -10
- package/dist/data/guides/components-ui.md +12 -4
- package/dist/data/guides/css-rules.md +29 -29
- package/dist/data/guides/customize.md +80 -26
- package/dist/data/guides/naming.md +13 -8
- package/dist/data/guides/primitive-class.md +79 -4
- package/dist/data/guides/primitives/a--decorator.md +1 -1
- package/dist/data/guides/primitives/a--divider.md +1 -1
- package/dist/data/guides/primitives/a--icon.md +1 -1
- package/dist/data/guides/primitives/a--spacer.md +1 -1
- package/dist/data/guides/primitives/l--autoColumns.md +71 -0
- package/dist/data/guides/primitives/l--box.md +1 -1
- package/dist/data/guides/primitives/l--center.md +1 -1
- package/dist/data/guides/primitives/l--cluster.md +2 -2
- package/dist/data/guides/primitives/l--columns.md +3 -3
- package/dist/data/guides/primitives/l--flex.md +1 -1
- package/dist/data/guides/primitives/l--flow.md +4 -4
- package/dist/data/guides/primitives/l--frame.md +1 -1
- package/dist/data/guides/primitives/l--grid.md +2 -2
- package/dist/data/guides/primitives/l--stack.md +1 -1
- package/dist/data/guides/primitives/{l--switchCols.md → l--switchColumns.md} +18 -18
- package/dist/data/guides/primitives/l--tileGrid.md +2 -2
- package/dist/data/guides/primitives/{l--sideMain.md → l--withSide.md} +41 -19
- package/dist/data/guides/prop-responsive.md +1 -1
- package/dist/data/guides/property-class/bd.md +4 -4
- package/dist/data/guides/property-class/hov.md +18 -18
- package/dist/data/guides/property-class/max-sz.md +20 -16
- package/dist/data/guides/property-class.md +23 -12
- package/dist/data/guides/set-class.md +2 -2
- package/dist/data/guides/tokens.md +13 -9
- package/dist/data/guides/trait-class/has--gutter.md +2 -2
- package/dist/data/guides/trait-class/has--mask.md +2 -2
- package/dist/data/guides/trait-class/has--snap.md +2 -2
- package/dist/data/guides/trait-class/has--transition.md +2 -2
- package/dist/data/guides/trait-class/is--boxLink.md +2 -2
- package/dist/data/guides/trait-class/is--container.md +13 -5
- package/dist/data/guides/trait-class/is--layer.md +5 -5
- package/dist/data/guides/trait-class/is--wrapper.md +23 -8
- package/dist/data/guides/trait-class.md +2 -2
- package/dist/data/guides/utility-class.md +9 -8
- package/dist/data/meta.js +2 -2
- package/dist/tools/get-guide.js +8 -1
- package/package.json +1 -1
- package/dist/data/guides/primitives/l--fluidCols.md +0 -71
|
@@ -0,0 +1,318 @@
|
|
|
1
|
+
# アンチパターン辞書
|
|
2
|
+
|
|
3
|
+
AI が Lism CSS のコードを生成する際に間違いやすい記法と、その正しい書き方をカタログ化したもの。コードを書く前に該当カテゴリを確認すること。
|
|
4
|
+
|
|
5
|
+
## TOC
|
|
6
|
+
|
|
7
|
+
- [Token typo(存在しない値)](#token-typo存在しない値)
|
|
8
|
+
- [px / 固定値の直書き](#px--固定値の直書き)
|
|
9
|
+
- [Property Class で書けるのに CSS で書く](#property-class-で書けるのに-css-で書く)
|
|
10
|
+
- [`is--` の誤用(状態・バリエーション)](#is---の誤用状態バリエーション)
|
|
11
|
+
- [クラス名の命名ミス(kebab-case)](#クラス名の命名ミスkebab-case)
|
|
12
|
+
- [`--keycolor` の誤用](#--keycolor-の誤用)
|
|
13
|
+
- [Prop 型ミス](#prop-型ミス)
|
|
14
|
+
- [レイアウト選択ミス](#レイアウト選択ミス)
|
|
15
|
+
- [レスポンシブ抜け](#レスポンシブ抜け)
|
|
16
|
+
|
|
17
|
+
---
|
|
18
|
+
|
|
19
|
+
## Token typo(存在しない値)
|
|
20
|
+
|
|
21
|
+
Lism CSS側が用意しているトークン値と異なるものを書かないように注意する。
|
|
22
|
+
正確な一覧は [tokens.md](./tokens.md) を参照すること。
|
|
23
|
+
|
|
24
|
+
ただし、ユーザーが独自に追加定義することは可能。あくまでデフォルトで用意されていないもので間違えやすいものを紹介しておく。
|
|
25
|
+
|
|
26
|
+
### カラー
|
|
27
|
+
|
|
28
|
+
| NG | OK | 理由 |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| `bgc="primary"` | `bgc="brand"` | セマンティックカラーに `primary`/`secondary` は無い。ブランド色は `brand`/`accent` |
|
|
31
|
+
| `bgc="secondary"` | `bgc="base-2"` | サブ背景色は `base-2`(`base-3` がユーザーによって追加定義されている可能性もある) |
|
|
32
|
+
| `c="muted"` | `c="text-2"` | 補助テキスト色は `text-2` |
|
|
33
|
+
| `c="danger"` | `c="red"` | パレットカラーから選ぶ(`red` / `orange` 等) |
|
|
34
|
+
|
|
35
|
+
- セマンティックカラー: `base` / `base-2` / `text` / `text-2` / `divider` / `link` / `brand` / `accent`
|
|
36
|
+
- パレットカラー: `red` / `blue` / `green` / `yellow` / `purple` / `orange` / `pink` / `gray` / `white` / `black`
|
|
37
|
+
|
|
38
|
+
### スペース(`p` / `m` / `g` 等)
|
|
39
|
+
|
|
40
|
+
スペーストークンに**中間値は存在しない**(`5/10/15/20/30/40/50/60/70/80` のみ)。`8/12/14/25/35/45/65/75` 等を書きそうになったら、必ず最寄りトークンに丸めるか、ユーザーに方針確認すること(→ [SKILL.md のデザイン取り込みフロー](./SKILL.md#デザインデータ取り込み時のフロー))。
|
|
41
|
+
|
|
42
|
+
| NG | OK | 理由 |
|
|
43
|
+
|---|---|---|
|
|
44
|
+
| `p="8"` | `p="10"` | スペーストークンは`5/10/15/20/30/40/50/60/70/80`。tailwindのような4の倍数ではない |
|
|
45
|
+
| `g="6"` | `g="5"` | 同上 |
|
|
46
|
+
| `m="25"`, `m="35"` | `m="20"` or `m="30"` | 中間値は存在しない |
|
|
47
|
+
| `m="100"` | `m="80"` | 上限は `80`(ユーザーが追加定義している可能性はある) |
|
|
48
|
+
|
|
49
|
+
### フォントサイズ(`fz`)
|
|
50
|
+
|
|
51
|
+
| NG | OK | 理由 |
|
|
52
|
+
|---|---|---|
|
|
53
|
+
| `fz="14"` | `fz="s"` | `fz` は文字列キー(数値は不可) |
|
|
54
|
+
| `fz="large"`, `fz="md"` | `fz="l"` | 略号は `2xs` / `xs` / `s` / `m` / `l` / `xl` / `2xl` … |
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
### 角丸 / 影
|
|
58
|
+
|
|
59
|
+
| NG | OK | 理由 |
|
|
60
|
+
|---|---|---|
|
|
61
|
+
| `bdrs="sm"`, `bdrs="round"` | `bdrs="20"`, `bdrs="99"` | 角丸トークンは `10` / `20` / `30` / `40` / `99` / `inner` |
|
|
62
|
+
| `bxsh="xs"`, `bxsh="sm"` | `bxsh="10"`, `bxsh="20"` | shadowトークンは `10` / `20` / `30` / `40` / `50` |
|
|
63
|
+
|
|
64
|
+
### プリセット外の値を Lism Props に渡している
|
|
65
|
+
|
|
66
|
+
Lism Props では、props.ts で事前定義されたものが `-{prop}:{value}` クラスとして出力される。それ以外の値はそのまま出力されてCSSとして無効になる。
|
|
67
|
+
|
|
68
|
+
```JSX
|
|
69
|
+
// NG: 事前定義されたトークン値に合致しないため、-lts:2xl は出力されない
|
|
70
|
+
<Text lts="2xl">...</Text>
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
独自にProperty Classを拡張したりトークン値を増やしたりする場合は、 [property-class.md の `:value` 記法](./property-class.md)を活用するか、[`lism.config.js`による拡張](./customize.md)が必要。
|
|
74
|
+
|
|
75
|
+
---
|
|
76
|
+
|
|
77
|
+
## px / 固定値の直書き
|
|
78
|
+
|
|
79
|
+
デザインデータ由来の px / rem / em をそのまま書くと、Lism CSS のスケール統一が崩れる。**書く前に [SKILL.md のデザインデータ取り込み時のフロー](./SKILL.md#デザインデータ取り込み時のフロー) に従い、ユーザーに「A: そのまま採用 / B: 最寄りトークンに丸める / C: トークン基準値を上書きする」を確認すること**。確認なしに固定値を採用しない。
|
|
80
|
+
|
|
81
|
+
### スペース・サイズ
|
|
82
|
+
|
|
83
|
+
| NG | OK | 理由 |
|
|
84
|
+
|---|---|---|
|
|
85
|
+
| `padding: 3px 10px` | `padding: var(--s5) var(--s10)` または Props で `py="5" px="10"` | `3px` はトークン外。最寄りは `--s5`(4px) |
|
|
86
|
+
| `min-width: 28px; height: 28px` | `min-w` / `h` をトークン値に丸める、または基準値を上書き | `28px` はトークン外 |
|
|
87
|
+
| `gap: var(--s5); padding: var(--s10) var(--s15)` を CSS で直書き | `<Lism g="5" py="10" px="15">` | Property Class / Props で書ける |
|
|
88
|
+
|
|
89
|
+
### 角丸・ボーダー
|
|
90
|
+
|
|
91
|
+
| NG | OK | 理由 |
|
|
92
|
+
|---|---|---|
|
|
93
|
+
| `border-radius: 2px` | `border-radius: var(--bdrs--10)`(4px) | 角丸トークンの最小は `--bdrs--10`(4px)。`2px` はトークン外 |
|
|
94
|
+
| `border-radius: 6px` | `--bdrs--10`(4px)か `--bdrs--20`(8px)に丸める | 6px はトークン外 |
|
|
95
|
+
|
|
96
|
+
### タイポグラフィ
|
|
97
|
+
|
|
98
|
+
| NG | OK | 理由 |
|
|
99
|
+
|---|---|---|
|
|
100
|
+
| `font-size: 13px` を直書き | `font-size: var(--fz--xs)` または Props で `fz="xs"` | フォントサイズは調和数列スケール。固定値は避ける |
|
|
101
|
+
| `letter-spacing: 0.02 / 0.12 / 0.14 / 0.18 / 0.2 / 0.24em` を散在 | `--lts--s/-l/-xl` を使う、または独自の `--lts--*` を `global.css` で追加 | デフォルトの `lts` トークンは `s/l/xl` のみ。多種混在はデザイントークンとして不健全 |
|
|
102
|
+
|
|
103
|
+
### 直書きしてよい例外
|
|
104
|
+
|
|
105
|
+
- 1px / -1px の罫線・視覚補正(border / margin の打ち消し)
|
|
106
|
+
- transform / vertical-align 等の微調整値(数 px 単位)
|
|
107
|
+
- `media query` / `@container` の閾値など、ブラウザ仕様上 px 必須の値
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## Property Class で書けるのに CSS で書く
|
|
112
|
+
|
|
113
|
+
`c--*` を定義したくなったら、まず宣言ごとに Property Class へ落とせるか確認する。落とせる宣言を CSS に書くと、CSS が肥大化し、Property Class の利点(差分上書きの容易さ・読みやすさ)が失われる。
|
|
114
|
+
|
|
115
|
+
| NG(CSS 直書き) | OK(Property Class) |
|
|
116
|
+
|---|---|
|
|
117
|
+
| `.c--tag { font-size: var(--fz--xs); padding: var(--s10); background: var(--base-2); border-radius: var(--bdrs--10); }` | `<span class="c--tag -fz:xs -p:10 -bgc:base-2 -bdrs:10">` |
|
|
118
|
+
| `.c--eyebrow { font-size: var(--fz--2xs); color: var(--text-2); text-transform: uppercase; }` | `<span class="c--eyebrow -fz:2xs -c:text-2 -tt:uppercase">` |
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
CSS に残すのは、基本的には `::before` / `> li` などの「Primitive / Trait / Property Class で書けないセレクタ」を伴う宣言。単一要素への装飾束は呼び出し側マークアップに移す。
|
|
122
|
+
|
|
123
|
+
なお、**CSS が空になっても `c--*` クラス名はマークアップに残して構わない**(むしろ推奨)。コンポーネントとしての役割をソースから読み取りやすくする目的で、意味づけ用に付けたままにする。
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
---
|
|
127
|
+
|
|
128
|
+
## `is--` の誤用(状態・バリエーション)
|
|
129
|
+
|
|
130
|
+
Lism CSS の `is--` プレフィックスは「**〜である**」という**役割・存在の宣言**を表す trait 用(`is--container` / `is--wrapper` / `is--layer` / `is--boxLink` / `is--coverLink` / `is--skipFlow` / `is--side` 等)。ユーザーが独自に `is--*` を追加することは可能だが、**その要素の役割(trait)を宣言するもの**であることが条件で、**状態管理やスタイルバリエーション目的に流用しない**(`is--active` / `is--current` / `is--solid` などは誤用)。
|
|
131
|
+
|
|
132
|
+
→ 詳細: [trait-class.md](./trait-class.md#is-trait役割宣言)
|
|
133
|
+
|
|
134
|
+
`is--` と紛れがちな 2 つの用途は、Lism では別の手段で表現する:
|
|
135
|
+
|
|
136
|
+
### 1. 状態管理 → `data-*` 属性を使う
|
|
137
|
+
|
|
138
|
+
オン/オフが切り替わる状態(active / current / disabled / open / selected 等)は、`is--*` クラスを増やさず HTML の `data-*` 属性で表現する。CSS は属性セレクタで書く。
|
|
139
|
+
|
|
140
|
+
| NG | OK |
|
|
141
|
+
|---|---|
|
|
142
|
+
| `<a class="c--catTab is--active">` + `.c--catTab.is--active { ... }` | `<a class="c--catTab" data-is-active>` + `.c--catTab[data-is-active] { ... }` |
|
|
143
|
+
| `<li class="c--pager_num is--current">` + `.c--pager_num.is--current { ... }` | `<li class="c--pager_num" aria-current="page">` + `.c--pager_num[aria-current] { ... }` |
|
|
144
|
+
| `<a class="c--pager_nav is--disabled">` + `.c--pager_nav.is--disabled { ... }` | `<a class="c--pager_nav" data-is-disabled>` + `.c--pager_nav[data-is-disabled] { ... }` |
|
|
145
|
+
|
|
146
|
+
理由:
|
|
147
|
+
|
|
148
|
+
- `is--*` は「役割宣言」用の trait であり、状態を表すクラスを `is--*` として増やすと意味体系(trait か state か)が混在して読みにくくなる
|
|
149
|
+
- `data-*` は HTML 標準の状態表現で、JS からの切替(`element.dataset.isActive = ''` / `delete element.dataset.isActive`)も自然
|
|
150
|
+
- ARIA 属性で意味が表せる場合(`aria-current` / `aria-disabled` / `aria-selected` 等)は ARIA を優先し、その属性自体を CSS セレクタにする
|
|
151
|
+
|
|
152
|
+
### 2. スタイルバリエーション → BEM Modifier `c--{name}--{variant}`
|
|
153
|
+
|
|
154
|
+
「同じコンポーネントの見た目違い」は、Lism CSS 公式の BEM Modifier 記法で表現する(→ [css-rules.md の Component Class](./css-rules.md#component-classc--))。
|
|
155
|
+
|
|
156
|
+
| NG | OK |
|
|
157
|
+
|---|---|
|
|
158
|
+
| `<span class="c--tag is--solid">` + `.c--tag.is--solid { ... }` | `<span class="c--tag c--tag--solid">` + `.c--tag.c--tag--solid { ... }` |
|
|
159
|
+
| `<button class="c--button is--outline">` | `<button class="c--button c--button--outline">` |
|
|
160
|
+
|
|
161
|
+
なお、「色だけ違う」程度ならマークアップ側で `-bgc:* -c:*` を差し替えるだけで済むことも多い。
|
|
162
|
+
|
|
163
|
+
---
|
|
164
|
+
|
|
165
|
+
## クラス名の命名ミス(kebab-case)
|
|
166
|
+
|
|
167
|
+
Lism CSS では、プレフィックス(`c--` / `is--` / `has--` / `u--` / `set--` 等)に続く名称は **camelCase** で書くのが規約。kebab-case で書くと、BEM の Modifier 区切り(`--`)と視覚的に紛れて読みにくくなる。
|
|
168
|
+
|
|
169
|
+
→ 詳細: [naming.md](./naming.md#クラス名)
|
|
170
|
+
|
|
171
|
+
| NG | OK | 理由 |
|
|
172
|
+
|---|---|---|
|
|
173
|
+
| `c--my-card` | `c--myCard` | プレフィックス後の名称は camelCase |
|
|
174
|
+
| `c--my-card--primary` | `c--myCard--primary` | Modifier 区切り `--` と単語区切り `-` が混在して読みにくい |
|
|
175
|
+
| `c--card_my-elem` | `c--card_myElem` | Element 名(`_` 後)も camelCase |
|
|
176
|
+
| `is--side-bar` / `has--gutter-x` | `is--sideBar` / `has--gutterX` | `is--` / `has--` / `u--` 等にも同じ規則が適用される |
|
|
177
|
+
|
|
178
|
+
```jsx
|
|
179
|
+
// NG: kebab-case
|
|
180
|
+
<Stack className="c--feature-card" />
|
|
181
|
+
<div className="c--user-profile c--user-profile--compact" />
|
|
182
|
+
|
|
183
|
+
// OK: camelCase
|
|
184
|
+
<Stack className="c--featureCard" />
|
|
185
|
+
<div className="c--userProfile c--userProfile--compact" />
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## `--keycolor` の誤用
|
|
191
|
+
|
|
192
|
+
`--keycolor` は要素単位で「軸となる色」を切り替えるための**ローカル変数**。サイト全体のブランドカラーやリンクカラーには使わない。
|
|
193
|
+
|
|
194
|
+
### `:root` でのグローバル上書き
|
|
195
|
+
|
|
196
|
+
| NG | OK | 理由 |
|
|
197
|
+
|---|---|---|
|
|
198
|
+
| `:root { --keycolor: #c8553d; }` | `:root { --brand: #c8553d; }`(または `--accent` / `--link`) | サイト共通の色は `--brand` / `--accent` / `--link` などのセマンティックカラーで定義する |
|
|
199
|
+
|
|
200
|
+
### アクセントカラーとしての `keycolor` 参照
|
|
201
|
+
|
|
202
|
+
| NG | OK | 理由 |
|
|
203
|
+
|---|---|---|
|
|
204
|
+
| `<Link c="keycolor">` | `<Link c="brand">` または `<Link c="link">` | リンク・hover などの恒常的なアクセントは `brand` / `link` を使う |
|
|
205
|
+
| `hov={{ c: 'keycolor' }}` | `hov={{ c: 'brand' }}` | 同上 |
|
|
206
|
+
| `border-inline-start: 3px solid var(--keycolor)`(CSS 直書き) | `border-inline-start: 3px solid var(--brand)` | 同上 |
|
|
207
|
+
|
|
208
|
+
### `--keycolor` を使うべき場面
|
|
209
|
+
|
|
210
|
+
「**そのボックス/コンポーネント自身の軸色**」を切り替えたい時のみ:
|
|
211
|
+
|
|
212
|
+
```html
|
|
213
|
+
<!-- u--cbox や c--callout など、ボックス全体の色味を局所的に切り替える -->
|
|
214
|
+
<div class="u--cbox" style="--keycolor: var(--red)">
|
|
215
|
+
<p class="-c" style="--c: var(--keycolor)">danger 用カラーリング</p>
|
|
216
|
+
</div>
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
```jsx
|
|
220
|
+
<Lism class="u--cbox" keycolor="var(--red)">
|
|
221
|
+
<Text c="keycolor">...</Text>
|
|
222
|
+
</Lism>
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
詳細: [tokens.md のキーカラー変数セクション](./tokens.md#キーカラー変数-keycolor)
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
## Prop 型ミス
|
|
230
|
+
|
|
231
|
+
### Heading の `level` は文字列
|
|
232
|
+
|
|
233
|
+
| NG | OK | 理由 |
|
|
234
|
+
|---|---|---|
|
|
235
|
+
| `<Heading level={3}>` | `<Heading level="3">` | `level` は `'1'` 〜 `'6'` の文字列 union 型 |
|
|
236
|
+
|
|
237
|
+
### レスポンシブ値は配列 or オブジェクト
|
|
238
|
+
|
|
239
|
+
| NG | OK | 理由 |
|
|
240
|
+
|---|---|---|
|
|
241
|
+
| `<Columns cols="1,2,3">` | `<Columns cols={[1, 2, 3]}>` | レスポンシブは配列 |
|
|
242
|
+
| `<Box p="20 30 40">` | `<Box p={[20, 30, 40]}>` | 同上 |
|
|
243
|
+
|
|
244
|
+
---
|
|
245
|
+
|
|
246
|
+
## レイアウト選択ミス
|
|
247
|
+
|
|
248
|
+
詳細な選択基準は [primitive-class.md](./primitive-class.md#カラムレイアウト-primitive-の使い分けガイド) の使い分けガイドを参照。
|
|
249
|
+
|
|
250
|
+
### Grid 直書き vs Columns
|
|
251
|
+
|
|
252
|
+
| NG | OK | 理由 |
|
|
253
|
+
|---|---|---|
|
|
254
|
+
| `<Grid gtc="repeat(3, 1fr)">` | `<Columns cols={3}>` | 等幅 N 列は Columns で宣言的に書く |
|
|
255
|
+
| `<Grid gtc={['1fr', '1fr 1fr', '1fr 1fr 1fr']}>` | `<Columns cols={[1, 2, 3]}>` | BP 切替も Columns のほうが簡潔 |
|
|
256
|
+
|
|
257
|
+
### コンテンツ幅のハードコード
|
|
258
|
+
|
|
259
|
+
| NG | OK | 理由 |
|
|
260
|
+
|---|---|---|
|
|
261
|
+
| `style={{ maxWidth: '1200px' }}` | `<Box max-sz="l">` | ヘッダーやセクションなど、コンテンツサイズにはトークン値(`xs` / `s` / `m` / `l` / `xl` / `bleed`)をできるだけ活用する |
|
|
262
|
+
|
|
263
|
+
### サイドバー型レイアウト
|
|
264
|
+
|
|
265
|
+
| NG | OK | 理由 |
|
|
266
|
+
|---|---|---|
|
|
267
|
+
| `<Grid gtc="1fr 240px">` で固定 | `<WithSide sideW="240px">` | コンテンツ幅で自動切替したいなら WithSide |
|
|
268
|
+
| `<Flex>` で 2 カラム強制横並び | `<WithSide>` | 縦並びへの切替が必要なら WithSide |
|
|
269
|
+
|
|
270
|
+
---
|
|
271
|
+
|
|
272
|
+
## レスポンシブ抜け
|
|
273
|
+
|
|
274
|
+
### `is--container` 祖先なしで BP 値を使用
|
|
275
|
+
|
|
276
|
+
レスポンシブ値(配列・オブジェクト・`-{prop}_{bp}` クラス)は、デフォルト設定(SCSS 側 `$is_container_query: 1`)では `@container` クエリで発火するため、祖先要素のいずれかに `is--container`(コンポーネントなら `isContainer` prop)が必須。
|
|
277
|
+
|
|
278
|
+
※ プロジェクトの SCSS 設定で `$is_container_query: 0` にして `@media` クエリ運用に切り替えている場合は、`is--container` 祖先は不要。
|
|
279
|
+
|
|
280
|
+
```jsx
|
|
281
|
+
// NG: container 祖先がないので sm/md 値が発火しない
|
|
282
|
+
<div>
|
|
283
|
+
<Box p={[20, 30, 40]}>...</Box>
|
|
284
|
+
</div>
|
|
285
|
+
|
|
286
|
+
// OK: 祖先に isContainer
|
|
287
|
+
<Stack isContainer>
|
|
288
|
+
<Box p={[20, 30, 40]}>...</Box>
|
|
289
|
+
</Stack>
|
|
290
|
+
```
|
|
291
|
+
|
|
292
|
+
### BP 専用クラスをベース値なしで使う
|
|
293
|
+
|
|
294
|
+
BP 専用クラス(`-{prop}_{bp}`)やコンポーネントの BP キー(`{ sm: ... }` 等)だけを指定すると、BP 未満では値が空になり意図しないレイアウト崩れを起こす。必ずベース値とセットで指定する。
|
|
295
|
+
|
|
296
|
+
```jsx
|
|
297
|
+
// NG: sm 未満で p が未指定になる
|
|
298
|
+
<Box p={{ sm: 30 }}>...</Box>
|
|
299
|
+
|
|
300
|
+
// OK: ベース値(base / 配列の先頭)を必ず添える
|
|
301
|
+
<Box p={{ base: 20, sm: 30 }}>...</Box>
|
|
302
|
+
<Box p={[20, 30]}>...</Box>
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
生 HTML / クラス指定で書く場合も同様:
|
|
306
|
+
|
|
307
|
+
| NG | OK | 理由 |
|
|
308
|
+
|---|---|---|
|
|
309
|
+
| `<div class="-p_sm" style="--p_sm: var(--s30)">` | `<div class="-p:20 -p_sm" style="--p_sm: var(--s30)">` | BP 未満では値が空になるため、ベースクラス `-{prop}:{value}` も必要 |
|
|
310
|
+
|
|
311
|
+
### ブレイクポイントの誤用
|
|
312
|
+
|
|
313
|
+
Lism CSS の標準出力で有効な BP は `sm: 480px` / `md: 800px` まで。`lg` 以降を使う場合は SCSS 設定で出力範囲を拡張する必要がある。`xs` は BP キーとして存在しない。
|
|
314
|
+
|
|
315
|
+
| NG | OK | 理由 |
|
|
316
|
+
|---|---|---|
|
|
317
|
+
| `<Box p={{ xs: 10, sm: 20 }}>` | `<Box p={{ base: 10, sm: 20 }}>` | デフォルトは `base`(`xs` キーは無い) |
|
|
318
|
+
| `cols={[1, 2, 3, 4]}` | `cols={[1, 2, 3]}` | 標準出力では `[base, sm, md]` までが有効。`lg` 以降は SCSS 設定が必要 |
|
|
@@ -9,7 +9,7 @@ Lism CSS は `@layer lism-base` レイヤーで、Reset CSS・HTML要素のベ
|
|
|
9
9
|
- [Reset CSS](#reset-css)
|
|
10
10
|
- [HTML 要素のベーススタイル](#html-要素のベーススタイル)
|
|
11
11
|
|
|
12
|
-
[詳細](https://lism-css.com/docs/base-styles
|
|
12
|
+
[詳細](https://lism-css.com/docs/base-styles.md)
|
|
13
13
|
|
|
14
14
|
---
|
|
15
15
|
|
|
@@ -66,8 +66,6 @@ Reset CSS に加え、`@layer lism-base` 内で HTML タグに基本スタイル
|
|
|
66
66
|
|------|------------|------|
|
|
67
67
|
| `--link-c` | `var(--link)` | リンクテキスト色 |
|
|
68
68
|
| `--link-td` | `underline` | テキスト装飾の種類 |
|
|
69
|
-
| `--link-td-thickness` | `auto` | 下線の太さ |
|
|
70
|
-
| `--link-td-color` | `currentColor` | 下線の色 |
|
|
71
69
|
|
|
72
70
|
### リスト(ul, ol)
|
|
73
71
|
|
|
@@ -75,7 +73,7 @@ class を持たない `ul` / `ol` のみブラウザ標準スタイルが自動
|
|
|
75
73
|
|
|
76
74
|
| 変数 | フォールバック | 用途 |
|
|
77
75
|
|------|------------|------|
|
|
78
|
-
| `--list-px-s` | `
|
|
76
|
+
| `--list-px-s` | `1.75em` | リストの `padding-inline-start` |
|
|
79
77
|
|
|
80
78
|
### テーブル(table, td, th)
|
|
81
79
|
|
|
@@ -83,7 +81,7 @@ class を持たない `ul` / `ol` のみブラウザ標準スタイルが自動
|
|
|
83
81
|
|------|------------|------|
|
|
84
82
|
| `--td-c` | `inherit` | セルのテキスト色 |
|
|
85
83
|
| `--td-bgc` | `transparent` | セルの背景色 |
|
|
86
|
-
| `--td-p` | `var(--s10)` | セルのパディング |
|
|
84
|
+
| `--td-p` | `var(--s10) var(--s15)` | セルのパディング |
|
|
87
85
|
| `--td-min-sz` | `initial` | セルの最小幅 |
|
|
88
86
|
| `--th-c` | `var(--td-c)` | 見出しセルのテキスト色 |
|
|
89
87
|
| `--th-bgc` | `var(--td-bgc)` | 見出しセルの背景色 |
|
|
@@ -20,7 +20,7 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
|
|
|
20
20
|
- [Layout Primitives](#layout-primitives)
|
|
21
21
|
- [`getLismProps()`](#getlismprops--外部コンポーネントとの連携)
|
|
22
22
|
|
|
23
|
-
[詳細](https://lism-css.com/docs/core-components/lism-props
|
|
23
|
+
[詳細](https://lism-css.com/docs/core-components/lism-props.md)
|
|
24
24
|
|
|
25
25
|
---
|
|
26
26
|
|
|
@@ -51,8 +51,6 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
|
|
|
51
51
|
| Prop | 説明 | 例 |
|
|
52
52
|
|------|------|-----|
|
|
53
53
|
| `as` | レンダリングする HTML 要素または外部コンポーネントを指定(デフォルト: `"div"`) | `as="section"`, `as={Image}` |
|
|
54
|
-
| `lismClass` | コンポーネント基底となる `c--*` クラスを指定。`variant` による BEM 展開の対象 | `lismClass="c--myComponent"` |
|
|
55
|
-
| `variant` | `lismClass` 先頭クラスに対する BEM Modifier を付与(`c--` 専用。`a--` / `l--` には展開されない) | `variant="secondary"` |
|
|
56
54
|
| `layout` | レイアウトプリミティブ(`l--{layout}`)を指定 | `layout="flow"` |
|
|
57
55
|
| `atomic` | アトミックプリミティブ(`a--{atomic}`)を指定。`'divider'` / `'spacer'` / `'decorator'` が利用可能(`'icon'` は内部用) | `atomic="divider"` |
|
|
58
56
|
| `set` | セットクラス(`set--{value}`)を指定。スペース区切りで複数指定可。値の先頭に `-` を付けると除外 | `set="plain"`, `set="var:hov var:bxsh"`, `set="-plain"` |
|
|
@@ -68,12 +66,12 @@ import { Lism, Box, Flex, Stack, Grid, Text, Media } from 'lism-css/astro';
|
|
|
68
66
|
<Media as={Image} src="..." p="20" bd />
|
|
69
67
|
// → Image コンポーネントに { className: '-p:20 -bd' } が渡される
|
|
70
68
|
|
|
71
|
-
//
|
|
72
|
-
<Lism
|
|
69
|
+
// className でコンポーネントクラスを付与(c--* も className に直接書く)
|
|
70
|
+
<Lism className="c--myComponent" p="10">...</Lism>
|
|
73
71
|
// → <div class="c--myComponent -p:10">...</div>
|
|
74
72
|
|
|
75
|
-
//
|
|
76
|
-
<Lism
|
|
73
|
+
// BEM Modifier も className にそのまま列挙する
|
|
74
|
+
<Lism className="c--myComponent c--myComponent--secondary">...</Lism>
|
|
77
75
|
// → <div class="c--myComponent c--myComponent--secondary">...</div>
|
|
78
76
|
|
|
79
77
|
// exProps で外部コンポーネント用プロパティを明示的に分離
|
|
@@ -274,9 +272,9 @@ Trait クラス(`is--*` / `has--*`)を出力するためのプロパティ
|
|
|
274
272
|
| `<Frame>` | `l--frame` |
|
|
275
273
|
| `<Columns>` | `l--columns` |
|
|
276
274
|
| `<TileGrid>` | `l--tileGrid` |
|
|
277
|
-
| `<
|
|
278
|
-
| `<
|
|
279
|
-
| `<
|
|
275
|
+
| `<AutoColumns>` | `l--autoColumns` |
|
|
276
|
+
| `<SwitchColumns>` | `l--switchColumns` |
|
|
277
|
+
| `<WithSide>` | `l--withSide` |
|
|
280
278
|
|
|
281
279
|
各プリミティブの詳細は SKILL.md の「プリミティブ単位の詳細リファレンス」、または `primitives/` 配下の各ファイルを参照。
|
|
282
280
|
|
|
@@ -2,12 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
`@lism-css/ui` パッケージには、Lism CSS の上に構築されたインタラクティブな UI コンポーネントが含まれます。
|
|
4
4
|
|
|
5
|
+
import は **コンポーネント単位の deep path** (`@lism-css/ui/{react,astro}/<Component>`)から行うこと。`@lism-css/ui/react` / `@lism-css/ui/astro` からの一括 import は使わない。
|
|
6
|
+
|
|
5
7
|
```jsx
|
|
6
8
|
// React
|
|
7
|
-
import { Accordion
|
|
9
|
+
import { Accordion } from '@lism-css/ui/react/Accordion';
|
|
10
|
+
import { Tabs } from '@lism-css/ui/react/Tabs';
|
|
11
|
+
import { Modal } from '@lism-css/ui/react/Modal';
|
|
12
|
+
import { Button } from '@lism-css/ui/react/Button';
|
|
8
13
|
|
|
9
14
|
// Astro
|
|
10
|
-
import { Accordion
|
|
15
|
+
import { Accordion } from '@lism-css/ui/astro/Accordion';
|
|
16
|
+
import { Tabs } from '@lism-css/ui/astro/Tabs';
|
|
17
|
+
import { Modal } from '@lism-css/ui/astro/Modal';
|
|
18
|
+
import { Button } from '@lism-css/ui/astro/Button';
|
|
11
19
|
```
|
|
12
20
|
|
|
13
21
|
## TOC
|
|
@@ -27,7 +35,7 @@ import { Accordion, Tabs, Modal, Button } from '@lism-css/ui/astro';
|
|
|
27
35
|
- [DummyText](#dummytext)
|
|
28
36
|
- [CLI でプロジェクトにコピーして使う](#cli-でプロジェクトにコピーして使う)
|
|
29
37
|
|
|
30
|
-
[詳細](https://lism-css.com/ui
|
|
38
|
+
[詳細](https://lism-css.com/ui.md)
|
|
31
39
|
|
|
32
40
|
---
|
|
33
41
|
|
|
@@ -68,7 +76,7 @@ import { Accordion, Tabs, Modal, Button } from '@lism-css/ui/astro';
|
|
|
68
76
|
| `type` | `'alert' \| 'point' \| 'warning' \| 'check' \| 'help' \| 'info'` | `'alert'` | アラートタイプ。keycolor と icon の組み合わせプリセット |
|
|
69
77
|
| `keycolor` | `string` | — | キーカラー |
|
|
70
78
|
| `icon` | `ReactNode \| string` | — | カスタムアイコン |
|
|
71
|
-
| `layout` | `'flex' \| '
|
|
79
|
+
| `layout` | `'flex' \| 'withSide'` | `'flex'` | レイアウトプリミティブ |
|
|
72
80
|
| `flow` | `string` | `'s'` | コンテンツを囲む要素のフロー余白 |
|
|
73
81
|
|
|
74
82
|
```jsx
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
- [カスタムCSS を追加する場合](#カスタムcss-を追加する場合)
|
|
9
9
|
- [CSS の配置場所](#css-の配置場所)
|
|
10
10
|
|
|
11
|
-
[詳細](https://lism-css.com/docs/css-methodology
|
|
11
|
+
[詳細](https://lism-css.com/docs/css-methodology.md)
|
|
12
12
|
|
|
13
13
|
> **命名規則の詳細**: CSS変数名・クラス名・Property Class の `{prop}` / `{value}` の省略ルールについては [naming.md](./naming.md) を参照してください。
|
|
14
14
|
|
|
@@ -21,46 +21,46 @@ Lism CSS は CSS Layers による詳細度管理を採用しています。
|
|
|
21
21
|
|
|
22
22
|
```
|
|
23
23
|
Settings(トークン定義)
|
|
24
|
-
→ @layer lism-base(Reset CSS
|
|
24
|
+
→ @layer lism-base(Reset CSS・トークン・set-- クラス)
|
|
25
25
|
→ @layer reset(リセットCSS)
|
|
26
|
-
→ @layer lism-trait
|
|
26
|
+
→ @layer lism-trait(is-- / has-- Trait Class)
|
|
27
27
|
→ @layer lism-primitive
|
|
28
|
-
→ @layer layout
|
|
29
|
-
→ @layer atomic
|
|
30
|
-
→ @layer lism-component
|
|
28
|
+
→ @layer layout(l-- Layout Primitive)
|
|
29
|
+
→ @layer atomic(a-- Atomic Primitive)
|
|
30
|
+
→ @layer lism-component(c-- Component Class — BEM 構造を持つ UI 部品)
|
|
31
31
|
→ @layer lism-custom(ユーザーカスタマイズ用)
|
|
32
|
-
→ @layer lism-utility
|
|
32
|
+
→ @layer lism-utility(u-- ユーティリティクラス)
|
|
33
33
|
→ Property Class(レイヤー外 — 最も詳細度が高い)
|
|
34
34
|
```
|
|
35
35
|
|
|
36
36
|
|
|
37
37
|
## クラス分類とプレフィックス
|
|
38
38
|
|
|
39
|
-
[詳細](https://lism-css.com/docs/naming
|
|
39
|
+
[詳細](https://lism-css.com/docs/naming.md)
|
|
40
40
|
|
|
41
41
|
Lism CSSで定義されるクラスは、その役割とレイヤーの所属が決まっており、その分類によってプレフィックスが定められています。
|
|
42
42
|
|
|
43
43
|
| 分類 | 役割 | プレフィックス | 例 |
|
|
44
44
|
|---|---|---|---|
|
|
45
|
-
| Set Class | ベーススタイル上書き・変数提供 | `set--` |
|
|
46
|
-
| Layout Primitive | レイアウトの構成単位となる Primitive | `l--` |
|
|
47
|
-
| Atomic Primitive | レイアウトの最小単位となる Primitive | `a--` |
|
|
48
|
-
| Component Class | BEM 構造を持つ UI 部品 | `c--` |
|
|
49
|
-
| `is--` Trait | 要素に役割(〜である)を宣言 | `is--` |
|
|
50
|
-
| `has--` Trait | 要素に機能(〜を持つ)を付与 | `has--` |
|
|
51
|
-
| Utility Class | 用途が明確な装飾系ユーティリティ | `u--` |
|
|
52
|
-
| Property Class | 単一プロパティの制御 | `-` |
|
|
45
|
+
| Set Class | ベーススタイル上書き・変数提供 | `set--` | `set--plain`, `set--revert`, `set--var:hov`, `set--var:bxsh` |
|
|
46
|
+
| Layout Primitive | レイアウトの構成単位となる Primitive | `l--` | `l--grid`, `l--flex`, `l--stack` |
|
|
47
|
+
| Atomic Primitive | レイアウトの最小単位となる Primitive | `a--` | `a--icon`, `a--divider` |
|
|
48
|
+
| Component Class | BEM 構造を持つ UI 部品 | `c--` | `c--button`, `c--accordion` |
|
|
49
|
+
| `is--` Trait | 要素に役割(〜である)を宣言 | `is--` | `is--container`, `is--wrapper`, `is--layer`, `is--boxLink` |
|
|
50
|
+
| `has--` Trait | 要素に機能(〜を持つ)を付与 | `has--` | `has--transition`, `has--gutter`, `has--snap`, `has--mask` |
|
|
51
|
+
| Utility Class | 用途が明確な装飾系ユーティリティ | `u--` | `u--cbox`, `u--trim`, `u--divide`, `u--cells` |
|
|
52
|
+
| Property Class | 単一プロパティの制御 | `-` | `-fz:l`, `-p:20`, `-d:none` |
|
|
53
53
|
|
|
54
54
|
**併用ルール:**
|
|
55
|
-
-
|
|
56
|
-
- 同カテゴリ内の Primitive 併用は不可(例:
|
|
57
|
-
-
|
|
58
|
-
-
|
|
59
|
-
-
|
|
55
|
+
- `l--` と `c--` は併用OK(例: `<div class="l--flex c--nav">`)
|
|
56
|
+
- 同カテゴリ内の Primitive 併用は不可(例: `l--flex` と `l--grid`、`a--icon` と `a--divider` は同要素に付けない)
|
|
57
|
+
- `l--` × `a--` は非推奨(役割的に同居しない想定)
|
|
58
|
+
- `is--` / `has--` 同士は併用OK(Trait は複数併用できる)
|
|
59
|
+
- `is--` / `has--` × `l--` / `a--` も併用OK
|
|
60
60
|
- `c--` の Block 同士の併用(`.c--xxx.c--yyy`)は基本 NG。ただし以下は許容:
|
|
61
61
|
- Block と自身の Modifier: `.c--button.c--button--outline`
|
|
62
62
|
- Block と他 Block の Element: `.c--xxx.c--yyy_elem`
|
|
63
|
-
- 子要素:
|
|
63
|
+
- 子要素: `c--card_header`, `c--card_body`(`c--` のみ Element を持つ。`_` 一つ区切り)
|
|
64
64
|
|
|
65
65
|
**`is--` と `has--` の判定軸:**
|
|
66
66
|
|
|
@@ -107,18 +107,18 @@ class 属性にクラスを直接記述する場合は、以下の順序で並
|
|
|
107
107
|
|
|
108
108
|
| 分類 | 形式 | 例 |
|
|
109
109
|
|---|---|---|
|
|
110
|
-
| Block |
|
|
111
|
-
| Modifier |
|
|
112
|
-
| Element |
|
|
110
|
+
| Block | `c--{name}` | `c--button`, `c--card` |
|
|
111
|
+
| Modifier | `c--{name}--{modifier}` | `c--button--outline` |
|
|
112
|
+
| Element | `c--{name}_{element}` | `c--card_header`, `c--card_body` |
|
|
113
113
|
|
|
114
114
|
- Modifier は Block と併記して使用: `.c--button.c--button--outline`
|
|
115
115
|
- Element は `_`(アンダースコア)一つ区切り
|
|
116
116
|
- Block 同士の併用(`.c--xxx.c--yyy`)は基本 NG。ただし次は許容される:
|
|
117
|
-
- Block と自身の Modifier: `.c--xxx.c--xxx--
|
|
117
|
+
- Block と自身の Modifier: `.c--xxx.c--xxx--modifier`
|
|
118
118
|
- Block と他 Block の Element: `.c--xxx.c--yyy_elem`
|
|
119
|
-
- `a--` / `l--`
|
|
119
|
+
- BEM の Modifier / Element 構造を持つのは `c--` のみ。`a--` / `l--` には適用しない
|
|
120
120
|
|
|
121
|
-
`c--` を使った独自コンポーネントを使う場合でも、他の Primitive
|
|
121
|
+
`c--` を使った独自コンポーネントを使う場合でも、他の Primitive クラス(`l--`, `is--`)や Property Class(`-{prop}:{value}`)との組み合わせを前提とした設計にすることで CSS の記述量を削減できます。`c--` クラスにスタイルが全くなく、HTML 側での可視性を高める名前付けのためだけに利用しても構いません。
|
|
122
122
|
|
|
123
123
|
|
|
124
124
|
### 作成例
|
|
@@ -148,7 +148,7 @@ class 属性にクラスを直接記述する場合は、以下の順序で並
|
|
|
148
148
|
|
|
149
149
|
```jsx
|
|
150
150
|
export default function MyCard(props) {
|
|
151
|
-
return <Stack
|
|
151
|
+
return <Stack className="c--myCard" g="20" p="30" bdrs="20" bxsh="20" bd {...props} />;
|
|
152
152
|
}
|
|
153
153
|
```
|
|
154
154
|
|