クライアントのブラウザズームをどのように処理しますか?


22

ページ、ギャラリーにたくさんの画像があります。画像を鮮明に保ちたいので、ブラウザのスケーリングを行わず、画像の元の寸法を使用します。

ただし、これはブラウザーのズームレベルが100%の場合にのみ機能します。ズームレベルを増減すると、画像の品質が低下します。

一部のクライアントは、デフォルトで異なるズームレベルを実際に持っています。どうやってそれを処理することができますか、私たちはそれをまったく処理しますか?

乾杯


1
すばらしい質問です。これは私をよく悩ませます。この記事は背景を読むの役立ちますが、幅と高さを固定したx2サイズの画像を入れてブラウザに並べ替える以外に、これに対する完璧な答えはまだ見ていません(明らかに欠点がありますが、これとピクセル密度の問題を修正します)。
user56reinstatemonica8 14

どんな答えを期待するのかわかりません。明らかに、自動サイズ変更を使用する必要はありません。他の要素が元の画像サイズの周りに配置されるように、ブラウザが画像のサイズ変更を停止する方法を尋ねていますか?可能なズームレベルごとに準備された画像を自動的に配信する方法 それとも、何を念頭に置いていますか?それに、なぜあなたはこれをしたいのですか?ユーザーが元のズームでページを適切に見ることが困難な場合、ズーム後にシャープと自動サイズ変更の違いに気付かないでしょう。
ルミP. 14

6
あなたはそれを処理しません。これはユーザー設定です。干渉する必要はありません。
DA01 14

1
彼はユーザーの好みに干渉する方法を尋ねていません。彼は、多くのユーザーデフォルトでズームされているという事実を処理する方法を尋ねているため、画像が元のサイズにある場合、粒子の粗い画像が表示されます。
user56reinstatemonica8 14

@ user568458うん。それが動作する方法です。処理するものは本当にありません。
DA01 14

回答:


21

私は他の回答のほとんどはポイントを逃したと思う:これはユーザーの好みをオーバーライドに関するものではありません、それは「別名各CSSピクセルのための複数の物理ピクセル割り当てるユーザーのデバイスの一般的なシナリオでは最高品質の画像を与えることについてですリファレンスピクセルを画像内で、ブラウザが画像を拡大し、ピクセル化して粒子が粗くなります。

以下に私の提案する解決策がありますが、最初にこれを実現できる4つの方法があります。

  • 最もまれ: ユーザーがズームインすることを選択します。それは彼らの選択なので、それほど大きな問題ではありません。
  • 驚くほど一般的: ユーザーのブラウザはデフォルトでズームインされています。たとえば、多くの高ピクセル密度のWindowsマシンはデフォルトで125%以上にズームされていますが、最近(混乱して!)、なぜすべてが突然粒子が粗く見えるのか疑問に思って頭を掻き回します。
  • 非常に一般的な:ほとんどのAndroidデバイス持つ(およびその他のデバイス?)ピクセル比ごとに「CSS画素は」実際に複数の物理ピクセルを使用して表示されることを1よりも大きいのがこの手段-に200pxの画像セットによって200pxのようにwidth: 200px; height: 200px;なり、実際のスケール200 x 200ピクセルを超える200 x 200ピクセルの画像で、粒子が粗くなる可能性があります。
  • 非常に一般的:最近の多くのAppleデバイスには「網膜ディスプレイ」があります。これは、ピクセル比2のAndroidデバイスと基本的に同じですが、マーケティングが改善され、名前で検出できるカスタムプロパティがいくつかあります。

これらのいずれも、驚くほど粗い画像のギャラリーのジョンの問題になります。


私は誰かがこの問題に対する素晴らしい解決策を持っていることを望んでいましたが、今のところは、最も効果的ではあるが普遍的に可能なものから始めて、私の好みのオプションがあります:

  1. 可能であれば、vector-SVG(またはIE8をサポートする必要がある場合はRaphael.js)に移動してください。現実的には、これはアイコン、図などのオプションに過ぎず、写真のオプションではありません。非常に複雑なSVGは、処理が必要なため、ローエンドのモバイルでは扱いにくい場合があります。
  2. 可能であれば、デバイスのピクセル比を検出し、それに基づいて画像を提供します。これは、Windows上のFirefoxがズームインおよびズームアウトするとピクセル比の読み取り値を変更するため、Windows上のFirefoxの問題も解決できます。欠点は、サーバー側とクライアント側での開発作業を伴う厄介なコーディングの問題になることです。
  3. 1.と2.が不可能な場合でも、それは本当に重要であり、画像の品質は、たとえば読み込み時間よりも重要です。画像を2倍にするだけです。

    • これは、Googleがホームページでロゴを使用して行うことです。つまり、269ピクセルx 95ピクセルのコンテナーにある538ピクセルx 190ピクセルのPNG画像をつぶします。また、レスポンシブ画像の機能とほぼ同じです。

    • IEの古いバージョンは画像の縮小にひどいため、これは悪い習慣と見なされていましたが、現在では非常にまれにしか使用されておらず、高ピクセル密度の画面よりもはるかに一般的ではありません。画像サイズが大きくなり、ロード時間が長くなるため、これはいささか望ましくありません。これは、ケースバイケースで判断する必要があるトレードオフです。

    • 2倍を超える比率のデバイスはほとんどなく、200%を超えてズームインするユーザーはほとんどいないため、サイズが2倍になり、画像の50%のスケーリングは他の量よりもきれいです。
  4. 1、2が不可能で、ロード時間が3の優先度よりも高い場合、他のオプションを認識していません。インターネット上の半分のサイトに同じ問題があるため、それを心配しないことをお勧めします。 、あなたのサイトでこの問題を抱えている人々は、他のサイトでもこの問題を抱えています。地獄、Windows上のFirefoxは、独自のUIボタンをピクセル化します ...

