《高性能响应式Web开发实战》一2.2 CSS像素

简介:

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

2.2 CSS像素

上一节讲的像素密度和Web开发有什么关系?在我们编写样式代码时,常会用到另一个像素单位px。为了和设备像素区分开,我们把它称为CSS像素。如果说设备像素给我们的印象是机械的、固定的、物理的,那么CSS像素将会是灵活的、虚拟的、相对的。

为什么说它是相对的?

假设我在页面上画一个300 px宽度的块级元素。一般情况下,块级元素只相当于页面的部分宽度。如果使用浏览器的页面放大功能,10倍地放大页面,很快块级元素就会充满整个页面。但吊诡的是,此时我们既没有改变浏览器的宽度,也没有改变容器的样式宽度,那么浏览器为我们做了什么呢?它把每一个CSS像素的面积放大了,如图2-12所示。


12

CSS像素默认与系统分辨率下像素大小相等。那么,在标清设备中,一个CSS像素应该是与一个设备像素大小相等。但是,在高清设备或者用户缩放的过程中,一个CSS像素也可以大于或等于多个设备像素,如图2-13所示。


13


有关高清设备被诟病的问题,还有一个问题未被提及:假设在原生应用(注意,不是Web)的开发中,如果必须以设备像素为单位进行开发,那会是非常痛苦的一件事。以iPhone 3GS为参照,在3GS中,一个系统分辨率像素等于1个设备像素;在iPhone 4中,一个系统分辨率像素等于2个设备像素;在Galaxy S4中,一个系统分辨率像素等于3个设备像素;在iPhone 6 Plus中,一个系统分辨率像素等于2.46个设备像素。那么,如果一个按钮在iPhone 3GS中大小为100×100设备像素,在iPhone 4中大小就应该是200×200设备像素,在Galaxy S4中就应该是300×300设备像素,在iPhone 6 Plus中就应该是246×246设备像素。但是,我们实在无法为每一台设备根据它的设备像素准备如此多的素材。

我们希望有这么一种抽象的单位,只需告知手机它这个按钮或者素材占用几个这样的“抽象单位”,在显示时它就能自动缩放至合适的具体设备像素值。例如,iOS系统中的PT就是这样一个单位,当我们告诉它按钮占用的宽度是100×100 PT时,在iPhone 3GS中,它就意味着占用100×100的设备像素;在iPhone 4中,它就占用200×200设备像素。也就是说,系统会根据给出的PT值,再根据系统分辨率像素与设备像素的比值,换算出目标应该占用的大小。

上面所说的这种抽象单位称为与设备无关像素(device independent pixel)。

同理,CSS像素也是与设备无关像素。我们不用关心在不同设备上一个CSS像素会匹配多少个设备像素,浏览器会根据DPR为我们适配,在CSS基础上根据DPR做适当放大或者拉伸。但问题是,因为字体是矢量的关系,被放大后仍然足够清晰。而身为标量的图片则会变得模糊,因为拉伸状态下一个CSS像素需要横跨多个设备设备像素,每张图片上的单个像素信息仍然要被多个设备像素瓜分显示,自然就变得模糊起来。图2-12中对比的是同样CSS尺寸在高清和标清下的效果,很明显左侧的高清设备会显得更模糊。

为了解决高清设备中图片素材会变模糊的问题,需要为高清设备提供更大尺寸、细节更丰富的图片。此外,高清图片可以向下兼容,我们可以用CSS像素控制高清图片在标清设备上的大小,这样一张图片就走遍天下了,解决了响应式图片中的适配问题。可新的问题又出现了。

(1) 如何区分出高清设备和标清设备呢?如何为不同的设备提供不同的样式呢?

(2)如果用户在网络信息较差的手机上访问网站我们仍然提供高清图片,这是否有失偏颇?能否做到为不同的设备,甚至为不同的网络环境,提供不同的图片素材?

这两个问题留到第5章解决。

