HTTPヘッダーにデバイスの解像度、ピクセル密度などが含まれていないのはなぜですか?


10

現在、CSSメディアクエリを使用したレスポンシブウェブサイトを開発しています。サーバーがビューポートごとに異なるHTML / CSSを返すと、はるかに簡単になります。
クライアントがHTMLファイルをリクエストするときにビューポート情報を含めることができないのはなぜだろうと思っていました。この動作は、Accept-Languageヘッダーを使用して正しい言語でWebサイトを返す場合にすでに一般的です。


JavaScript経由で送信してから、CSSファイルをサイドロードできます。問題は、解像度が変わる可能性があることだと思います...
クナード

それはRWDではありません。これらのHTML / CSSは、ページを更新しない限り、レスポンシブ効果をもたらしません。
Mahdi

解像度、フォントスタイル、フォントサイズ、ブラウザタイプ、画面サイズ、これらはすべてデバイスごとに変更可能です。Web1.0タイプの質問をしている場合は、ASP、PHPなどの動的なものに移動するか、JavaScriptを追加するか、またはhtmlが提供するメディアセレクターに満足しています。
Jeff Langemeier、2014年

1
画像表示機能がまったくないソフトウェアがブラウザの代わりにHTMLを要求する場合はどうなりますか?スクリーンリーダーなど?または端末ベースのブラウザですか?
ジャック

回答:


18

つまり、Wild Wild Webが機能するように設計されていたわけではありません。

元のデザインは、HTMLがブラウザにドキュメントについてのヒントを与えるだけでした。強調するビット、画像ファイルの取得先。フォントとそのサイズに関する決定は、ブラウザとローカルの構成設定の仕事でした。

はい、私は世界が進んだことを知っています、そして今、ウェブデザイナーは私たちの目が見ることができるすべてのピクセルを制御することを期待しています。昔、それはデスクトップテーマの仕事でした。


3
今日でもそれはデバイスの仕事であるべきだと私は言うでしょう。いくつかの異なる最小限のCSSセットをセットアップし、そこからデバイスがそれを処理できるようにします。
Jeff Langemeier、2014年

@JeffLangemeier完全に同意します。この答えは本質的に正しいですが、RWDについてはまったく触れていません。
Mahdi

1
おそらく、コンテンツとデザインを完全に分離する新しいWebフォーマットを再設計する時かもしれません:)
eliocs 2014年

@Mahdi私はとにかく本質的にRWDについての質問であるように私は本当に感じていません、それは車輪を再発明しようとし、なぜHTML仕様に<恣意的な個人的ニーズ>がないのか疑問に思っている人でした。
Jeff Langemeier、2014年

@eliocsがあり、それはhtmlとCSSと呼ばれています。HTMLが構造で、CSSがデザインです。または、デザインからコンテンツを完全に分離したい場合は、PHPやpythonのdjangoなどの動的システムに移動します...
Jeff Langemeier

8

レスポンシブWebデザインのアイデアを完全に理解していないと思います。クライアントのWebブラウザーに基づいてさまざまなHTML / CSS / JSを提供することはしばらく前からあり、それを実行しているWebサイトがまだあると確信しています-非常に明確な例は、モバイルを提供する昔ながらの方法ですに優しいテーマのウェブサイト。

私の意見では、足りないのは、ユーザーがビューポートをポートレートからランドスケープに変更した場合、ページを更新しない限り、応答が得られないということです。Webブラウザウィンドウのサイズを変更したり、デフォルトのズームを変更したりする場合も、同じ操作が必要です。また、ページ内の要素が他の要素に応答する場合もあります。たとえば、右側のサイドバーを非表示にすると、メインコンテンツが変更に応答します。あなたがページをリフレッシュしない限り、これらはあなたの方法で再び可能ではありません。

