网站首页 > 技术文章 正文
随着上网方式的多样化,用户选择上网的工具不再仅是PC,而可以是手机,或者平板电脑。随之而来的问题是如何让网页适应不同分辨率,这给前端工程师们带来了新的挑战,其中重要的一点是如何让图片能在不同的分辨率下都能给用户带来良好的用户体验?
CSS3中的media query属性让我们可以根据浏览器的高宽,设备的像素比等来使用不同的CSS。
device-pixel-ratio是media query一查询条件,用于获得设备的像素比。一般来说iPhone4/4s的值是2,高分辨率的Andriod设备是1.5,一般设备是1,有了这些条件,我们就可以为不同的设备提供不同分辨率的图片了。
事先假定让图片兼容以上像素比,展示一张宽高为100px的图片。首先我们需要准备三张不同分辨率的图片:当正常像素比为1时,我们载入的是正常图片100px*100px,当像素比为1.5时,载入150px*150px的图片,当像素比为2.0,载入200px*200px的图片。
利用media query我们可以这样写:
由于像素比的改变,背景图像的尺寸按像素比的倍数放大,所以需要缩小图片,可利用background-size这个属性来缩放图片。像素比为1.5,则background-size:1/1.5≈66.7%;像素比为2,则background-size:1/2≈50%。
优点:
1.使用CSS3的media query就可以做到设备像素比的判断,方法简单,成本低。
2.图片便于修改,只需修改css文件。
缺点:
使用会产生这样的问题,并不是每个设备都像iPhone4一样像素比是2。看看我们刚做的,光以上三种像素比,我们就得提供3张不同的图片,如果有更多种像素比呢,那可就是体力活了。
解决方法:或许我们可以创建一张更大的(2的n倍分辨率)的图片,然后按比例去缩小图片来适配不同像素比的设备。可这又意味着用户得加载更大的图片,耗费更多时间和流量。
兼容性
media query兼容性列表:
类型 | IE | Firefox | Chrome | Opera | Safari |
版本 | (×)IE6 | (×)Firefox 2.0 | (√)Chrome 1.0.x | (√)Opera 9.63 | (√)Safari 3.1 |
(×)IE7 | (×)Firefox 3.0 | (√)Chrome 2.0.x | (√)Safari 4 | ||
(×)IE8 | (√)Firefox 3.5 |
从表中我们可以看出media query并不支持IE9以下浏览器。
考虑到多终端设备如iPhone,或是Android系统自带的浏览器,都是高级浏览器,对media query都做做到良好支持,所以我们可以把IE浏览器排除在外。
也可以添加添加下面的JS,让IE9之前的版本支持:
<!--[if lt IE 9]>
<script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
<![endif]-->
总结
设备的标准分辨率一直在改变,但是我们追求用户良好用户体验的理念却是一直不变。上面的方法不一定是最好的,或许会有更多更好的来替代它。比如利用@font-face,外链入图案矢量字体,或使用svg格式的图片等等。每个方法都有它的优缺点,只有在实践中不断地磨合,才能找到其中的平衡点。
猜你喜欢
- 2024-11-11 可以让你受益匪浅的10个css使用技巧,值得收藏
- 2024-11-11 防御式CSS是什么?这几点属性重点防御
- 2024-11-11 不用@media,响应式设计实现也可以怎么“秀”
- 2024-11-11 零基础学网页—CSS的调用方式有哪些?
- 2024-11-11 web技术分享|css filter和getUserMedia的联合使用
- 2024-11-11 WEB前端工具推荐丨分享6个热门颜色选择器组件
- 2024-11-11 新的Google Chrome元标签将允许网站推荐设备节电策略
- 2024-11-11 如何构建一个响应式网站 创建一个响应式网页
- 2024-11-11 郑州Web前端入门之如何用CSS做响应式布局
- 2024-11-11 亲历 | 走上舞台 走上舞台实践活动宣传标语
- 标签列表
-
- content-disposition (47)
- nth-child (56)
- math.pow (44)
- 原型和原型链 (63)
- canvas mdn (36)
- css @media (49)
- promise mdn (39)
- readasdataurl (52)
- if-modified-since (49)
- css ::after (50)
- border-image-slice (40)
- flex mdn (37)
- .join (41)
- function.apply (60)
- input type number (64)
- weakmap (62)
- js arguments (45)
- js delete方法 (61)
- blob type (44)
- math.max.apply (51)
- js (44)
- firefox 3 (47)
- cssbox-sizing (52)
- js删除 (49)
- js for continue (56)
- 最新留言
-