Я искал это для работы, и мне понравился ответ 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();
});
person
Eeems
schedule
09.12.2014