字体大小相对于用户的屏幕分辨率?


84

我的网站比较流畅,菜单是其宽度的20%。我希望菜单的字体大小能够正确测量,因此它始终适合于框的宽度,并且永远不要环绕到下一行。我原本以“ em”为单位,但它与浏览器的字体大小有关,因此当我更改分辨率时,字体大小保持不变。

也尝试了分数和百分比。什么都没有,因为我需要...

请给我提示如何进行。

Answers:


51
@media screen and (max-width : 320px)
{
  body or yourdiv element
  {
    font:<size>px/em/rm;
  }
}
@media screen and (max-width : 1204px)
{
  body or yourdiv element
  {
    font:<size>px/em/rm;
  }
}

您可以根据屏幕的屏幕大小手动给它。只需看看不同的屏幕大小并手动添加字体大小即可。


16
重要说明:您需要将此添加到html头中。<meta name="viewport" content="width=device-width" /> 您也可以使用max-width而不是max-device-width更“响应”的感觉。
Sheharyar

@ user65165我没听懂你想说的吗?
Arpit Srivastava

max-device-width它不起作用。调整浏览器屏幕时,只有最大宽度有效。
Ramisa Anjum Aditi

54

您可以使用em%px。但是,与“media-queries 查看此链接”结合使用可以了解媒体查询。此外,CSS3有一些新的值,相对于当前视口尺寸大小的东西:vwvh,和vmin。请参阅有关的链接


28
vwvhvmin摇滚这个答案。
FrankLämmer2013年

1
鉴于每个*浏览器都支持视口单位,所以这是正确的答案:caniuse.com/#feat=viewport-units
爵士乐手2013年

不要忘记vmax
live2

31

新的方法

有几种方法可以实现此目的。

CSS3支持与视口相关的新尺寸。但这在android中不起作用。

  1. 3.2vw =视口宽度的3.2%
  2. 3.2vh =视口高度的3.2%
  3. 3.2vmin =小于3.2vw或3.2vh
  4. 3.2vmax = 3.2vw或3.2vh较大

    body
    {
        font-size: 3.2vw;
    }
    

看到css-tricks.com / ....,也caniuse.com /...。

旧路

  1. 使用媒体查询,但需要几个断点的字体大小

    body
    {
        font-size: 22px; 
    }
    h1
    {
       font-size:44px;
    }
    
    @media (min-width: 768px) 
    {
       body
       {
           font-size: 17px; 
       }
       h1
       {
           font-size:24px;
       }
    }
    
  2. 使用%或rem尺寸。只需更改基本字体大小,一切都会改变。与上一个不同,您可以每次只更改主体字体而不更改h1,或者将基本字体大小设置为设备的默认值,并将其全部保留在em中。

    • “根Ems”(rem):“ rem”是可扩展的单位。1rem等于body / html的字体大小,例如,如果文档的字体大小为12pt,则1em等于12pt。Root Ems本质上是可扩展的,因此2em等于24pt,.5em等于6pt,依此类推。

    • 百分比(%):百分比单位与“ em”单位非常相似,除了一些基本差异。首先,当前字体大小等于100%(即12pt = 100%)。使用百分比单位时,您的文本对于移动设备和可访问性仍然可以完全扩展。

参见kyleschaeffer.com / ....


font-size:3.2vw在我的情况下有效。虽然不确定浏览器支持。
manpikin

“例如,em等于当前字体大小,如果文档的字体大小为12pt,则1em等于12pt。” 实际上,em相对于容器的字体大小。当容器还设置了它的字体大小时,这可能导致意外的行为em。要获取相对于文档字体的大小,请使用rem
Stijn de Witt

19

我已经开发了一个不错的JS解决方案-适用于完全响应的HTML(即以百分比构建的HTML)

  1. 我仅使用“ em”来定义字体大小。

  2. html字体大小设置为10像素:

    html {
      font-size: 100%;
      font-size: 62.5%;
    }
    
  3. 我在准备就绪的文档上调用字体大小调整功能:

//这需要JQuery

function doResize() {
    // FONT SIZE
    var ww = $('body').width();
    var maxW = [your design max-width here];
    ww = Math.min(ww, maxW);
    var fw = ww*(10/maxW);
    var fpc = fw*100/16;
    var fpc = Math.round(fpc*100)/100;
    $('html').css('font-size',fpc+'%');
}

有趣的解决方案,还不错。我已经通过使用方法进行了测试,但是我将此问题固定在maxW大小窗口上的10px大小的文本上,可以吗?但是这个?什么是“ 16”是什么?var fpc = fw * 100/16;
多梅尼科·摩纳哥


5

不知道为什么会这么复杂。我会做这个基本的JavaScript

<body onresize='document.getElementsByTagName("body")[0].style[ "font-size" ] = document.body.clientWidth*(12/1280) + "px";'>

其中12表示1280分辨率下的12px。您在这里决定想要的价值



2

我创建了https://stackoverflow.com/a/17845473/189411的变体

您可以在其中设置要“检查”大小的框的最小和最大大小的关系的最小和最大文本大小。此外,您可以检查dom元素的大小,而不是要应用文本大小的框。

您根据#size-2元素的500px和960px宽度在#size-2元素上调整19px和25px之间的文本大小

resizeTextInRange(500,960,19,25,'#size-2');

您可以根据主体元素的500px和960px宽度在#size-1元素上调整13px和20px之间的文本大小

resizeTextInRange(500,960,13,20,'#size-1','body');

完整的代码在那里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');
    });
});

1

使用媒体查询会很好,因为它可以逐步缩放字体大小。

使用vw单位将相对于视口大小调整字体大小。

直接将vw单位转换为字体大小将使移动分辨率和台式机都很难达到最佳效果。

我建议尝试类似的方法:

body {
    font-size: calc(0.5em + 1vw);
}

图片来源:CSS深入


0
<script>
function getFontsByScreenWidth(actuallFontSize, maxScreenWidth){
     return (actualFontSize / maxScreenWidth) * window.innerWidth;
}

// Example:
fontSize = 18;
maxScreenWidth = 1080;
fontSize = getFontsByScreenWidth(fontSize, maxScreenWidth)

</script>

我希望这将有所帮助。我在我的Phase游戏中使用了这个公式。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.