回答編集履歴

1

class 属性書き換え推奨の説明が抽象的だったので具体例を書き加えて大幅に編集

2015/08/19 05:25

投稿

think49
think49

スコア18164

test CHANGED
@@ -90,20 +90,78 @@
90
90
 
91
91
 
92
92
 
93
- 要件はこれで満たせますが、問題点は残ります。
93
+ ---
94
94
 
95
95
 
96
96
 
97
- - このスタイルシートの変更には何らかの論理構造的な意味合いがあると思われますが、`cssRules` を直接改変しまうとその意味が読み取れません
97
+ ただし、文脈よって class の付け外で制御た場合もあり
98
98
 
99
- - `.hoge` に対して処理を行う場合、タイルシー改変後なのか改変前なのか判定するためは `cssRules` を参照するか、`getComputedStyle` を参照する必要があります。
99
+ よくあるアコーディオンメニューのクリプトをります。
100
100
 
101
101
 
102
102
 
103
+ ```HTML
104
+
105
+ <style>
106
+
107
+ .sample { /* アコーディオン最上位要素 */ }
108
+
109
+ .hoge { /* アコーディオン開閉要素(default) */ }
110
+
111
+ .hidden { /* アコーディオン開閉要素を閉じる CSSRule */ }
112
+
113
+ </style>
114
+
115
+ </head>
116
+
117
+ <body>
118
+
119
+ <dl class="sample">
120
+
121
+ <dt>A</dt>
122
+
123
+ <dd class="hoge">Aの説明文</dt>
124
+
125
+ <dt>B</dt>
126
+
127
+ <dd class="hoge hidden">Bの説明文</dt>
128
+
129
+ <dt>C</dt>
130
+
131
+ <dd class="hoge hidden">Cの説明文</dt>
132
+
133
+ </dl>
134
+
135
+ ```
136
+
137
+
138
+
139
+ dd要素がアコーディオンで開閉する要素であり、`.hidden` で閉じた要素、`.hidden` が存在しないのが開いた要素です。
140
+
141
+ `.hidden` を付与する事で閉じた事が分かるようにする効果があります。
142
+
143
+ (説明が複雑になるので省略しますが、WAI-ARIA の [aria-hidden](http://momdo.github.io/wai-aria-1.1/#aria-hidden) 属性を使うべきかもしれません)
144
+
145
+
146
+
147
+ もし、このアコーディオンで全てのdd要素を閉じる為に `.hoge` の CSSRule を書き換える実装にした場合、後で対象のdd要素が閉じているか、開いているか、を判断するためにdd要素ノードの getComputedStyle を確認するか、`.hoge` の CSSRule を参照しなくてはなりません。
148
+
103
- この案件が論理構造に変更があスタイルシート書き換えであるならば、`class="hoge"` から `class="hoge foo"` に変更して `.foo` に論理的な意味合い持たせ方法が良いと思います。
149
+ CSSRule を辿るなら `.hoge` だけでは十分ではない場合もあり、`.sample>.hoge` `dd.hoge` 等の対象要素適用される全ての CSSRule 参照す状況も考えられます。
150
+
151
+
152
+
153
+ 質問の背景が不明なので確かな事はいえませんが、「論理的な意味付けなしに `.hoge` の CSSRule が書き換わる状況」が私には想定できませんでした。
154
+
155
+ 論理的な意味付けなしに CSSRule が書き換わるとすれば、それは CSS でやるべき実装にも思えます。
156
+
157
+ 「外部CSSを編集できる権限がなくて JavaScript で CSSRule を書き換える」というケースであれば納得できますが、ちょっとイレギュラーすぎかもしれませんね。
104
158
 
105
159
 
106
160
 
107
161
  P.S.
108
162
 
109
163
  解決済みのようですが、[NIA さん](https://teratail.com/questions/14433#r22172)からリクエストを頂いたので回答しています。
164
+
165
+
166
+
167
+ (2015/08/19 14:25追記) class 属性書き換え推奨の説明が抽象的だったので具体例を書き加えて大幅に編集しました。