私は、ユーザーがズームインすることは「最もまれ」だと主張しています。だからこそ、この機能がそもそもそこにあるのです...ズームインする。また、ズーム時に高解像度の画像を使用するという興味深いアイデアもありますが、それにはユーザビリティの課題があることに注意してください。たとえば、ブラウザでズームオプションを押すたびにブラウザが新しい画像を取得するのは望ましくありません。
DA01 14

2
jpgを使用している場合、画像のサイズを2倍にし(3で説明)、かなりの画像圧縮(品質40程度)で保存すると、ファイルサイズが小さくなります。縮小すると、圧縮アーチファクトは表示されなくなります。特に画像にグラデーションが含まれる場合、結果は異なります。
ドミニク14

1
この記事を書いている時点では非常に新しく、サポートが不十分ですが、新しい<picture>要素についてはここで言及する必要があります。
user50849 14

1
注意:フォトショップでWeb用に保存し、jpg品質を61%に設定し、目的のサイズを2倍にすると、ファイルサイズは目的のサイズとほぼ同じ100%になります。だから私はすべてのjpegを61%に圧縮し始め、定義された高さ/幅でそれらを提供し始めました(これは画像が読み込まれる前でもブラウザにレイアウトをもっと知らせる利点があります!)
Kjeld Schmidt

4

DA01はコメントし、あなたはそれについて何をするべきではありません。

ズームはユーザー指定のオプションであるため、制御されます。彼らが台無しにすることに決めた設定はあなたの責任ではないはずです。

さまざまなブラウザーとバージョンを考慮に入れることができますが、合理的に言えば、ユーザーのズームを考慮すべきではありません。

確かに125%または150%を占めるかもしれません(そうする必要さえないかもしれません)。しかし、200%、300%、それ以上?意味がありません。

ユーザーが高コントラストウィンドウテーマを使用している場合はどうなりますか?拡大鏡を常に使用している場合はどうなりますか?誰も気にしない?

理想的には、あなたのウェブサイトは、小さなズームの違いの間で実際の違いを生じさせないほど十分に柔軟です。

もちろんこれは私の意見ですが、私が勤務する会社はまた、ズーム設定をサポートしていないことをお客様に明示しています。


などなど超広帯域または狭い色域デバイスとwhataboutユーザーが....はい私は同意する
joojaa

1

他の人々はあなたが直面する問題についていくつかの素晴らしいヒントを与えてくれました。私はこの分野では良いチュートリアルをするのに十分ではありませんが...

ユーザーの解像度/デバイスに応じて調整するレスポンシブサイトを設計し、必要に応じて画像を拡大または縮小するのではなく、要求に応じて画像を高解像度または低解像度ファイルに切り替えるコードを探している場合があります。

最後にこれを実行しようとしたとき、media-query.jsとpicturefill.jsを使用しました。http://responsivedesign.is/resources/images/picture-fillを参照してください。一部の画像が2列にまたがる3列のレイアウトがありました...ブラウザウィンドウを十分に小さくすると、大きな画像は1列のみの小さな解像度バージョンに切り替わります。ユーザーのブラウザは、必要なバージョンのファイルをロードするだけです。(そして、私の場合、石工プラグインはすべてを収容するために移動します)。

もちろん、ユーザーはjavascriptを有効にする必要があります...


私は応答Webデザインのためのすべて、ユーザーがズームよりもハンドルは別の問題(別のブラウザサイズを処理するためにリフロー)(ブラウザのサイズのすべての独立したの比例サイズ変更である)ことだものの
DA01

0

ユーザーに手を強制することはできません。ユーザー設定は、あなたのものではありません。設定とそれらの回避は、ユーザーが何かをした理由があるかもしれないという悪い考えです。いずれの場合も、さまざまなデバイスにわたって何も保証することはできません。

