問題を解決するにはいくつかの方法があります。TL;DR; を付けます。ここに答えてください、そして私の2セントは下にあります。
方法 1:
HTML
<div class="wrapper">
<div class="img_wrapper">
<a href=""><img src="image.jpg" class="visible_img"/></a>
</div>
<img src="image.jpg" class="invisible_img"/>
</div>
(どちらの画像も同じ img src を使用しています)
CSS
.wrapper{
position: relative;
float: left;
overflow: hidden;
}
.img_wrapper{
bottom: 0;
left: 0;
position: absolute;
right: 0;
top: 0;
}
img.invisible_img{
visibility: hidden;
}
img.visible_img{
width: 50%;
height: 50%;
}
方法 2 CSS の scale() を使用: 元の img にクラスを与えるだけです。
HTML
<img src="image.jpg" class="resized_img"/>
CSS
.resized_img{
-webkit-transform: scale(0.75);
-moz-transform: scale(0.75);
-ms-transform: scale(0.75);
-o-transform: scale(0.75);
transform: scale(0.75);
-webkit-transform-origin: 0 0;
-moz-transform-origin: 0 0;
-ms-transform-origin: 0 0;
-o-transform-origin: 0 0;
transform-origin: 0 0;
}
私が提供するどちらの方法でも、コンテナー (li) は画像の幅と高さ全体を占めます。
あなたの問題に関するいくつかの考え:
幅と高さのパーセンテージは、イメージのコンテナーの幅と高さを使用して計算されます。リンクの例では、画像のコンテナー (li) の幅は 600px で、高さの値は指定されていません。PC ブラウザーでは、width="75%" height="75%"は、幅 = 600px の 75% (つまり 450px)、高さ = 未定義の値の 75% (ブラウザーが高さとして認識した値: auto; )。画像は 1440x900 であるため、450px は画像の元の幅の 75% ではないことに注意してください。
特定のモバイル ブラウザー (iPad) では、PC ブラウザーほど柔軟ではなく、高さ = 75% を、コンテナーが到達できる最大の高さの 75% (非常に高い高さ) として認識しました。それがあなたのイメージが歪んでいる理由です。
通常、元のサイズの一部としてではなく、画面サイズ (したがってコンテナーのサイズ) に従って画像を表示することをお勧めします。各ユーザーの画面は異なるため、ユーザーによっては画像が小さすぎたり大きすぎたりする場合があります。
もう 1 つの問題は、画像のサイズです。画像はクライアント側でサイズ変更されます。つまり、サーバーはまだ完全な画像をユーザーに送信しています。ユーザーが画像をクリックしてフルサイズで表示しない場合、サムネイルを提供するために必要な帯域幅の約 2 倍を浪費していることになります。20 個の画像の画像ギャラリーを作成し、ユーザーが 1 つしか表示しない場合、無駄な帯域幅は 19 倍になります。通常、画像のサムネイルと完全な画像は、必要な場合にのみサーバーによって提供される、サイズの異なる 2 つの異なるファイルである必要があります。(そして、このアプローチを使用すると、クリーンで効果的な方法でも問題を解決できるようになります)。