我目前正在使用CSS媒体查询开发一个响应式网站。如果服务器为每个视口返回不同的HTML / CSS,将会更加容易。
我想知道为什么客户端在请求HTML文件时不能包含其视口信息。使用Accept-Language
标头以正确的语言返回网站时,这种行为已经很普遍。
我目前正在使用CSS媒体查询开发一个响应式网站。如果服务器为每个视口返回不同的HTML / CSS,将会更加容易。
我想知道为什么客户端在请求HTML文件时不能包含其视口信息。使用Accept-Language
标头以正确的语言返回网站时,这种行为已经很普遍。
Answers:
简而言之,Wild Wild Web并不是这样设计的。
最初的设计只是HTML向浏览器提供有关文档的提示。要强调的位,在哪里获取图像文件。有关字体(以及大小)的决定是浏览器和本地配置设置的工作。
是的,我知道世界已经发生了变化,现在网页设计师希望控制我们眼睛看到的每个像素。在过去,这是桌面主题的工作。
我认为您还没有完全理解响应式Web设计的想法。基于客户端的网络浏览器提供不同的HTML / CSS / JS服务已经有一段时间了,我敢肯定,仍有一些网站仍在这样做-一个很明显的例子是老式的移动服务提供方式网站的友好主题。
我认为您所缺少的是,在这种情况下,如果用户将视口从纵向更改为横向,那么除非刷新页面,否则您将不会得到任何响应。如果您调整Web浏览器窗口的大小或更改默认缩放比例,则需要执行相同的操作。页面中的元素也可以响应其他元素。因此,例如,如果隐藏右侧的侧栏,则主要内容将响应更改。同样,除非您刷新页面,否则将无法以您的方式进行操作。
同样,HTTP请求不仅用于服务器整个网页。在许多情况下,您发送的请求是发送/接收纯数据,文件,图像等,它们不需要进行视口元信息,而我想,像Internet这样的规模的开销会很多。
您确定要进行响应式设计吗?从技术上讲,响应式设计是流体设计和媒体查询的结合。
如果您对布局方式很聪明,流体设计可以为您解决90%的视口问题。媒体查询可根据当前尺寸更改网格特征,从而使您获得另外10%的收益。
如果您尝试做的只是流畅的操作(到处都是百分比,所有内容的相对大小,没有以像素为单位指定的内容,等等),那么您就会遇到视口尺寸明显不同(例如桌面风景视图与移动肖像)。当您从2048px变为640px时,有些东西根本不合适。当您尝试仅执行媒体查询时,最终会导致数十次媒体查询中断,并且在这种情况下,您基本上是在对CSS类进行微管理。这两种方法都不适合RWD-您必须将两者结合才能得到一切。
我的建议是:创建三个或四个不同的“标称分辨率和方向”(例如,桌面横向,iPad纵向和横向,iPhone纵向和横向),并将其作为可以使用的线框。然后为这些休息时间设置媒体查询。然后,要努力工作,坚持不懈地休息,使用流畅的布局来完成它-最有可能使用某种CSS网格(有数十种为您预建,或者您可以自己滚动)。
如果您有一个动态网站来获取内容,则可以使用以下代码(在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) {
...