相关文章
|
7月前
|
前端开发 算法 API
构建高性能图像处理Web应用:Next.js与TailwindCSS实践
本文分享了构建在线图像黑白转换工具的技术实践,涵盖技术栈选择、架构设计与性能优化。项目采用Next.js提供优秀的SSR性能和SEO支持,TailwindCSS加速UI开发,WebAssembly实现高性能图像处理算法。通过渐进式处理、WebWorker隔离及内存管理等策略,解决大图像处理性能瓶颈,并确保跨浏览器兼容性和移动设备优化。实际应用案例展示了其即时处理、高质量输出和客户端隐私保护等特点。未来计划引入WebGPU加速、AI增强等功能,进一步提升用户体验。此技术栈为Web图像处理应用提供了高效可行的解决方案。
|
移动开发 开发者 HTML5
构建响应式Web界面:Flexbox与Grid的实战应用
【10月更文挑战第22天】随着互联网的普及,用户对Web界面的要求越来越高,不仅需要美观,还要具备良好的响应性和兼容性。为了满足这些需求,Web开发者需要掌握一些高级的布局技术。Flexbox和Grid是现代Web布局的两大法宝,它们分别由CSS3和HTML5引入,能够帮助开发者构建出更加灵活和易于维护的响应式Web界面。本文将深入探讨Flexbox和Grid的实战应用,并通过具体实例来展示它们在构建响应式Web界面中的强大能力。
221 3
|
10月前
|
前端开发
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
304 1
【2025优雅草开源计划进行中01】-针对web前端开发初学者使用-优雅草科技官网-纯静态页面html+css+JavaScript可直接下载使用-开源-首页为优雅草吴银满工程师原创-优雅草卓伊凡发布
|
JavaScript
jquery和CSS3响应式轮播图插件jcSlider
jcSlider是一款jquery和CSS3响应式轮播图插件。jcSlider使用CSS3过渡动画,它可以和animate.css完美结合,生成60多种轮播图过渡动画效果。
|
前端开发 JavaScript 搜索推荐
HTML与CSS在Web组件化中的核心作用及前端技术趋势
本文探讨了HTML与CSS在Web组件化中的核心作用及前端技术趋势。从结构定义、语义化到样式封装与布局控制,两者不仅提升了代码复用率和可维护性,还通过响应式设计、动态样式等技术增强了用户体验。面对兼容性、代码复杂度等挑战,文章提出了相应的解决策略,强调了持续创新的重要性,旨在构建高效、灵活的Web应用。
290 6
|
前端开发 JavaScript UED
在数字化时代,Web 应用性能优化尤为重要。本文探讨了CSS与HTML在提升Web性能中的关键作用及未来趋势
在数字化时代,Web 应用性能优化尤为重要。本文探讨了CSS与HTML在提升Web性能中的关键作用及未来趋势,包括样式表优化、DOM操作减少、图像优化等技术,并分析了电商网站的具体案例,强调了技术演进对Web性能的深远影响。
199 5
|
缓存 前端开发 JavaScript
构建高性能与用户体验并重的现代Web应用
构建高性能与用户体验并重的现代Web应用
163 5
|
前端开发 开发者 容器
构建响应式Web界面:Flexbox与Grid布局的深度解析
【10月更文挑战第11天】本文深入解析了CSS3中的Flexbox和Grid布局,探讨了它们的特点、应用场景及使用方法。Flexbox适用于一维布局,如导航栏;Grid布局则适用于二维布局,如复杂网格。通过示例代码和核心属性介绍,帮助开发者灵活构建响应式Web界面。
365 5
|
JavaScript 前端开发 网络架构
如何使用Vue.js构建响应式Web应用
【10月更文挑战第9天】如何使用Vue.js构建响应式Web应用
|
JavaScript 前端开发
如何使用Vue.js构建响应式Web应用程序
【10月更文挑战第9天】如何使用Vue.js构建响应式Web应用程序