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

回答編集履歴

1

修正

2020/05/10 12:21

投稿

okina
okina

スコア471

answer CHANGED
@@ -1,12 +1,48 @@
1
- positionがabsoluteになっているので、画像を表示するぶんの領域を確保しなければなりません。
1
+ https://jsfiddle.net/26fv3zj9/
2
- なぜこのような方法にするかというと、画像は文字等に比べると重たいため、遅れて読み込まれ、そのときにユーザーが読んでいるところからズレてしまったりします。それを避けるためです。
3
2
 
3
+ 適当に作ったのですが、padding-topをAAAに設定しないとこうなります。
4
+ 画像のpositionがabsoluteなので、次の要素CCCが重なっています。
4
- absoluteしてその画像分のスペースをpadding-topで取っおきます。
5
+ これを回避するためどうすればいいかというとpadding-topで画像分のスペースを確保しやるのです。
6
+ 質問者様はpaddingは余白を作るとおっしゃいましたが、その通りです。画像分の余白をpaddingで作っているのです。
5
7
 
6
- 133.3333...%というのは、画像の縦横比由来すす。
8
+ なぜこのようにするかというおそらく、画像の読み込み遅延よって表示が崩れるのを防ぐためだと思います。
7
- **padding親要素の横幅を基準とします。**
9
+ 画像文字に比べる重いので、読み込みが遅いです。そのため遅延て読み込んだりします。
8
10
 
9
- なの親要素横幅いっぱいに画像を表示し場合、133.3...%のpadding-topを確保しておくと、
11
+ すると、一旦画像はかったもとしてレンダリングされ画像が読み込まれるとページがズレます。Webページ読んで、途中で読んでたこと違うところに飛ばされた経験ありませんか、、?
10
- 4:3の縦長画像のサイズ分ぴったりになるのです。
11
12
 
13
+ そこで、これを回避するために画像分の余白を最初から作っとくのです。
14
+ padding-topで!
15
+
16
+ 画像が読み込まれるまでは余白として働き、画像が読み込まれた後は画像の下に隠れて役目を終えます。
17
+
18
+ では、なぜpadding-topは133.33333...%なのかという説明に移ります。
19
+
20
+ 先ほども述べましたように、画像分の余白を作るのが目的ですので、高さは画像と同じにしたいのです。正直幅はあまり問題になりません。普通サイトは縦に進むので。
21
+
22
+ paddingを%で指定するときには、親要素の横幅が基準になります。
23
+
24
+ ここで、親要素の幅いっぱいに画像を表示するように設定したとします。
25
+
26
+ では、paddingの高さをどのように指定すればいいのでしょう。
27
+
28
+ 画像が親要素の幅いっぱいに表示されること、paddingが親要素の幅が基準になることを前提にすると、後一つ必要な情報があります。
29
+
30
+ それが、「画像の縦横比」です。
31
+
32
+ 例えば、正方形ならば
33
+ 画像の高さ(paddingの高さ)=画像の幅=親要素の幅で100%になります。
34
+
35
+ 4:3の画像(横長)ならば、高さは幅の75%なので、
36
+ 画像の高さ(paddingの高さ)=画像の幅*75%=親要素の幅*75%で、75%と指定すればいいことになります。
37
+
38
+
12
- 説明が難しいのですが、画像のpositionがabsoluteであるとと、133.333...%は画像の縦横比由来するものであることあたが重要かと思います。
39
+ 最後に4:3の縦長の画像の場合を考えます。の場合高さは幅の、(4÷3で)133.33333....%にります。
40
+ ここで133.3333...%が登場します。
41
+ なので、おそらく表示する画像の縦横比が3:4(縦長)だったのだと思います。
42
+
43
+ 非常に長くわかりにくい文章だと思います。申し訳ありません。
44
+
45
+ 今ご理解いただけないかもしれませんが、ゆっくり時間をかけて読んでいただけると幸いです。また時間が経ったときに読み返してみるのもいいかもしれません。
46
+ いろいろな内容が詰まったいい教材だと思います。
47
+
48
+ 長文失礼しました。