《高性能响应式Web开发实战》一2.3 视口

简介:

本节书摘来异步社区《高性能响应式Web开发实战》一书中的第2章,第2.3节,作者: 李光毅 责编: 杨海玲,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.3 视口

2.3.1 桌面浏览器的视口
在桌面浏览器中,假设某个页面的宽度设置为自适应的100%: html {width: 100%;},这意味着html宽度始终与浏览器宽度保持一致。

同时,浏览器宽度也等价于浏览器可视区域宽度,所以在桌面浏览器中,浏览器可视区域大小决定了页面的布局。所见即所得,浏览器窗口多大,就会以多大的尺寸影响页面布局。我们称这里的可视区域大小为布局视口(layout viewport),或者简称为视口(viewport),如图2-14所示。


14

在本书后面的内容中,如果没有特别说明,所称视口皆为此概念。当然,如果页面布局为固定宽度布局,页面布局就不会受到视口大小影响,但是在视口之外的内容,需要通过控制浏览器视口的滚动栏才能看见。

桌面端视口的特点是,浏览器区域大小受限于显示器屏幕大小,这也意味着页面的宽度不会超过浏览器屏幕宽度。读者可能会纳闷,为什么上面这么显而易见的事情会称为“特点”?因为在移动设备上不是这样的,也无法做这么一个设定。

假设在100%宽度的body内还有一些占用宽度为10%的元素,如果以桌面视口的定义,10%宽度的元素实际宽度最大只能是系统分辨率的10%,则在1920×1080的显示器上浏览器最大化的情况下,该元素最大宽度为192 px。若在iPhone 4上浏览这个页面,如果iPhone 4仍然继承的是桌面视口的设定,那么用户看到只是一个32 px的元素,这是根本是无法识别的,这样的容器也不可用。

所以,移动设备的视口定义与桌面并不相同,但视口同样是用于控制页面布局渲染的。

2.3.2 移动设备浏览器的视口

对于移动设备上的浏览器来说,仍然需要一个区域用于控制页面的布局渲染。只不过这个区域不再以屏幕尺寸作为限制。

以iPhone 4为例,Safari渲染页面布局的默认宽度为980 px(CSS像素)。但是,用户可能觉得并非如此,因为当用户用Safari打开一个网站桌面版后,他看到的页面宽度刚好是与屏幕宽度相等的,如图2-15所示。但是iPhone 4的系统宽度分辨率不是320 px吗?


15

其实之所以这样是因为浏览器做了两件事,如图2-16所示:

(1) 用980 px像素宽度渲染页面;

(2)将页面缩放至宽度与系统宽度一致。


2_16

用户使用手势缩放页面也是同样的原理。浏览器和用户在这里并没有改变页面(准确来说是视口)的大小(size),只是改变了视口的缩放比例(scale)。

但是,浏览器使用默认的980 px去渲染页面并非是万能的。例如,当页面比较窄时(如只有320 px宽),页面效果会非常糟糕,如图2-17所示。


2_17


设计人员希望以页面的宽度来渲染页面,并能自然自适应到系统宽度。于是手机厂商(最早是在Safari中)提供了一个名为viewport的标签设置视口大小。例如,在上一个用例中,当我们想以320 CSS像素渲染页面时,可以在

标签中加入meta标签,并设置如下:
<meat name="viewport" content="width=320" />

通过在content属性中设置width参数,即可以手动调整宽度,也可以添加initial-scale参数来控制渲染时缩放视口的比例。如果未添加该参数,浏览器自动会将页面缩放至与浏览器宽度一致。

<meat name="viewport" content="width=320, initial-scale=1.0" />

以图2-18中320 px宽的图片为例,通过混合配置width和scale参数,我们能随意控制缩放比例页面的大小。


2_18


在前几节中常说的“系统分辨率”就是视口大小,有兴趣的读者可以去viewportsizes.com上查找自己感兴趣的设备的视口大小。

2.3.3 设备宽度

大部分情况下我们都希望以系统分辨率的宽度来渲染页面,以尽可能地避免缩放,以及正确地响应设备(例如,页面布局是在320 px宽度的限制下进行设计的,我们当然希望设备以320 px宽度来渲染布局,而不是用980 px渲染后再进行缩放)。问题是不同设备的系统分辨率是不一致的,即使在同一种设备上,横竖两种持握方式也会让渲染方式不同。

但是,我们可以不用关心具体的数值,只要告诉浏览器:“无论什么设备,什么样的持握方式,请按照系统分辨率宽度渲染。”

于是我们可以将width的值设置为device-width。例如:

<meta content="width=device-width, initial-scale=1.0" />

那么我们就把获取具体系统分辨率宽度这个任务交给浏览器了,就由浏览器具体情况具体执行,如图2-19所示。


2_19