また、HTTPリクエストはWebページ全体を処理するように設計されているだけではありません。多くの場合、プレーンポートのデータ、ファイル、画像などを送信/受信するリクエストを送信していますが、それらはビューポートのメタ情報を引き継ぐ必要がなく、インターネットのようなスケールでのオーバーヘッドは多くなると思います。


オーバーヘッドは、あなたがモバイルデバイス用の小さい解像度の画像を返さ想像し、あまりにも画像を提供する有用であろう。ページが読み込まれた後のビューポートの変更は、私の考慮​​事項の大きな欠陥であることに同意します。
eliocs 2014年

@eliocsそうですね、画像は実際には重要です。訂正ありがとうございます。
Mahdi

これは、レスポンシブデザインが解決しようとしている問題には直接関係ないと思います。ほとんどの場合、これの目的は、最初のレンダリングに必要な最小限のリソースが提供されるようにすることです。これに加えて、レスポンシブデザインを提供します。リクエストに情報が含まれていても、レスポンシブデザインは禁止されていません。たとえば、HTTP2を使用して、最初の応答でsrcsetの適切な画像を取得している可能性があります。ビューポートのサイズ情報がない限り、これを行うことはできませんが、srcsetを使用して応答性を維持することができます。
モノクローム

2

あなたは必ず、あなたは応答性のデザインをやっていますか?レスポンシブデザインは、技術的には流動的なデザインとメディアクエリの組み合わせです。

流体の設計により、レイアウトの方法が賢明であれば、ビューポートの問題の90%が解決されます。メディアクエリは、現在のディメンションに基づいてグリッドの特性を変更することで、残りの10%を取得します。

流体のみを実行しようとしている場合(あらゆる場所でのパーセンテージ、すべての相対的なサイズ設定、ピクセルで指定されていないものなど)、ビューポートのサイズが劇的に異なる場合(デスクトップの横向きビューと。モバイルポートレートビュー)。2048pxから640pxにすると、一部がうまく適合しません。メディアクエリのみを実行しようとすると、最終的には数十および数十のメディアクエリが中断し、その場合は基本的にCSSクラスを細かく管理します。どちらのアプローチもRWDには適切ではありません。すべてを取得するには、2つを組み合わせる必要があります。

私のアドバイス:デスクトップの横向き、iPadの縦向きと横向き、iPhoneの縦向きと横向きなど、3つまたは4つの異なる「公称解像度と向き」を作成し、それらを作業のワイヤフレームとして扱います。次に、これらの休憩のメディアクエリを設定します。次に、流動的なレイアウトを使用してそれを達成するために、これらのいくつかの中断に固執するように本当に一生懸命作業します-おそらく何らかのCSSグリッドを使用します(事前に作成されたものもあれば、独自に作成することもできます)。


1

コンテンツを取得する動的なWebサイトがある場合、次のようなコードでうまくいきます(ES6の場合)。

var headers = new Headers();
    headers.set('window-w', window.innerWidth);  // or $('html').width()  with jQuery
    headers.set('window-h', window.innerHeight); // or $('html').height() with jQuery
fetch(url, {'credentials': 'include', 'headers': headers})
.then(function(response) {
    ...

注:「資格情報」はセッションCookie用です

次に、たとえば(PHPで)サーバー側でこれらのヘッダーを読み取ることができます。

$headers = getallheaders();
if (isset($headers['window-w']) and isset($headers['window-h'])) {
    $window_w = 1 * $headers['window-w'];
    $window_h = 1 * $headers['window-h'];
    if ($window_w * $window_h > 0) {
        ...

これが今の唯一の正解です。
marvindanig

1

これは、ユーザーがページをリロードせずにブラウザーウィンドウのサイズを変更できるという単純な理由で機能しません。

レスポンシブデザインとは、ビューポートのサイズやその他の要因に応じてレイアウトが動的に変化することを意味します。したがって、リクエスト時のビューポートサイズに基づいてサーバー側でデザインが修正されている場合、ユーザーがウィンドウのサイズを変更しても反応しません。これが、クライアント側でメディアクエリが評価される理由です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.