不知道CSS3 的 background-clip 属性是否能满足你的需求。这个属性可以规定背景的绘制区域,代码如下 :
<!DOCTYPE html><html>
<head>
<title></title>
<style>
.rect {
width:120px
height:120px
border:1px solid #999
padding:5px
background-color:green
background-clip:content-box
}
</style>
</head>
<body>
<div class="rect"></div>
</body>
</html>
结果如下:
将 background-clip 属性值设置为 content-box 将背景内容裁剪到内容框,这样只要改变 padding 值就可以实现边框不动,颜色变动。
在移动设备上进行网页的重构或开发,首先得搞明白的就是移动设备上的viewport了,只有明白了viewport的概念以及弄清楚了跟viewport有关的meta标签的使用,才能更好地让我们的网页适配或响应各种不同分辨率的移动设备。
一、viewport的概念
通俗的讲,移动设备上的viewport就是设备的屏幕上能用来显示我们的网页的那一块区域,在具体一点,就是浏览器上(也可能是一个app中的webview)用来显示网页的那部分区域,但viewport又不局限于浏览器可视区域的大小,它可能比浏览器的可视区域要大,也可能比浏览器的可视区域要小。在默认情况下,一般来讲,移动设备上的viewport都是要大于浏览器可视区域的,这是因为考虑到移动设备的分辨率相对于桌面电脑来说都比较小,所以为了能在移动设备上正常显示那些传统的为桌面浏览器设计的网站,移动设备上的浏览器都会把自己默认的viewport设为980px或1024px(也可能是其它值,这个是由设备自己决定的),但带来的后果就是浏览器会出现横向滚动条,因为浏览器可视区域的宽度是比这个默认的viewport的宽度要小的。下图列出了一些设备上浏览器的默认viewport的宽度。
二、css中的1px并不等于设备的1px
在css中我们一般使用px作为单位,在桌面浏览器中css的1个像素往往都是对应着电脑屏幕的1个物理像素,这可能会造成我们的一个错觉,那就是css中的像素就是设备的物理像素。但实际情况却并非如此,css中的像素只是一个抽象的单位,在不同的设备或不同的环境中,css中的1px所代表的设备物理像素是不同的。在为桌面浏览器设计的网页中,我们无需对这个津津计较,但在移动设备上,必须弄明白这点。在早先的移动设备中,屏幕像素密度都比较低,如iphone3,它的分辨率为320x480,在iphone3上,一个css像素确实是等于一个屏幕物理像素的。后来随着技术的发展,移动设备的屏幕像素密度越来越高,从iphone4开始,苹果公司便推出了所谓的Retina屏,分辨率提高了一倍,变成640x960,但屏幕尺寸却没变化,这就意味着同样大小的屏幕上,像素却多了一倍,这时,一个css像素是等于两个物理像素的。其他品牌的移动设备也是这个道理。例如安卓设备根据屏幕像素密度可分为ldpi、mdpi、hdpi、xhdpi等不同的等级,分辨率也是五花八门,安卓设备上的一个css像素相当于多少个屏幕物理像素,也因设备的不同而不同,没有一个定论。
我遇到的情况是,有个Android大屏上面的APP,添加了个链接到一个网页,但是出现的显示屏很大 但是分辨率比较小
导致页面显示非常大
通过设置页面viewport,由于是iframe里面的,设置的是会失效。
所以想通过css3 scale可以实现页面的缩放
transform:scale(2)
我使用了SASS ,便利出多个,方便配置
@for $i from 1 through 100 {
.scale-#{$i} {
width: 100% * (10 / $i)//根据scale的是设置宽度
position: absolute
transform-origin: 0 0 0// 设置变化的中心点为左上角
transform: scale($i / 10)
}
}