我正在创建一个网页应用程序,它将显示在电视和其他大型监视器上。我想要一种快速简便的方法来增加字体大小以适应窗口大小,文本是动态的。
非常感谢任何帮助。 ;)
我正在创建一个网页应用程序,它将显示在电视和其他大型监视器上。我想要一种快速简便的方法来增加字体大小以适应窗口大小,文本是动态的。
非常感谢任何帮助。 ;)
@media screen and (min-device-width: 800px) { ... }
首先,你应该在 UI 中尽可能使用 Ems 作为度量单位。至少,将所有文本元素的大小都设置为 Ems(而不是像素或%)。如果可能,使用 Ems 设置布局块的宽度也有助于应用程序按比例进行缩放。如果可以将所有尺寸都设置为 Ems,则整个应用程序都将具有可视化可伸缩性。
Ems 的关键在于它们相对于其父元素的字体大小调整大小,这意味着您可以通过调整 body 元素的字体大小(因为一切都相对于 body)来按比例调整所有文本的大小。
最后一步是使用一段 JavaScript 检测视口的宽度,并相应地设置 body 的字体大小。根据您想要控制比例的精细程度,您可以在 body 元素上使用类来设置一组预定义值,或直接操作字体大小本身。我倾向于使用预定义的大小,以便更容易测试。
我建议使用 JavaScript 库使检测视口宽度更加简单 - 在不同的浏览器中它可能会有所不同。使用 jQuery ,代码可能如下:
$(function(){
var viewPortWidth = $(window).width();
if (viewPortWidth > 1900) {$('body').addClass('extraWide')}
else if (viewPortWidth > 1400) {$('body').addClass('wide')}
else if (viewPortWidth > 1000) {$('body').addClass('standard')}
else if (viewPortWidth > 700) {$('body').addClass('narrow')}
else {$('body').addClass('extraNarrow')}
});
并且CSS代码:
<style type="text/css">
body {font-size:62.5%;} /* Set the size of 1em to 10px in all browsers */
body.extraWide {font-size:85%;}
body.wide {font-size:75%;}
body.narrow {font-size:50%;}
body.extraNarrow {font-size:40%;}
</style>
当然,这些值可以根据你的需要进行调整,并且你可以设置任意数量的分割线。这是一个非常简单粗暴的解决方案,但应该能够解决问题。
注意 - 所示的JavaScript代码仅在页面加载时设置比例 - 当您更改窗口大小时不会进行调整。这是一个可能需要添加的功能,但在深入了解之前有更重要的考虑因素。个人而言,我甚至考虑将比例值设置为cookie,以保持用户在整个会话中的一致体验,而不是在每次页面加载时重新调整比例。
我知道这是一个比较老的问题,但我还是会回答它,因为这是一个经常被搜索的问题。
除了媒体查询,实际上还有另一种纯CSS的方法:
视窗单位:vw
、vh
、vmin
、vmax
。
它们是表示视口大小的长度单位,如视口宽度(vw)、高度(vh)、两者中较小的(vmin)或两者中较大的(vmax)的1%。
例如,您可以使用以下内容:
CSS:
body {
font-size:5vmin;
}
这将整个文档的字体大小设置为最小视口大小(宽度或高度)的5%。因此,例如在 iPad(1024 x 768 像素)上,font-size
将为 38.4 像素 (因为这是两个视口大小中较小的尺寸,所以是 768 像素的 5%)。
$(document).ready(scaleFont);
$(window).resize(scaleFont);
function scaleFont() {
var viewPortWidth = $(window).width();
if (viewPortWidth >= 1900) {$('body').attr('class','extraWide');}
else if (viewPortWidth >= 1400) {$('body').attr('class','wide');}
else if (viewPortWidth >= 1000) {$('body').attr('class','');}
else if (viewPortWidth >= 700) {$('body').attr('class','narrow');}
else {$('body').attr('class','extraNarrow');}
}
因此,仅在调整窗口大小时才会改变大小(避免使用 setTimout
),并且您只需给 body
分配所需的确切类即可。
$(document).ready(function() {
var setFontSize = function() {
var viewportWidth = $(window).width();
var fontSize = Math.sqrt(viewportWidth/250);
$('.myElement').css('font-size',fontSize+'em');
};
$(window).resize(function() {
setFontSize();
});
setFontSize();
});
$(document).ready(function() {scaleFont();});
function scaleFont() {
var viewPortWidth = $(window).width();
if (viewPortWidth > 1900) {$('body').addClass('extraWide')}
else if (viewPortWidth > 1400) {$('body').addClass('wide')}
else if (viewPortWidth > 1000) {$('body').addClass('standard')}
else if (viewPortWidth > 700) {$('body').addClass('narrow')}
else {$('body').addClass('extraNarrow')}
setTimeout(scaleFont, 100);
}
编辑:已解决反向效果
$(document).ready(function() {scaleFont();});
function scaleFont() {
var viewPortWidth = $(window).width();
if (viewPortWidth >= 1900) {$('body').addClass('extraWide').removeClass('wide, standard, narrow, extraNarrow')}
else if (viewPortWidth >= 1400) {$('body').addClass('wide').removeClass('extraWide, standard, narrow, extraNarrow')}
else if (viewPortWidth >= 1000) {$('body').addClass('standard').removeClass('extraWide, wide, narrow, extraNarrow')}
else if (viewPortWidth >= 700) {$('body').addClass('narrow').removeClass('extraWide, standard, wide, extraNarrow')}
else {$('body').addClass('extraNarrow').removeClass('extraWide, standard, wide, narrow')}
setTimeout(scaleFont, 100);
}
这是我的方法(去除实际类和Drupal 7 jQuery):
(function ($) {
$(document).ready(function() {
var bodyClassArr = new Array('extraWide', 'wide', 'normal', 'narrow', 'extraNarrow', 'mobile');
function setBodyClass(){
// remove previous classes
for(x in bodyClassArr){
if($('body').hasClass(bodyClassArr[x])){ $('body').removeClass(bodyClassArr[x]); }
}
var viewPortWidth = $(window).width();
if (viewPortWidth > 1900) { $('body').addClass('extraWide'); }
else if (viewPortWidth > 1400) { $('body').addClass('wide'); }
else if (viewPortWidth > 1000) { $('body').addClass('normal'); }
else if (viewPortWidth > 700) { $('body').addClass('narrow'); }
else if (viewPortWidth < 700) { $('body').addClass('mobile'); }
else { $('body').addClass('normal'); }
};
setBodyClass();
$(window).resize(function() { setBodyClass(); });
}); // jquery end
}(jQuery));
onresize=onload=function(){document.body.style.fontSize=window.innerWidth+"px"}
onresize=onload=function(){document.getElementById("post").style.fontSize=document.getElementById("icon").width+"px"};
的事情,其中 post
是按钮的 id,icon
是一个 div。我试图根据 div 的尺寸大小来设置按钮字母的大小,但是不起作用。有什么建议吗? - slevin