Tôi đã tạo một biến thể của https://stackoverflow.com/a/17845473/189411
nơi bạn có thể đặt kích thước văn bản tối thiểu và tối đa liên quan đến kích thước tối thiểu và tối đa của hộp mà bạn muốn kích thước "kiểm tra". Ngoài ra, bạn có thể kiểm tra kích thước của phần tử dom khác với hộp mà bạn muốn áp dụng kích thước văn bản.
Bạn thay đổi kích thước văn bản từ 19px đến 25px trên phần tử # size-2, dựa trên chiều rộng 500px và 960px của phần tử # size-2
resizeTextInRange(500,960,19,25,'#size-2');
Bạn thay đổi kích thước văn bản từ 13px đến 20px trên phần tử # size-1, dựa trên chiều rộng 500px và 960px của phần tử body
resizeTextInRange(500,960,13,20,'#size-1','body');
mã hoàn chỉnh ở đó https://github.com/kiuz/sandbox-html-js-css/tree/gh-pages/text-resize-in-range-of-text-and-screen/src
function inRange (x,min,max) {
return Math.min(Math.max(x, min), max);
}
function resizeTextInRange(minW,maxW,textMinS,textMaxS, elementApply, elementCheck=0) {
if(elementCheck==0){elementCheck=elementApply;}
var ww = $(elementCheck).width();
var difW = maxW-minW;
var difT = textMaxS- textMinS;
var rapW = (ww-minW);
var out=(difT/100)*(rapW/(difW/100))+textMinS;
var normalizedOut = inRange(out, textMinS, textMaxS);
$(elementApply).css('font-size',normalizedOut+'px');
console.log(normalizedOut);
}
$(function () {
resizeTextInRange(500,960,19,25,'#size-2');
resizeTextInRange(500,960,13,20,'#size-1','body');
$(window).resize(function () {
resizeTextInRange(500,960,19,25,'#size-2');
resizeTextInRange(500,960,13,20,'#size-1','body');
});
});
<meta name="viewport" content="width=device-width" />
Ngoài ra, bạn có thể sử dụngmax-width
thay vìmax-device-width
để có cảm giác 'phản hồi nhanh' hơn.