zoukankan      html  css  js  c++  java
  • 彻底弄懂css中单位px和em,rem的区别

    1.jpg

    国内的设计师大都喜欢用px,而国外的网站大都喜欢用em和rem,那么三者有什么区别,又各自有什么优劣呢?

    PX特点

    1. IE无法调整那些使用px作为单位的字体大小;

    2. 国外的大部分网站能够调整的原因在于其使用了em或rem作为字体单位;

    3. Firefox能够调整px和em,rem,但是96%以上的中国网民使用IE浏览器(或内核)。

     

    px像素(Pixel)。相对长度单位。像素px是相对于显示器屏幕分辨率而言的。(引自CSS2.0手册)

     

    em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。(引自CSS2.0手册)

     

    任意浏览器的默认字体高都是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作为单位就行了。

     

    EM特点 

    1. em的值并不是固定的;

    2. em会继承父级元素的字体大小。

     

    所以我们在写CSS的时候,需要注意两点:

    1. body选择器中声明Font-size=62.5%;

    2. 将你的原来的px数值除以10,然后换上em作为单位;

    3. 重新计算那些被放大的字体的em数值。避免字体大小的重复声明。

     

    也就是避免1.2 * 1.2= 1.44的现象。比如说你在#content中声明了字体大小为1.2em,那么在声明p的字体大小时就只能是1em,而不是1.2em, 因为此em非彼em,它因继承#content的字体高而变为了1em=12px。

     

    rem特点 

    rem是CSS3新增的一个相对单位(root em,根em),这个单位引起了广泛关注。这个单位与em有什么区别呢?区别在于使用rem为元素设定字体大小时,仍然是相对大小,但相对的只是HTML根元素。这个单位可谓集相对大小和绝对大小的优点于一身,通过它既可以做到只修改根元素就成比例地调整所有字体大小,又可以避免字体大小逐层复合的连锁反应。目前,除了IE8及更早版本外,所有浏览器均已支持rem。对于不支持它的浏览器,应对方法也很简单,就是多写一个绝对单位的声明。这些浏览器会忽略用rem设定的字体大小。下面就是

    一个例子:

    p {font-size:14px; font-size:.875rem;}

    注意: 

    选择使用什么字体单位主要由你的项目来决定,如果你的用户群都使用最新版的浏览器,那推荐使用rem,如果要考虑兼容性,那就使用px,或者两者同时使用。

    在这里为大家提供一个px,em,rem单位转换工具

    地址:http://pxtoem.com/

    2.jpg

     

    番外篇:

    在页面中设置字体,我们知道有常见的两种,px 和 em.

    px

    在Web页面制作中,我们一般使用“px”来设置我们的文本,因为他比较稳定和精确。但是这种方法存在一个问题,当用户在浏览器中浏览我们制作的Web页面时,他改变了浏览器的字体大小(虽然一般人不会去改变浏览器字体大小),这时会使用我们的Web页面布局被打破,这时就提出了使用“em”来定义Web页面的字体。

    em

    一般都是bodyfont-size为基准

    常用写法:

     1 body {
     2     font-size: 62.5%;
     3     /*10 ÷ 16 × 100% = 62.5%*/
     4 }
     5 h1 {
     6     font-size: 2.4em;
     7     /*2.4em × 10 = 24px */
     8 }
     9 p {
    10     font-size: 1.4em;
    11     /*1.4em × 10 = 14px */
    12 }
    13 li {
    14     font-size: 1.4em;
    15     /*1.4 × ? = 14px ? */
    16 }

    为什么“li”的“1.4em”是不是“14px”将是一个问号呢?在使用“em”作单位时,一定需要知道其父元素的设置,因为“em”就是一个相对值,而且是一个相对于父元素的值,
    计算公式:1 ÷ 父元素的font-size × 需要转换的像素值 = em值
    这样的情况下“1.4em”可以是“14px”,也可以是“20px”,或者说是“24px”,总之是一个不确定值,那么解决这样的问题,要么你知道其父元素的值,要么呢在任何子元素中都使用“1em”。

    rem

    rem:W3C官网描述是“font size of the root element”,即rem是相对于根元素。
    我们只需要在根元素确定一个参考值,在根元素中设置多大的字体,这完全可以根据您自己的需,大家也可以参考下图:

    pxtoem

    嫌换算麻烦的同学,也可以去http://pxtoem.com/这个网站去设置

    常用写法:

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

    在根元素中定义了一个基本字体大小为62.5%(也就是10px。设置这个值主要方便计算,如果没有设置,将是以“16px”为基准 )。从上面的计算结果,我们使用“rem”就像使用“px”一样的方便,而且同时解决了“px”和“em”两者不同之处。

    注:在Chrome下,默认最下字体为12px,可以设置font-size: 625%,其他以此类推

    浏览器兼容性

    IE9以上等支持CSS3的浏览器是肯定可以支持的,如果想要兼容IE低版本,那可以考虑针对IE9以下低版本浏览器,用px来实现。

  • 相关阅读:
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 连号区间数
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Java实现 蓝桥杯 历届试题 大臣的旅费
    Navicat查询哪些表有指定字段名
  • 原文地址:https://www.cnblogs.com/jiangxiaobo/p/5669925.html
Copyright © 2011-2022 走看看