一些移动端会用到的单位

单位介绍

说到css的单位,大家应该首先想到的是px,也就是像素,我们在网页布局中一般都是用px,但是近年来自适应网页布局越来越多,em和百分比也经常用到了。然后随着手机的流行,web app和hybrid app的开发,都用到了css3技术,在css3中,新增了许多单位,rem、vw和vh、vmin和vmax、ch和ex等等,那现在对这些单位分别做一下详细的介绍吧。

em

做前端的应该对em不陌生,不是什么罕见的单位,是相对单位,参考物是父元素的font-size,具有继承的特点。如果字体大小是16px(浏览器的默认值),那么 1em = 16px。

不过,这样使用很复杂,很难很好的与px进行对应,因此,前端开发的前辈们总结了一个经验

body {
font-size: 62.5%;
}

那么,这样之后 1em = 10px 在布局等使用的时候好换算了很多。

百分比

百分比相信大家更不会陌生了,百分比一般宽泛的讲是相对于父元素,但是并不是十分准确。

1、对于普通定位元素就是我们理解的父元素

2、对于position: absolute;的元素是相对于已定位的父元素(offset parent)

3、对于position: fixed;的元素是相对于 ViewPort

viewport:可视窗口,也就是浏览器的window那么大。

例外情况

1、使用了padding、margin 等,实际百分比和你想要的百分比是有区别的。(关于这个,解决方法之一,就是我们可以使用css3的calc()属性,具体,您请继续往下看,在文章最后我会解释。)

2、line-height百分比的一些情况,通常结果是百分比 计算后的值。(关于这个,您请继续往下看。。。)

rem

rem支持IE9及以上,意思是相对于根元素html(网页),不会像em那样,依赖于父元素的字体大小,而造成混乱。使用起来安全了很多。

html {font-size: 62.5%; /**10 ÷ 16 × 100% = 62.5%    1rem = 10px   **/}
body {font-size: 1.4rem; /**1.4 × 10px = 14px **/}
h1 { font-size: 2.4rem; /**2.4 × 10px = 24px**/}

这样整个网页都会比较统一!不会造成混乱!

vh 和 vw

IE10+ 和现代浏览器都支持这两个单位。

vw Viewport宽度, 1vw 等于viewport宽度的1%

vh Viewport高度, 1vh 等于viewport高的的1%

vw和vh会随着viewport变化自动变化,再也不用js控制全屏了。

甚至有些人丧心病狂的字体大小都用vw和vh控制,来达到字体和viewport大小同步的效果。

vmin和vmax

IE10+ 和现代浏览器都已经支持vmin

webkit浏览器之前不支持vmax,新版已经支持,所有现代浏览器已经支持,但是IE 全部 不支持vmax

vmin vw和vh中比较  的值

vmax vw和vh中比较 的值

这两个属性也会随着viewport变化

ch和ex

IE9+ 和现代浏览器都已经支持,这两个单位时根据 当前font-family 的相对单位。

ch 字符0的宽度

ex 小写字符x的高度

如下图:

当font-family改变的时候这两个单位的值也会变化,不同字体表现的样式不一样。

css3的calc()

上面我们已经提到了calc(),下面我们就具体说一说吧!

浏览器支持IE9+、FF4.0+、Chrome19+、Safari6+

calc()语法非常简单,就像我们小时候学加 (+)、减(-)、乘(*)、除(/)一样,使用数学表达式来表示:

.haorooms {
  width: calc(expression);
}

这样padding和margin和百分比一起用,问题就可以解决了。

例如,我们margin是20px。那么我们就可以写成

.haorooms{
  width: calc(100% - 20px);  //注:减号前后要有空格,否则很可能不生效!!
}

也可以这么用:

.box {
    background: #f60;
    height: 50px;
    padding: 10px;
    border: 5px solid green;
     width: 90%;/*写给不支持calc()的浏览器*/
    width:-moz-calc(100% - (10px + 5px) * 2);
    width:-webkit-calc(100% - (10px + 5px) * 2);
    width: calc(100% - (10px + 5px) * 2);
}

line-height百分比

line-height百分比在面试中可能经常问到。例如你知道line-height:120%和line-height:1.2的区别吗?

现在就说一下行高带单位和不带单位的区别,例如下面的例子:

line-height:26px;      /*表示行高为26个像素*/
line-heigth:120%;     /*表示行高为当前字体大小的120%*/
line-height:2.6em;    /*表示行高为当前字体大小的2.6倍*/

带单位的行高都有继承性,其子元素继承的是计算值,如父元素的字体大小为14px,定义行高line-height:2em;则计算值为 28px,不会因其子元素改变字体尺寸而改变行高。(例如:父元素14px,子元素12px,那么行高就是28px,子元素虽然字体是12px,行高还是父元素的行高)

line-height:2.6;表示行高为当前字体大小的2.6倍

不带单位的行高是直接继承,而不是计算值,如父元素字体尺寸为14px,行高line-height:2;子元素字体为12px,不需要再定义行高,他默认的行高为24px。(例如:子元素12px,他的行高是24px,不会继承父元素的28px)

只是单纯的文字描述,可能同学看了会很晕!不清楚是怎么回事!下面我再补充一下案例吧!

大家把下面代码copy到html中

<style>
    .haorooms_bfb{font-size:14px;line-height: 150%; background: green;padding:10px}
    .haorooms_nodw{font-size:14px;line-height: 1.5; background: green;padding:10px}
    .haorooms_children{font-size:26px;background: red}
</style>

<div class="haorooms_bfb">
    <div class="haorooms_children">行高测试</div>
</div>

<br/><br/>

