回答編集履歴
1
class 属性書き換え推奨の説明が抽象的だったので具体例を書き加えて大幅に編集
test
CHANGED
@@ -90,20 +90,78 @@
|
|
90
90
|
|
91
91
|
|
92
92
|
|
93
|
-
|
93
|
+
---
|
94
94
|
|
95
95
|
|
96
96
|
|
97
|
-
|
97
|
+
ただし、文脈によっては class の付け外しで制御した場合もあります。
|
98
98
|
|
99
|
-
|
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
|
-
|
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 属性書き換え推奨の説明が抽象的だったので具体例を書き加えて大幅に編集しました。
|