CSS 中的 rem 和 em 的区别(1)

作者: zidea | 来源:发表于2019-02-18 07:51 被阅读11次

    css 个人接触一段时间,自认为对一些 confusing 的地方比较清楚,但是上周当有同事问道 rem 和 em 具体的区别,以及他们都适合应用在什么场景下,自己也回答含糊不清,所以搜集一些资料从新回顾一下这部分知识。

    首先我们要明确 em 和 rem 概念
    他们都是相对单位,说道相对,那么就是需要相对对象。
    em 的相对对象是其父级对象的 font-size 值 也就是父级 dom 的 font-size * em的值
    rem 这里多一个 r ,其他相同也就是 r + em,这个 r 指明了这里相对对象只能是 root 也就是 html的 font-size,下面通过实例进行讲解

    <header>
            <h1>标题</h1>
            <nav></nav>
        </header>
        <div class="wrapper">
            <div class="col-em">
                <h1>Lorem ipsum dolor sit amet.</h1>
                <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cupiditate est, ut delectus obcaecati dolores vero necessitatibus suscipit debitis saepe facilis?</p>
            </div>
            <div class="col-rem">
                <h1>Lorem ipsum dolor sit amet.</h1>
                <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cupiditate est, ut delectus obcaecati dolores vero necessitatibus suscipit debitis saepe facilis?</p>
            </div>
        </div>
    

    先写一个 html 文件,dom 结构很简单,只是为了说明 em 和 rem 这两个单位。

    @import "variables/variable.scss";
    
    .wrapper{
        display: flex;
    }
    

    css 为了方便我用了 sass 来写,然后编译成为 css 来使用,没有什么特别的,如果大家不了解 sass 留言我可以分享 sass 的用法,如果您作为一个前端开发人员,还不知道有 sass 那么多少有些落伍了。

    .col-em h1 {
      font-size: 2.5em; }
    
    .col-rem h1 {
      font-size: 2.5rem; }
    
    

    我们分别为 col-em 和 col-rem 指定了 font-size 这里值得说明一下,col-em h1 父级还没有指定 font-size 他会一直向上追溯到 html 节点默认的 font-size 16px。

    下面是 sass 代码,结构很清晰吧

    .col-em{
        h1{
            font-size: 2.5em;
        }
        p{
            font-size: 1em;
        }
    }
    
    001.JPG

    运行代码看效果
    所以看上去没有什么区别,因为他们都相对目标都是 16px, 都是 2.5 x 2.5em

    rem

    然后我们修改 col-em > h1 的父级 col-em 的 font-size 的值为 20px 这样由于 em 的相对对象是其父级 font-size

    .col-em {
      font-size: 20px; }
      .col-em h1 {
        font-size: 2.5em; }
      .col-em p {
        font-size: 1em; }
    
    002.JPG

    所以在 em 这一侧 em 文字大小都增加了。

    .wrapper {
      display: flex;
      font-size: 20px; }
    
    .col-em h1 {
      font-size: 2.5em; }
    
    .col-em p {
      font-size: 1em; }
    
    

    如果我们将 .wrapper 中的 font-size 的值调大,会发现 em 随之改变,而 rem 并没有变化。


    002.JPG

    相关文章

      网友评论

        本文标题:CSS 中的 rem 和 em 的区别(1)

        本文链接:https://www.haomeiwen.com/subject/ivhneqtx.html