search

Home  >  Q&A  >  body text

css3 - 想用rem给width与height进行赋值时,该怎么计算呢?以谁为参照物呢?

rem在设置宽度和高度的时候,该怎么进行计算呢?
比如html{font-size: 62.5%;}
那么font-size:2rem;与font-size:20px是一样的
但是width:20rem与width:200px是不一样的。
所以,当想用rem进行width与height进行设置时,该怎么计算呢?以谁为参照物呢?

巴扎黑巴扎黑2779 days ago837

reply all(4)I'll reply

  • 巴扎黑

    巴扎黑2017-04-17 11:14:46

    rem用来设置字体大小,也可以用于网格布局。rem中的r代表根元素,它的值就是根元素设置的字体大小。在大多数情况下,根元素就是html了。这个单位可以解决em设置字体时,由于继承带来的问题,具体如下:

    body {
        font-size: 14px;
    }
    p {
        font-size: 1.2em; // calculated at 14px * 1.2, or 16.8px
    }
    

    假设html存在这样的结构:

    <body>
        <p>
            Test <!-- 14 * 1.2 = 16.8px -->
            <p>
                Test <!-- 16.8 * 1.2 = 20.16px -->
                <p>
                    Test <!-- 20.16 * 1.2 = 24.192px -->
                </p>
            </p>
        </p>
    </body>
    

    但是用rem能避免

    html {
        font-size: 14px;
    }
    p {
        font-size: 1.2rem;
    }
    

    这样在上面的那三个嵌套的p的字体大小都是 1.2*14px = 16.8px 了。
    在布局中,如下:

    .container {
        width: 70rem; // 70 * 14px = 980px
    }
    

    参考文章

    reply
    0
  • 巴扎黑

    巴扎黑2017-04-17 11:14:46

    rem这个单位是相对于根元素的,是可以用来设置widthheight的,只是计算的基准是html标签的font-size值,这里建议htmlfont-size值用px,不要用百分比; 不过呢htmlfont-size最好是通过js来动态计算一个数值:

    //- 设置根元素fontSize~
    (function (doc, win) {
        var _root = doc.documentElement,
            resizeEvent = 'orientationchange' in window ? 'orientationchange' : 'resize',
            resizeCallback = function () {
                var clientWidth = _root.clientWidth,
                    fontSize = 20;
                if (!clientWidth) return;
                if(clientWidth < 640) {
                    fontSize = 20 * (clientWidth / 320);
                } else {
                    fontSize = 20 * (640 / 320);
                }
                _root.style.fontSize = fontSize + 'px';
            };
        if (!doc.addEventListener) return;
        win.addEventListener(resizeEvent, resizeCallback, false);
        doc.addEventListener('DOMContentLoaded', resizeCallback, false);
    })(document, window);
    

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-17 11:14:46

    其中的rem原理我就不说了,我想说的就是,rem,真的不能用在height和width中, 在height和width中,一般情况下使用百分比就可以了.
    在width里面使用rem的话,你会发现, 他计算出来的数值,和你想要的不一样.
    举个例子吧:
    当你在html里面设置的font-size为10px的话,

    html{
        font-size:10px;
    }
    p{
        font-size:2rem;  //得到的结果是20px 你会微微一笑,艹,你骗我呢. 不急,show u code
    }
    p{
        height: 2rem;  //这时候,请打开你的控制台,观察p的高度,你会发现是24px;TM!!!怎么不是20px呢
    }

    原理就是, font-size 对于height 和 width 而言最小值是 12px, 而对于font-size而言, 你想设多少,就设置多少。 这个无可厚非。
    咳咳~~
    所以综上所述: 在height 里面一般使用 百分比就够了(你整个12px 你自己也不好计算呀,而且如果动态的时候真的给你整个 <12px的,到时候哭都来不及).
    在font-size里面,最好就使用rem, 因为这个单位是专门为他开发的.

    reply
    0
  • PHPz

    PHPz2017-04-17 11:14:46

    呵呵,rem只是用来设置字体大小,没有谁告诉你rem可以设置width和height

    reply
    0
  • Cancelreply