rem和em在CSS中有什么不同?
在网站来源,我有时看到开发人员使用rem
单位。 这与em
相似吗? 我试图看看它究竟做了什么,但是它是相对的呢?
演示
HTML
<div>Hello <p>World</p></div>
CSS
div { font-size: 1.4rem; } div p { font-size: 1.4rem; }
EM
是相对于他们的父母的字体大小
REM
是相对于基本字体大小
当中间容器改变字体大小时,这一点很重要。 EM的子元素将受到影响,使用REM的子元素不会。
单位rem
(root em)代表根元素的字体大小。 在HTML文档中,根元素是html
元素。 浏览器支持仍然有限。
虽然em是相对于其直接或最近的父母的字体大小, REM只是相对于HTML(根)字体大小。
他们提供了控制devise区域的能力。 如在,比较在那个比例的比例。 rem提供了在整个页面上轻松缩放types的function。
这是一个例子。 当我们改变html
元素的font-size
,用rem
改变大小的divs
。 而使用em
大小只会随着我们改变div
的font-size
而改变。
$(function() { var htmlSize = $('input#html'); htmlSize.change(function() { $('html').css('font-size', htmlSize.val() + 'px'); }); var divSize = $('input#div'); divSize.change(function() { $('div').css('font-size', divSize.val() + 'px'); }); });
* { float: left; font-size: 20px; margin:2px; } label { clear:both; } div { border: thin solid black; } div.rem1 { width:4rem; height: 4rem; clear: both; } div.rem2 { width: 3rem; height: 3rem; } div.em1 { width: 4em; height: 4em; clear: both; } div.em2 { width: 3em; height: 3em; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <label>Change html font-size <input id="html" type='number' value="20" min="18" max="30" /> </label> <div class="rem rem1">rem</div> <div class="rem rem2">rem</div> <label>Change div font-size <input id="div" type='number' value="20" min="18" max="30" /> </label> <div class="em em1">em</div> <div class="em em2">em</div>
基本上,em是相对于CSS中最近的父项,而相对于通常为html标签的页面的父项…
如果你运行下面的css,以及父母是如何实现的,你会发现显然不同:
html { font-size: 16px; } .lg-font { font-size: 30px; } p.rem { font-size: 1rem; } p.em { font-size: 1em; }
<div class="lg-font"> <p class="em">Hello World - em</p> </div> <div class="lg-font"> <p class="rem">Hello World - rem</p> </div>