teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

訂正

2020/05/21 14:47

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -1,190 +1,3 @@
1
- ### 前提・実現したいこと
2
- プログラミング初心者です。
1
+ 修正中
3
- 練習のために画像の枚数によって、htmlにクラスを追加し、表示を変えるということをしたいと思っています。
4
- 本当に見当違いなことをしていそうなので、お恥ずかしい限りですが、1日悩んでも解決しなかったので
5
- お力を貸していただければと思います。
6
- クラスgrid-contanerは計6つあります。そのクラス1つ1つにaタグと画像を配置しており、それぞれで要素の数が違います。
7
- その違う要素の数を取得し。1つの時はこのクラスを表示する、2つの時はこのクラス・・・と指定していきたいのですが、
8
- 要素の数が取り出せません。
9
- 複数の同一クラス名を使っていてはできないのでしょうか?
10
2
 
11
- **追記**
12
- 各子要素(divタグで分けているもの)につけているitem1などは最終的に外して、javascriptで条件に合えばCSSの.item1を適用させるために、各画像の要素ごとにclass item1などを追加しようとしています。
13
- 今かけているjavascriptの場合だと、moreというクラスを、grid-contaner内の画像の数が6枚以上の時にitem5 moreのようにitem5クラスにmoreを追加しようとしています。
14
- イメージとしては、ツイッターなどで画像を複数枚投稿する時の表示を作ってみたいのです。
15
- 1枚の時はそのまま1枚の表示、2枚の時は2枚が見えるように2分の1の表示になる、、3枚投稿すると1枚目は2分の1、2枚目3枚目は4分の1ずつに分けられて表示される。というものを再現してみたいと思っています。
16
- のため、各画像要素1枚ずつにCSSを用するためクラスを追加す。
3
+ 質問仕方に指摘がありましたの、適切な文章、コード書き直す。
17
- まずは枚数ごとに表示を変えるという記載をjavascriptでしなくてはいけないと思ったので、枚数を取得する方法が知りたいです。
18
-
19
- ### 発生している問題・エラーメッセージ
20
- .querySelectorAll('.grid-contaner')に.lengthをつけて数を調べると、6でした。
21
- おそらく、class=grid-contanerの数かと思います。
22
- そのクラス内の画像の枚数をカウントして、もしその画像が6枚以上なら、このクラスを追加するというコードを書きたいです。
23
- ```
24
- エラーメッセージ
25
- ```
26
-
27
- ### 該当のソースコード
28
-
29
- ```html
30
- <!DOCTYPE html>
31
- <html lang="en" dir="ltr">
32
- <head>
33
- <meta charset="utf-8">
34
- <link rel="stylesheet" href="photo.css">
35
- <title>photo</title>
36
- </head>
37
-
38
- <body>
39
- <p>5枚のとき</p>
40
- <div class = "grid-contaner">
41
- <div class = "item1"><a href = "image/01.JPG"><img src = "image/01.JPG"></a></div>
42
- <div class = "item2"><a href = "image/02.JPG"><img src = "image/02.JPG"></a></div>
43
- <div class = "item3"><a href = "image/03.JPG"><img src = "image/03.JPG"></a></div>
44
- <div class = "item4"><a href = "image/04.JPG"><img src = "image/04.JPG"></a></div>
45
- <div class = "item5"><a href = "image/05.JPG"><img src = "image/05.JPG"></a></div>
46
- </div>
47
-
48
- <p>4枚のとき</p>
49
- <div class = "grid-contaner">
50
- <div class = "item1"><a href = "image/01.JPG"><img src = "image/01.JPG"></a></div>
51
- <div class = "item2"><a href = "image/02.JPG"><img src = "image/02.JPG"></a></div>
52
- <div class = "item6"><a href = "image/03.JPG"><img src = "image/03.JPG"></a></div>
53
- <div class = "item7"><a href = "image/04.JPG"><img src = "image/04.JPG"></a></div>
54
- </div>
55
- <p>3枚のとき</p>
56
- <div class = "grid-contaner">
57
- <div class = "item1"><a href = "image/01.JPG"><img src = "image/01.JPG"></a></div>
58
- <div class = "item2"><a href = "image/02.JPG"><img src = "image/02.JPG"></a></div>
59
- <div class = "item8"><a href = "image/03.JPG"><img src = "image/03.JPG"></a></div>
60
- </div>
61
- <p>2枚のとき</p>
62
- <div class = "grid-contaner">
63
- <div class = "item9"><a href = "image/01.JPG"><img src = "image/01.JPG"></a></div>
64
- <div class = "item8"><a href = "image/02.JPG"><img src = "image/02.JPG"></a></div>
65
- </div>
66
- <p>1枚のとき</p>
67
- <div class = "grid-contaner">
68
- <div class = "item10"><a href = "image/01.JPG"><img src = "image/01.JPG"></a></div>
69
- </div>
70
-
71
- <p>6枚のとき</p>
72
- <div class = "grid-contaner" >
73
- <div class = "item1"><a href = "image/01.JPG"><img src = "image/01.JPG"></a></div>
74
- <div class = "item2"><a href = "image/02.JPG"><img src = "image/02.JPG"></a></div>
75
- <div class = "item3"><a href = "image/03.JPG"><img src = "image/03.JPG"></a></div>
76
- <div class = "item4"><a href = "image/04.JPG"><img src = "image/04.JPG"></a></div>
77
- <div class = "item5"><a href = "image/05.JPG"><img src = "image/05.JPG"></a></div>
78
- <div class = "item"><a href = "image/06.JPG"><img src = "image/06.JPG"></a></div>
79
- </div>
80
-
81
- <script src="photobox.js"></script>
82
- </body>
83
- </html>
84
- ```
85
- ```Javascript
86
- let contaner = document.querySelectorAll('.grid-contaner');
87
- for (var i = 0; i < contaner.length; i++) {
88
- const numbering = contaner[i];
89
- if(numbering >= 6 == true){
90
- let overMore = document.querySelectorAll('.item5');
91
- for (let i = 0; i < overMore.length; i++) {
92
- let addMore = overMore[i];
93
- addMore.classList.add('more');
94
- }
95
- }
96
- }
97
- ```
98
- ```css
99
- .grid-contaner{
100
- display:grid;
101
- width: 600px;
102
- height: 600px;
103
- grid-template-rows: 300px 300px;
104
- grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
105
-
106
- }
107
-
108
- .grid-contaner img{
109
- object-fit: cover;
110
- width: 100%;
111
- height: 100%;
112
- }
113
-
114
- .item1{
115
- grid-column: 1 / 8;
116
- grid-row: 1 / 2;
117
-
118
- }
119
- .item2{
120
- grid-column: 8 / 16;
121
- grid-row: 1 / 2;
122
-
123
- }
124
- .item3{
125
- grid-column: 1 / 6;
126
- grid-row: 2 / 3;
127
- }
128
- .item4{
129
- grid-column: 6 / 11;
130
- grid-row: 2 / 3;
131
- }
132
- .item5{
133
- grid-column: 11 / 16;
134
- grid-row: 2 / 3;
135
- }
136
-
137
- .item6{
138
- grid-column: 1 / 8;
139
- grid-row: 2 / 3;
140
- }
141
-
142
- .item7{
143
- grid-column: 8 / 16;
144
- grid-row: 2 / 3;
145
- }
146
-
147
- .item8{
148
- grid-column: 1 / 16;
149
- grid-row: 2 / 3;
150
- }
151
-
152
- .item9{
153
- grid-column: 1 / 16;
154
- grid-row: 1 / 2;
155
- }
156
- .item10{
157
- grid-area: 1 / 1 / 3 / 16;
158
- }
159
-
160
- .item0{
161
- display: none;
162
- }
163
-
164
- .more p{
165
- font-size:2.5rem;
166
- display:block;
167
- position: relative;
168
- left: 70px;
169
- top: -170px;
170
- color: white;
171
- }
172
- .more{
173
- background-color: gray;
174
- }
175
- .more img{
176
- opacity: 0.6;
177
- display: block;
178
- }
179
- .more a{
180
- color: white;
181
- text-decoration: none;
182
- }
183
-
184
- ```
185
- ### 試したこと
186
- querySelectorAllをforを使って回して要素数を取ろうと思ったのですが、うまくできませんでした。
187
-
188
- ### 補足情報(FW/ツールのバージョンなど)
189
- jQueryは一回も勉強をしたことがなくわからないので、javascriptで解決したいです。
190
- これを使ったほうが良い!などもあれば合わせてご教示ください。勉強したいと思います。

