Я искал это для работы, и мне понравился ответ tnt-rox, но я не мог не заметить, что у него были некоторые дополнительные издержки, которые можно было бы сократить.
document.body.setScaledFont = function(){
this.style.fontSize = (this.offsetWidth*0.35)+'%';
return this;
}
document.body.setScaledFont();
Сокращение накладных расходов делает его немного быстрее, если вы добавляете его в событие onresize.
Если вы хотите, чтобы шрифт внутри определенного элемента был установленизменить размер, чтобы соответствовать, вы также можете сделать что-то вроде следующего:
window.onload = function(){
var scaledFont = function(el){
if(el.style !== undefined){
el.style.fontSize = (el.offsetWidth*0.35)+'%';
}
return el;
}
navs = document.querySelectorAll('.container>nav'),
i;
window.onresize = function(){
for(i in navs){
scaledFont(navs[i]);
}
};
window.onresize();
};
Я только что заметил, что ответ Николаса также имел некоторые дополнительные издержки.Я немного прибрался.С точки зрения производительности, я не очень люблю использовать цикл while и медленно уменьшать размер, пока не найдете подходящий.
function setPageHeaderFontSize(selector) {
var $ = jQuery;
$(selector).each(function(i, el) {
var text = $(el).text();
if(text.length) {
var span = $("<span>").css({
visibility: 'hidden',
width: '100%',
position: 'absolute',
'line-height': '300px',
top: 0,
left: 0,
overflow: 'visible',
display: 'table-cell'
}).text(text),
height = 301,
fontSize = 200;
$(el).append(span);
while(height > 300 && fontSize > 10) {
height = span.css("font-size", fontSize).height();
fontSize--;
}
span.remove();
$(el).css("font-size", fontSize+"px");
}
});
}
setPageHeaderFontSize("#MyDiv");
А вот пример моего более раннего кода, использующего jquery.
$(function(){
var scaledFont = function(el){
if(el.style !== undefined){
el.style.fontSize = (el.offsetWidth*0.35)+'%';
}
return el;
};
$(window).resize(function(){
$('.container>nav').each(scaledFont);
}).resize();
});