相关文章
|
22天前
|
编解码 前端开发 JavaScript
构建高效响应式Web界面:现代前端框架的比较
【4月更文挑战第9天】在移动设备和多样屏幕尺寸盛行的时代,构建能够适应不同视口的响应式Web界面变得至关重要。本文深入探讨了几种流行的前端框架——Bootstrap、Foundation和Tailwind CSS,分析它们在创建响应式设计中的优势与局限。通过对比这些框架的栅格系统、组件库和定制化能力,开发者可以更好地理解如何选择合适的工具来优化前端开发流程,并最终实现高性能、跨平台兼容的用户界面。
|
2月前
|
前端开发 数据库 UED
构建高性能Web应用的关键技术
本文将介绍构建高性能Web应用的关键技术,包括前端优化、后端优化、数据库优化等方面。通过深入讨论各项技术的原理和实践方法,帮助开发者们提升Web应用的响应速度和用户体验。
|
2月前
|
前端开发 开发者 UED
构建响应式Web界面:Flexbox的力量
【2月更文挑战第25天】 在现代网页设计中,创建能够适应不同屏幕尺寸的布局是至关重要的。Flexbox,一种CSS布局模式,提供了强大的工具来轻松地设计和调整灵活的响应式界面。本文将深入探讨Flexbox的核心概念,并通过实例展示如何使用它来构建美观、灵活且易于维护的响应式Web界面。
|
6天前
|
前端开发 JavaScript Go
构建高性能Web应用:优化前端资源加载
在构建现代Web应用时,优化前端资源加载是至关重要的一步。本文将介绍一些提升Web应用性能的关键策略,包括减少HTTP请求、压缩和合并资源、使用CDN加速、以及异步加载技术等。通过实施这些优化策略,开发人员可以显著提升网站的加载速度和用户体验。
|
6天前
|
存储 中间件 Go
探索Gin框架:快速构建高性能的Golang Web应用
探索Gin框架:快速构建高性能的Golang Web应用
|
16天前
|
缓存 监控 数据库
Flask性能优化:打造高性能Web应用
【4月更文挑战第16天】本文介绍了提升Flask应用性能的七大策略:优化代码逻辑,减少数据库查询,使用WSGI服务器(如Gunicorn、uWSGI),启用缓存(如Flask-Caching),优化数据库操作,采用异步处理与并发(如Celery、Sanic),以及持续监控与调优。通过这些手段,开发者能有效优化Flask应用,适应大型或高并发场景,打造高性能的Web服务。
|
28天前
|
编解码 前端开发 开发者
构建响应式Web界面:Flexbox与Grid布局的深度对比
【4月更文挑战第4天】 在现代前端开发中,构建灵活且响应式的用户界面是至关重要的。随着移动设备浏览量的增加,能够适应不同屏幕尺寸和分辨率的布局技术变得必不可少。Flexbox和Grid是CSS提供的两种强大的布局机制,它们各自以独特的方式解决了响应式设计的挑战。本文将深入探讨Flexbox和Grid的核心概念、使用场景和性能考量,为开发者提供在面对不同布局需求时做出明智选择的依据。
|
2月前
|
编解码 前端开发 开发者
构建响应式Web界面:Flexbox的力量
【2月更文挑战第28天】 在现代网页设计中,创建能在不同设备上保持一致性和功能性的响应式界面是至关重要的。Flexbox,一个CSS布局模块,为前端开发者提供了强大工具来轻松实现灵活的布局设计。本文将深入探讨Flexbox的核心概念、使用场景以及如何通过它来优化响应式设计流程。
|
2月前
|
前端开发 开发者 UED
构建响应式Web界面:Flexbox与Grid布局的深度解析
【2月更文挑战第28天】 在现代前端开发中,打造灵活且适应不同屏幕尺寸的用户界面是至关重要的。随着移动设备的普及,响应式设计已经成为网页制作不可或缺的一部分。本文将深入探讨两种强大的CSS布局模块——Flexbox和Grid,它们如何简化布局创建过程,并赋予设计师更大的灵活性去构建动态和流畅的响应式界面。通过对这两种技术的比较、使用场景分析以及代码示例,读者将能够更好地理解何时以及如何使用这些工具来提升前端项目的质量和效率。
19 0
|
2月前
|
编解码 前端开发 开发者
构建响应式Web界面:Flexbox布局的全面指南
【2月更文挑战第28天】 在当今多变的设备屏幕尺寸和分辨率中,创建一个能够适应不同视口的响应式Web界面至关重要。本文深入探讨了CSS Flexbox布局模块,它是一种设计灵活且强大的方式来创建复杂的响应式布局。我们将透过概念解析、关键属性讲解以及实际案例分析,帮助前端开发者掌握Flexbox的核心原理和应用技巧,以实现流畅的页面布局调整和优化用户体验。