回答編集履歴

2

コードコメント修正

2019/04/05 12:42

投稿

liveasnotes
liveasnotes

スコア1284

test CHANGED
@@ -208,7 +208,7 @@
208
208
 
209
209
  // cssはPCファーストで書いてたけど,
210
210
 
211
- // jsはSPファーストで書いてるので,'MAX-width: 768.0001px'にしている
211
+ // jsはSPファーストで書いてるので,MAX-width: 768px」ではなく,「MIN-width: 768.0001px
212
212
 
213
213
  const mediaQuery = matchMedia('(min-width: 768.0001px)');
214
214
 

1

コードの追記

2019/04/05 12:42

投稿

liveasnotes
liveasnotes

スコア1284

test CHANGED
@@ -12,6 +12,236 @@
12
12
 
13
13
 
14
14
 
15
+ ```html
16
+
17
+ <input type="checkbox" id="menu_tgl">
18
+
19
+ <label for="menu_tgl" data-ui>menu</label>
20
+
21
+ <header>
22
+
23
+ <nav>
24
+
25
+ <ul id="menu_list">
26
+
27
+ <li><a href="#">AAA</a></li>
28
+
29
+ <li><a href="#">BBB</a></li>
30
+
31
+ <li><a href="#">CCC</a></li>
32
+
33
+ </ul>
34
+
35
+ </nav>
36
+
37
+ </header>
38
+
39
+ ```
40
+
41
+
42
+
43
+ ```css
44
+
45
+ *,*::before,*::after {
46
+
47
+ padding: 0;
48
+
49
+ margin: 0;
50
+
51
+ box-sizing: border-box;
52
+
53
+ }
54
+
55
+
56
+
57
+ [data-ui] {
58
+
59
+ -webkit-user-select: none;
60
+
61
+ -moz-user-select: none;
62
+
63
+ -ms-user-select: none;
64
+
65
+ user-select: none;
66
+
67
+ }
68
+
69
+
70
+
71
+ #menu_tgl,
72
+
73
+ [for="menu_tgl"] {/* toggle */
74
+
75
+ position: fixed;
76
+
77
+ top: 0;
78
+
79
+ right: 0;
80
+
81
+ z-index: 0; /* @SP, for make UNtouchable */
82
+
83
+ display: none;
84
+
85
+ width: 50px;
86
+
87
+ height: 50px;
88
+
89
+ background: palegreen;
90
+
91
+ opacity: 0.5;
92
+
93
+ }
94
+
95
+
96
+
97
+ #menu_list {
98
+
99
+ display: flex;
100
+
101
+ list-style: none;
102
+
103
+ text-align: center;
104
+
105
+ background: palegreen;
106
+
107
+ transition: 0s;
108
+
109
+ }
110
+
111
+
112
+
113
+ #menu_list > li {
114
+
115
+ border: 1px solid gray;
116
+
117
+ padding: 1em;
118
+
119
+ margin: 1em;
120
+
121
+ }
122
+
123
+
124
+
125
+ /* at transition PC -> SP, to prevent show animation of menu, wrapper of menu need to change own position with no transition time */
126
+
127
+ nav {
128
+
129
+ position: fixed;
130
+
131
+ top: 0;
132
+
133
+ left: 0;
134
+
135
+ width: 100%;
136
+
137
+ }
138
+
139
+
140
+
141
+ nav a {
142
+
143
+ display: block;
144
+
145
+ }
146
+
147
+
148
+
149
+ /* @SP */
150
+
151
+ @media screen and (max-width: 768px) {
152
+
153
+ #menu_tgl,
154
+
155
+ [for="menu_tgl"] {
156
+
157
+ display: block;
158
+
159
+ z-index: 100; /* @SP, for make touchable */
160
+
161
+ }
162
+
163
+
164
+
165
+ nav {
166
+
167
+ top: auto;
168
+
169
+ bottom: 100%;
170
+
171
+ }
172
+
173
+
174
+
175
+ #menu_list {
176
+
177
+ flex-direction: column;
178
+
179
+ opacity: 0;
180
+
181
+ transition: 0.5s;
182
+
183
+ }
184
+
185
+
186
+
187
+ #menu_tgl:checked ~ header #menu_list {
188
+
189
+ transform: translateY(100%);
190
+
191
+ opacity: 1;
192
+
193
+ }
194
+
195
+ }
196
+
197
+ ```
198
+
199
+
200
+
201
+ ```js
202
+
203
+ // cf. .matchMedia()でJSでもメディアクエリを使って条件分岐する | SPYWEB
204
+
205
+ // https://spyweb.media/2018/01/10/css-media-queries-in-js-matchmedia/
206
+
207
+
208
+
209
+ // cssはPCファーストで書いてたけど,
210
+
211
+ // jsはSPファーストで書いてるので,'MAX-width: 768.0001px'にしている
212
+
213
+ const mediaQuery = matchMedia('(min-width: 768.0001px)');
214
+
215
+
216
+
217
+ function handle(mq) {
218
+
219
+ if (mq.matches) {
220
+
221
+ document.getElementById("menu_tgl").checked = false;
222
+
223
+ }
224
+
225
+ }
226
+
227
+
228
+
229
+ // ページが読み込まれた時に実行
230
+
231
+ handle(mediaQuery);
232
+
233
+
234
+
235
+ // ウィンドウサイズが変更されても実行されるように
236
+
237
+ mediaQuery.addListener(handle);
238
+
239
+
240
+
241
+ ```
242
+
243
+
244
+
15
245
  そのほか,ひとこと(複数):
16
246
 
17
247