55

我最近读了很多关于调整字体大小的文章,其中大部分都嘲笑使用 px 作为不可原谅的罪行(好吧,也许没那么糟糕,你明白了),因为它在旧浏览器中无法正确调整大小。

我真的很想有一个我自己使用的标准,过去一直是 px,只是因为它简单、易于理解并且相当容易实现设计中指定的确切字体大小 - 但我现在怀疑使用像素。

我最近在一个项目中使用了 em,因为它需要我使用 jQuery 制作的文本大小调整功能。但是我发现它非常令人沮丧,因为如果您在彼此内部有两个元素都指定了 em 大小,那么 em 放大的方式(希望这是有道理的)

所以我想知道使用 % 来调整字体大小,我已经看到几个大网站使用这种技术(即雅虎),据我了解,它似乎具有 em 的所有优点,而没有令人难以置信的烦人放大的东西。

简而言之,我只是想知道在 CSS 中使用 % 进行字体大小调整是否有任何问题?在字体大小调整方面会比使用 PX 更好吗?有什么明显的缺点吗?

如果问题之前的简介有点多,我深表歉意:/我仍然有点习惯整个 QA 的事情

4

5 回答 5

22

在 CSS3 中,使用rem(root em)。大小不会受到父元素的 em 大小的影响。

根字体大小是通过设置:root伪元素上的字体大小来设置的,如下所示:

:root {
    font-size: 16px;
}
于 2014-07-06T17:29:09.387 回答
9

尝试使用这个

body {
  margin: 0px;
  padding: 0px;
  font-size: 62.5%;
}

body>#wrapper {
  font-size:1em;
}

因此,当您在“包装器”中说 1em 之类的内容时,您的大小将非常类似于 10px。这是一个示例表:

3em == 30px
.5em == 5px
8.5em == 85px

这将帮助您完成过渡

Pd:当然,在正文之后需要一个包装标签

于 2012-04-26T16:06:36.330 回答
4

据我所知,网页设计的标准是使用百分比来设置正文中的字体大小,然后使用 ems 来更改字体大小。您可以在 body 标签之外使用百分比,而不会产生不利的副作用,但我认为许多开发人员发现 ems 更容易使用(任何人都可以自由地检查我)。

如果使用 em 设置正文字体大小,危险就来了;较旧的浏览器会阻塞并错误地显示文本,尤其是在缩放时。

于 2012-04-26T21:43:45.333 回答
0

有一个名为FitText的 jQuery 插件。它根据百分比调整文本大小。如果访问者由于某种原因禁用了 JavaScript,它只会正常显示,因此请设置合理的 PX 或 EM 备份。

它依赖于 jQuery,因此您需要将它包含在您的页面中(如果您还没有它)。


jquery.fittext.js供参考:

/*global jQuery */
/*! 
* FitText.js 1.0
*
* Copyright 2011, Dave Rupert http://daverupert.com
* Released under the WTFPL license 
* http://sam.zoy.org/wtfpl/
*
* Date: Thu May 05 14:23:00 2011 -0600
*/

(function( $ ){

    $.fn.fitText = function( kompressor, options ) {

        var settings = {
        'minFontSize' : Number.NEGATIVE_INFINITY,
        'maxFontSize' : Number.POSITIVE_INFINITY
      };

            return this.each(function(){
                var $this = $(this);              // store the object
                var compressor = kompressor || 1; // set the compressor

        if ( options ) { 
          $.extend( settings, options );
        }

        // Resizer() resizes items based on the object width divided by the compressor * 10
                var resizer = function () {
                    $this.css('font-size', Math.max(Math.min($this.width() / (compressor*10), parseFloat(settings.maxFontSize)), parseFloat(settings.minFontSize)));
                };

                // Call once to set.
                resizer();

                // Call on resize. Opera debounces their resize by default. 
        $(window).resize(resizer);

            });

    };

})( jQuery );
于 2012-04-26T15:10:24.573 回答
-1

也许这对制作字体调整脚本更有意义。我制作了一个完全符合您要求的脚本,但我再也找不到它了。

伪代码:

var fontSize = 15; // (em) input
var fontResize = -1;// (em)input
fontSize = fontSize+fontResize; //current div

for(every inherent parent classname == 'classname-em')
document.classnameParentSize[numberofclass] = classnameChildSize[numberOfClass]/100*90;

所以用文字来解释。脚本需要调整一些字体的大小,完成后它还会寻找一些父 div 来调整这些字体的大小,除了它们的大小将比其固有的小 10%。有了一些令人费解的问题,您将获得正确的转换。还要尽量避免填充和边框宽度。

于 2012-04-25T22:33:22.027 回答