実際、技術的な側面に入ると、さらに興味深いものになります。あなたは本当にあなたのウェブページで王国への鍵を与えます。ユーザーがWebページをダウンロードすると、ユーザーは好きなようにWebページを作成できるようになります。このレイヤーを制御することはできません。ユーザーマシン上で実行されるため、ユーザーは何でもできます。stackexhangeでさえ、あなたのものと同じように私のコンピューター/モバイルで見えません。GUIのいくつかの側面を自動的に変更して、2つのレンダリングバグを修正し、2つのショートカットを追加しました。


3
ユーザーがズームインするのを防ごうとしているのではないと思いますが、たとえば、Windowsが奇妙であるためにユーザーのブラウザーがデフォルトの125%にズームしている場合、画像は鮮明に表示され、ピクセル化されていないようにしてください。
user56reinstatemonica8 14

1
関係ない、同じこと
joojaa

2
これらは実際には同じものではありません。たとえば、Googleのロゴは269px x 95pxのコンテナに収められた538px x 190pxのPNG画像です。つまり、ズームインした場合、または高ピクセル密度の画面を使用している場合、ブラウザーはその追加のピクセルデータを使用できるため、画像がピクセル化される可能性は低くなります。これにより、Googleはユーザーのズーム設定で遊んでいません
user56reinstatemonica8

あなたが最後に何をするかはあなた次第です。しかし、誰かが259%のズームを使用している場合..
joojaa

1
今日のあなたの考えは、物事は将来、非常に近い将来に変わります。したがって、視力に問題がある人は誰でも今日明日200%を持っているかもしれませんが、200%を補うことは問題を悪化させるだけです。どちらの場合でも、問題は遅かれ早かれ手に負えなくなります。一時的な勝利以上のことはできません。システムを変更する必要があります。
joojaa 14

0

ぼやけた写真(別名、写真家の悪夢)につながるHiDPI画面上のアップスケール画像の迷惑な振る舞いも、かなり長い間悩みました。また、画像に対してそれを無効にする単純なCSS属性はないのだろうかと思いました。

CSSを使用した現在のソリューションは次のようになります。

@media only screen and (min--moz-device-pixel-ratio: 1.25),
    (-o-min-device-pixel-ratio: 5/4),
    (-webkit-min-device-pixel-ratio: 1.25),
    (min-device-pixel-ratio: 1.25) {
        img {
            --pic-width: 460px;
            width: calc(var(--pic-width) / 1.25 - var(--pic-width) + var(--pic-width));
        }
}
@media only screen and (min--moz-device-pixel-ratio: 1.5),
    (-o-min-device-pixel-ratio: 3/2),
    (-webkit-min-device-pixel-ratio: 1.5),
    (min-device-pixel-ratio: 1.5) {
        img {
            --pic-width: 460px;
            width: calc(var(--pic-width) / 1.5 - var(--pic-width) + var(--pic-width));
        }
}
@media only screen and (min--moz-device-pixel-ratio: 1.75),
    (-o-min-device-pixel-ratio: 7/4),
    (-webkit-min-device-pixel-ratio: 1.75),
    (min-device-pixel-ratio: 1.75) {
        img {
            --pic-width: 460px;
            width: calc(var(--pic-width) / 1.75 - var(--pic-width) + var(--pic-width));
        }
}
@media only screen and (min--moz-device-pixel-ratio: 2.00),
    (-o-min-device-pixel-ratio: 2),
    (-webkit-min-device-pixel-ratio: 2.00),
    (min-device-pixel-ratio: 2.00) {
        img {
            --pic-width: 460px;
            width: calc(var(--pic-width) / 2.00 - var(--pic-width) + var(--pic-width));
        }
}

次のステップでは、クラスを使用して、必要に応じて異なる画像サイズを定義および設定します。画像サイズを動的に取得する方法がわかりません。CSS関数attr()は、このためには機能しないようです。


-1

ですから、これはプログラミングの問題になります。ただし、JQuery、または単にプレーンcssを使用しても、ユーザーの画面幅、画面の高さなどに基づいて異なる画像を表示できます。

繰り返しますが、これはおそらくスタック交換ではありません。


問題は画面のサイズではありません。ブラウザのズーム設定についてです。
DA01 14

-1

これをサイトのヘッドでHTMLを介して簡単に行うことができます

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

これは、すべてのタイプのサイトで開発者に推奨されるわけではありませんが、あなたが求めていることを達成するはずです。


これがデスクトップブラウザに影響を与えるとは思わない。
DA01 14

1
最近、同じ問題に対処するためにこれを試しましたが、機能しません。また、それが機能したとしても、問題を間違った方法で解決します-ズーム時に画像を鮮明にするのではなく、ズームを防止します。
user56reinstatemonica8 14

-1

それが役立つことを願っています:cssルール変換:bodyタグまたは他のスケール-完璧ではないここを参照してください:

/programming/23099849/stop-firefox-dpi-scaling-when-windows-setting-is-at-125/42755741#42755741


グラフィックデザインへようこそ!これは理論的には質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供することが望ましいでしょう
ルチアーノ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.