页面适配之pt、px、em、rem用法和特点

因为自己也经常做移动端的开发工作,现总结一份页面适配的笔记。

1. pt

点(Points),绝对长度单位。
印刷业上常使用的单位,磅的意思,一般用于页面打印排版。
不知道经常做设计的同学知不知道zeplin这个网站,它用的像素单位都是pt。
1in = 2.54cm = 25.4 mm = 101.6q = 72pt = 6pc = 96px
用法:

div { font-size:10pt; }

这里写图片描述

2. px

相对长度单位。像素(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,此时,上面示例中所示的值将会改变:
这里写图片描述

3.em

相对长度单位。相对于当前对象内文本的字体尺寸。
如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。
相对长度单位。像素(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数值。避免字体大小的重复声明。

4. rem

相对长度单位。相对于根元素(即html元素)font-size计算值的倍数。是CSS3新增的一个相对单位(root em,根em)

div { font-size:10rem; }

这里写图片描述

rem可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。

5. px、pt、em、rem转化表:

pt=1/72(英寸) px=1/dpi(英寸) pt=px*dpi/72
以windows下的96dpi来计算,1pt=px*96/72=px*4/3

字号PixelsEmsPercentPoints
八号6px0.375em37.5%5pt
七号7px0.4375em43.75%5.5pt
小六8px0.5em50%6.5pt
9px0.55em55%7pt
六号10px0.625em62.5%7.5pt
11px0.7em70%8pt
小五12px0.75em75%9pt
13px0.8em80%10pt
五号14px0.875em87.5%10.5pt
15px0.95em95%11pt
小四16px1em10%12pt
17px1.05em105%13pt
18px1.125em112.5%13.5pt
四号19px1.2em120%14pt
20px1.25em125%14.5pt
小三21px1.3em130%15pt
三号22px1.4em140%16pt
23px1.45em145%17pt
小二24px1.5em150%18pt

6. 下面介绍下使用方法:

现在的使用方法很多,我直接介绍我偏向的这一种了

  1. rem在Sass中的使用方法
@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;
}

7.其它方法

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'));
});
  1. 基于编辑器sublime Text插件cssrem
    参考https://github.com/flashlizi/cssrem

  2. Idea 也有SCSS SASS LESS对应的自动转换插件

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值