2

質問の分かりにくい部分を説明する記載を追記しました。

2020/05/21 14:47

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -8,6 +8,14 @@
8
8
  要素の数が取り出せません。
9
9
  複数の同一クラス名を使っていてはできないのでしょうか?
10
10
 
11
+ **追記**
12
+ 各子要素(divタグで分けているもの)につけているitem1などは最終的に外して、javascriptで条件に合えばCSSの.item1を適用させるために、各画像の要素ごとにclass item1などを追加しようとしています。
13
+ 今かけているjavascriptの場合だと、moreというクラスを、grid-contaner内の画像の数が6枚以上の時にitem5 moreのようにitem5クラスにmoreを追加しようとしています。
14
+ イメージとしては、ツイッターなどで画像を複数枚投稿する時の表示を作ってみたいのです。
15
+ 1枚の時はそのまま1枚の表示、2枚の時は2枚が見えるように2分の1の表示になる、、3枚投稿すると1枚目は2分の1、2枚目3枚目は4分の1ずつに分けられて表示される。というものを再現してみたいと思っています。
16
+ そのため、各画像の要素1枚ずつに、CSSを適用するためにクラスを追加したいです。
17
+ まずは枚数ごとに表示を変えるという記載をjavascriptでしなくてはいけないと思ったので、枚数を取得する方法が知りたいです。
18
+
11
19
  ### 発生している問題・エラーメッセージ
