因为自己也经常做移动端的开发工作,现总结一份页面适配的笔记。
点(Points),绝对长度单位。
印刷业上常使用的单位,磅的意思,一般用于页面打印排版。
不知道经常做设计的同学知不知道zeplin这个网站,它用的像素单位都是pt。
1in = 2.54cm = 25.4 mm = 101.6q = 72pt = 6pc = 96px
用法:
div { font-size:10pt; }
相对长度单位。像素(Pixels)。像素px是相对于显示器屏幕分辨率而言的。
div { font-size:10px; }
兼容性和pt一样
px不会因为其它元素的尺寸变化而变化。
像素的大小是会“变”的,也称为“相对长度”,越高位的像素,其拥有的色板也就越丰富,越能表达颜色的真实感。
px特点:比较稳定和精确,但在浏览器放大缩小会出现页面混乱。
一般情况下,我们平时都是用px来定义字体,所以无法用浏览器字体放大的功能,IE无法调整那些使用px作为单位的字体大小。大部分网站能调整是因为用了相对长度单位em或rem。如果改变了浏览器的缩放,web页面样式就会乱掉,这样对于用户来说,就是个大问题了。这时,就提出了相对长度单位。
Firefox能够调整px和em,rem,但是96%以上的中国网民使用IE浏览器(或内核)。
假设就使用浏览器默认的字号16px,来看一些px单位与rem之间的转换关系:
如果你要设置一个不同的值,那么需要在根元素中定义,为了方便计算,时常将在元素中设置font-size值为62.5%:
html {
font-size: 62.5%;
}
相当于在中设置font-size为10px,此时,上面示例中所示的值将会改变:
相对长度单位。相对于当前对象内文本的字体尺寸。
如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。
相对长度单位。像素(Pixels)。
div { font-size:10em; }
兼容性和pt一样。
em特点:
(1)em的值并不是固定的
(2)em会继承父级元素的字体大小
em表示相对于父元素的字体大小,em是相对单位,没有一个固定的度量值,而是由其它元素尺寸来决定的相对值。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。
任意浏览器的默认字体都是16px,所有未经调整的浏览器都符合:1em =16px。那么12px = 0.75em;10px = 0.625em;为了简化font-size的换算,需要在css中的body选择器中声明font-size=62.5%,这就使em值变为:16px*62.5% =10px;这样12px=1.2em;10px=1em,也就是说只需要将你原来数值px除以10就可以了。
使用em的注意点:
1. body选择器中声明Font-size=62.5%;
2. 将你的原来的px数值除以10,然后换上em作为单位;
3. 重新计算那些被放大的字体的em数值。避免字体大小的重复声明。
相对长度单位。相对于根元素(即html元素)font-size计算值的倍数。是CSS3新增的一个相对单位(root em,根em)
div { font-size:10rem; }
rem可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。
pt=1/72(英寸) px=1/dpi(英寸) pt=px*dpi/72
以windows下的96dpi来计算,1pt=px*96/72=px*4/3
字号 | Pixels | Ems | Percent | Points |
---|---|---|---|---|
八号 | 6px | 0.375em | 37.5% | 5pt |
七号 | 7px | 0.4375em | 43.75% | 5.5pt |
小六 | 8px | 0.5em | 50% | 6.5pt |
9px | 0.55em | 55% | 7pt | |
六号 | 10px | 0.625em | 62.5% | 7.5pt |
11px | 0.7em | 70% | 8pt | |
小五 | 12px | 0.75em | 75% | 9pt |
13px | 0.8em | 80% | 10pt | |
五号 | 14px | 0.875em | 87.5% | 10.5pt |
15px | 0.95em | 95% | 11pt | |
小四 | 16px | 1em | 10% | 12pt |
17px | 1.05em | 105% | 13pt | |
18px | 1.125em | 112.5% | 13.5pt | |
四号 | 19px | 1.2em | 120% | 14pt |
20px | 1.25em | 125% | 14.5pt | |
小三 | 21px | 1.3em | 130% | 15pt |
三号 | 22px | 1.4em | 140% | 16pt |
23px | 1.45em | 145% | 17pt | |
小二 | 24px | 1.5em | 150% | 18pt |
现在的使用方法很多,我直接介绍我偏向的这一种了
@function rem($values){
$root :16px;
$unit: rem;
$list: ();
@each $v in $values {
$res:0;
@if ($v == 0 or $v == auto or unit($v) == rem or unit($v) == em or unit($v) == vw or unit($v) == vh){
$res: $v;
}@else{
$res: ($v + 0px) / $root + $unit;
}
$list : append($list , $res);
}
@return $list;
}
less也可以同理这么写一个
//SASS
div{
margin:rem(10px 10rem 0 auto);
}
//编译后CSS
div{
margin:0.625rem 10rem 0 auto;
}
2.rem在less中的使用方法,这是一种简单的实现方式
html{
font-size:62.5%;
}
@baseFontSize:10;
.pxTorem(@name, @px){
@{name}: @px / @baseFontSize * 1rem;
}
.pxTorem(@name, @px1 , @px2){
@{name}: @px1 / @baseFontSize * 1rem @px2 / @baseFontSize * 1rem;
}
.pxTorem(@name, @px1 , @px2 , @px3 ){
@{name}: @px1 / @baseFontSize * 1rem @px2 / @baseFontSize * 1rem @px3 / @baseFontSize * 1rem;
}
.pxTorem(@name, @px1 , @px2 , @px3 , @px4){
@{name}: @px1 / @baseFontSize * 1rem @px2 / @baseFontSize * 1rem @px3 / @baseFontSize * 1rem @px4 / @baseFontSize * 1rem;
}
//LESS
div{
.pxTorem(width,100);
.pxTorem(height,100);
.pxTorem(padding,10,20);
.pxTorem(margin,10,20,30,40);
}
//编译后 CSS
div{
width:10rem;
height:10rem;
padding:1rem 2rem;
margin:1rem 2rem 3rem 4rem;
}
1 . px转rem在线工具
这是我看另一个网友推荐的:
[http://alurk.com/](http://alurk.comhttp://www.ofmonkey.com/front/rem
2.gulp等各类打包工具
这个方法比较激进,打包时直接匹配px,强行转为rem。
var replace = require('gulp-replace');
gulp.task('pxToRem', function(){
return gulp.src('*.html')
.pipe(replace(/(\d+)px/g, function(match, p1){
return Number(p1) / 10 + 'rem';
}))
.pipe(gulp.dest('dir'));
});
基于编辑器sublime Text插件cssrem
参考https://github.com/flashlizi/cssrem
Idea 也有SCSS SASS LESS对应的自动转换插件