<div class="haorooms_nodw">
    <div class="haorooms_children">行高测试</div>
</div>

其中,一个是有百分比的,一个是没有百分比的!预览图如下:

如上图,有百分比的haorooms_children 继承了父级元素14*1.5=21px

没有百分比,不带单位的是自己的1.5倍,也就是26*1.5=39px;

转载自:http://www.haorooms.com/post/css_unit_calc

时间: 2024-10-03 22:37:44

一些移动端会用到的单位的相关文章

移动端布局使用哪种单位比较好?

关于移动端布局使用哪种单位,每个人都有自己习惯使用的单位,这个也只是我个人的一点点浅见. 欢迎大家指点. 很多人在谈到写移动端页面的时候,都觉得很恼火.因为要写n套css样式.然后用媒体查询做适配. 一般这个时候我都表示自己懵懵哒,搞不懂为什么要写这么多套.可能是由于我经验不够,所以看不出来写这么多套有什么深意. 我认为在移动端可以做到适配不同的手机分辨率,如果只是保持整体缩放,没有设计上的差异可以不需要用到`media query`. 下面说说我习惯使用的单位:em,rem,% 1.em em

移动端:UI图px单位转换rem单位的计算方法

简单说一下 em em 单位是相对于父元素字体大小来去定的.比方说: font-size:12px; 元素宽度是2em; 那么实际的宽度是 24px.(具体为什么,可以去查询资料,今天主讲rem) 简单说一下 rem rem 是相对于根元素(html)字体大小来确定的.比方说: 宽度 字体 手机A: 320px 14px 手机B: 460px ? 为了能达到可以同等比的放大缩小,那么,可以进行很简单的运算:?=14*460/320 得到:?=20.125px; UI图上的px转化成实际操作的re

移动端单位解析

手机端开发单位到底用什么? 目前有3种,px,em ,rem PC端大部份是用px单位,小部分用em单位,而移动端,请全部用rem单位吧.目前大部份设备,包括但不限于iOS 5+.Android 2.3+.Window Phone 8+都是可以兼容的. rem是什么? 相对长度单位,相对于根元素(即html元素)font-size计算值的倍数. rem用法很简单,就是根标签html设置文字大小后(不设置的话,大部份浏览器默认为16px),其他标签设置rem都是html大小的倍数. html{ f

rem与px之间的换算(移动端)

最近因为工作接触到rem与px之间的换算,之前知道一些,不过还是比较笼统模糊,用起来不是很明白,后来自己查了点资料,以及亲自测试总算明白它们之间是怎么换算的了. rem是一个相对值,它相对于根元素html,所以我们在使用的时候需要设置html的font-size值,内容大小就相对该值进行设置大小,比如,html的font-size为100px,内容的font-size想设置为20px,这换算为rem单位就是20/100=0.2rem.不过在开发中,html的font-size值会动态变化的,这样

css中的单位

今天看到了一个没见过的单位vw,就顺便把css中我常用的单位讲解一下: 1.px px:像素,这个单位想必大家都很熟悉,就是计算机上的一个点,我也不多说什么了. 2.em em是相对于其父元素的字体大小,如果没有父元素,则是相对于body元素,即1em是当前元素大小的1倍,2em是2倍. <div style="font-size:12" > <p style="font-size:12">12px大小</p> <p sty

移动端H5的一些基本知识点总结

来到这家公司之后,和以前的工作发生了很大的转变.以前我一直是做PC端页面的.来到现在这家公司之后,主要是做手机移动端的页面. 移动端的页面在我这个做习惯了PC端页面的人看来,应该是很简单的一些事情.但是在上手的过程当中,还是发现,原来移动端虽然DOM结构要简单得多,但是需要注意的细节,还是非常多的.原因非常简单,那就是,你必须考虑所有的手机上不同分辨率的展示效果. 移动端的分辨率有哪些呢? 以iphone为例,有以下分辨率 iphone4 640960 iphone5 6401136 iphon

小端大端

一:什么是大小端 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放:这和我们的阅读习惯一致. 小端模式,是指数据的高字节保存在内存的高地址中,而数据的低字节保存在内存的低地址中,这种存储模式将地址的高低和数据位权有效地结合起来,高地址部分权值高,低地址部分权值低. 口诀:大相反(低位存高位),小相同(低位存低位),叉八六(X86计算机),必小端. 举例:假如一个int类型

c语言:union,大小端

union: 不允许只用联合变量名作赋值或其它操作. 也不允许对联合变量作初始化赋值,赋值只能在程序中进行. 小端存储: 以字节为单位,低存低,高存高. 任何数据在内存中都是以二进制(1或着0)顺序存储的,每一个1或着0被称为1位,而在x86CPU上一个字节是8位.比如一个16位(2字节)的 short int型变量的值是1156,那么它的二进制表达就是:00000100 10000100.由于Intel CPU的架构是Little Endian(小端存储,请参数机算机原理相关知识),所以它是按

关于webapp中的文字单位的一些捣腾

前言 文字是网页内容的一枚大将,我们无时无刻都在看着它,只要是你盯屏幕上的任何一个地方都会有文字.地铁上无时无刻都在盯着屏幕上的人对于文字更为敏感,太大不行,太小TN又看不清上面到底在说什么,有时候车一晃完全是蛋疼的货.下面一篇文字就是针对webapp的文字做了一些小捣腾,肯定有很多不足的地方,欢迎补充. 有必要了解一下我们所常见的数值. 关于单位 对于webapp上文字用什么单位的问题,一直以来都是让我们csser头疼的问题,公说公有理,婆说婆有理.有人说px好,有人说em自适应,有的说百分比