12
20
  .querySelectorAll('.grid-contaner')に.lengthをつけて数を調べると、6でした。
13
21
  おそらく、class=grid-contanerの数かと思います。

1

cssの記述を追加しました。

2020/05/20 04:40

投稿

退会済みユーザー
title CHANGED
File without changes
body CHANGED
@@ -87,6 +87,93 @@
87
87
  }
88
88
  }
89
89
  ```
90
+ ```css
91
+ .grid-contaner{
92
+ display:grid;
93
+ width: 600px;
94
+ height: 600px;
95
+ grid-template-rows: 300px 300px;
96
+ grid-template-columns: 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr 1fr;
97
+
98
+ }
99
+
100
+ .grid-contaner img{
101
+ object-fit: cover;
102
+ width: 100%;
103
+ height: 100%;
104
+ }
105
+
106
+ .item1{
107
+ grid-column: 1 / 8;
108
+ grid-row: 1 / 2;
109
+
110
+ }
111
+ .item2{
112
+ grid-column: 8 / 16;
113
+ grid-row: 1 / 2;
114
+
115
+ }
116
+ .item3{
117
+ grid-column: 1 / 6;
118
+ grid-row: 2 / 3;
119
+ }
120
+ .item4{
121
+ grid-column: 6 / 11;
122
+ grid-row: 2 / 3;
123
+ }
124
+ .item5{
125
+ grid-column: 11 / 16;
126
+ grid-row: 2 / 3;
127
+ }
128
+
129
+ .item6{
130
+ grid-column: 1 / 8;
131
+ grid-row: 2 / 3;
132
+ }
133
+
134
+ .item7{
135
+ grid-column: 8 / 16;
136
+ grid-row: 2 / 3;
137
+ }
138
+
139
+ .item8{
140
+ grid-column: 1 / 16;
141
+ grid-row: 2 / 3;
142
+ }
143
+
144
+ .item9{
145
+ grid-column: 1 / 16;
146
+ grid-row: 1 / 2;
147
+ }
148
+ .item10{
149
+ grid-area: 1 / 1 / 3 / 16;
150
+ }
151
+
152
+ .item0{
153
+ display: none;
154
+ }
155
+
156
+ .more p{
157
+ font-size:2.5rem;
158
+ display:block;
159
+ position: relative;
160
+ left: 70px;
161
+ top: -170px;
162
+ color: white;
163
+ }
164
+ .more{
165
+ background-color: gray;
166
+ }
167
+ .more img{
168
+ opacity: 0.6;
169
+ display: block;
170
+ }
171
+ .more a{
172
+ color: white;
173
+ text-decoration: none;
174
+ }
175
+
176
+ ```
90
177
  ### 試したこと
91
178
  querySelectorAllをforを使って回して要素数を取ろうと思ったのですが、うまくできませんでした。
92
179