Вот еще один способ решить эту проблему.
Этот код изменяет размер шрифта корневого элемента, пропорционально изменяя размер всех последующих размеров, которые не имеют точного определения пикселя.
В качестве размера по умолчанию указывается эталонная ширина, для которой один бэр отображается с размером по умолчанию 16 пикселей.Минимальный и максимальный размеры приведены также.
DEMO: http://jsbin.com/kahabo/1/
JS:
var defaultReferenceWidthPx = 320; // Size at which 1 CSS rem displays as 1 rem.
var minRootFontSizePx = 16.363636016845703;
var maxRootFontSizePx = 1024 / 320 * 16.363636016845703;
var defaultRootFontSizePx = 16.363636016845703; // HTML default for 1 rem.
var rootResizeFactor = defaultRootFontSizePx / defaultReferenceWidthPx;
var docEl; // Document's root element (`html`).
var resizeRoot = function() {
// Use clientWidth (excludes border & scrollbar) or offsetWidth (includes border & scrollbar).
var referenceWidthPx = docEl.clientWidth;
var newRootFontSizePx = rootResizeFactor * referenceWidthPx;
if(newRootFontSizePx < minRootFontSizePx) {
newRootFontSizePx = minRootFontSizePx;
} else if(newRootFontSizePx > maxRootFontSizePx) {
newRootFontSizePx = maxRootFontSizePx;
}
docEl.style.fontSize = newRootFontSizePx + 'px';
};
document.addEventListener('DOMContentLoaded', function() {
docEl = document.documentElement;
window.addEventListener('resize', resizeRoot, false);
resizeRoot();
});
HTML:
<div class="fixed">
Lorem ipsum dolor sit amet, per iisque omnesque inciderint ex. Has at facete iuvaret pertinacia, vocibus nominavi intellegam per cu.
</div>
<div class="responsive">
Lorem ipsum dolor sit amet, per iisque omnesque inciderint ex. Has at facete iuvaret pertinacia, vocibus nominavi intellegam per cu.
</div>
CSS:
body {
margin: 0;
}
.fixed {
border: solid gray;
width: 100px;
padding: 10px;
border-width: 10px;
font-size: 10px;
}
.responsive {
border: solid gray;
width: 6.25rem;
padding: 0.5rem;
border-width: 0.75rem;
font-size: 0.6rem;
}
РЕПО: https://github.com/jaepage/wtf-is-rem-in-css