如何覆盖Firefox中的minimum-font-size?

Ale*_*nic 11 css browser firefox minimum font-size

我的网站在IE和Opera中显示就像需要的那样,但在Firefox中,我无法通过CSS获得比Firefox的默认最小字体大小更小的字体.当然,我可以转到工具>选项并删除此值,但其他用户会看到一些元素被取代.

我尝试过使用!important,但它不起作用.我无法用图像替代文本,它们是动态字段.

Jor*_*ray 50

好的.我将解释你是如何做到这一点的,但你需要先了解一些事情.

你不应该这样做.

存在最小字体大小设置的原因和非常好的原因.简单地说,对于大多数字体来说,读取12px以下的任何东西已经很难了,不要低于默认的最小值9px.如果你的设计要求除了一组极其有限的情况之外的任何东西,那么你的设计很糟糕,并且排除了大量用户.

你真的不应该这样做.

网络是一种本质上灵活的媒介,一个好的设计必须考虑到这一点.需要固定字体大小才能工作的设计适合打印,但它们不适合网络.任何不能满足这一要求的设计师都不理解这种要求,没有像样的PM应该优先考虑设计师对实用性和可用性的错误决策.如果你不能反对这个决定,你有更大,更基本的问题需要处理.

你真的,真的不应该这样做.

根据您所在的司法管辖区,您可能会在合法的灰色区域徘徊.微小的字体大小难以阅读,并且会使您的用户很容易错过信息 - 如果手头的文本具有法律意义,例如选择退出信息或免责声明,这尤其麻烦.您还会因视力障碍造成严重问题而对您网站的可访问性进行处理.

怎么办呢

将Firefox显示字体设置为低于指定的最小尺寸非常容易:只需使用font-size-adjust属性即可.

这是科学的一点

每种字体都有一个称为宽高比值的东西,它是x高度(字母x的高度)²与你设置的实际字体大小之间的比率.例如,在Comic Sans中,这真的很大(0.55),你可以看出较短的字母(a,c,e ......)与较高的字母(b,d,h ......)相比有多大,而在Courier中新的它要小很多(0.43).

这种可变性可能会导致一些问题.例如,假设您为正文指定了超级花哨的字体,但因为您是一名优秀的设计师,所以您提供了几种后备字体.这很好,但由于其中一些回退具有不同的方面值,因此字母可能会更小,并且在您指定的大小上更不易读.font-size-adjust允许您确保任何后备具有与超级花哨字体相同的x高度.

不幸的是,我们也可以使用它来使文​​字不易清晰.假设你的身体副本是12px的Segoe UI:

body {
    font-family: "Segoe UI";
    font-size: 12px;
}
Run Code Online (Sandbox Code Playgroud)

Segoe UI的方面值几乎完全为0.5,因此如果您将其指定为font-size-adjust值,则字体大小不会更改:

body {
    font-family: "Segoe UI";
    font-size: 12px;
    font-size-adjust: 0.5; /* x-height = 12px × 0.5 = 6px */
}
Run Code Online (Sandbox Code Playgroud)

如果我们把它设置得更小,会发生什么?那么,浏览器会调整字体大小以使用等于font-size× 的x高度font-size-adjust.例如,下面将导致有效的字体大小为6px:

body {
    font-family: "Segoe UI";
    font-size: 12px;
    font-size-adjust: 0.25; /* x-height = 12px × 0.25 = 3px */
}
Run Code Online (Sandbox Code Playgroud)

这构成了我们攻击的基础.事实证明,font-size-adjust即使它超越了最小字体大小,Firefox也会受到尊重.(不言而喻,这是一个错误.)

演示

在Firefox中尝试使用最小字体大小设置.它利用了两个错误:上述font-size-adjust问题和通过报告呈现的字体大小的单独问题getComputedStyle.

您需要知道正在使用的字体的方面值,以便计算正确的font-size-adjust值,此方面值列表可能对您有所帮助.(或者,尝试在系统上安装的字体估计x高度.)

可是等等!更糟糕的是!

以上技术仅适用于Firefox.在Webkit中覆盖元素的最小字体大小甚至更容易,包括Safari,iOS Safari和Chrome - 只需使用非标准-webkit-text-size-adjust属性:

-webkit-text-size-adjust: none;
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这是另一个错误.text-size-adjust是一种非标准提案,旨在限制文本大小在移动设备上自动膨胀的程度.它不适用于桌面UA,更不用说防止手动调整文本大小.

最后一句话:它不会永远持续下去

错误最终得到修复.无论你的不负责任的设计师和PM想要你多少,你都无法覆盖浏览器的默认字体大小.迟早,人们会发现这些属性正在被利用,使每个人的网络变得更糟,有人会找到补丁,乐趣将会结束.

也就是说,如果你被迫这样做,我会全心全意地提倡一个解决方案,最终迫使有关各方重新考虑他们的决定.


¹提示:如果您的文本传达了任何人可以阅读的信息,那么您就不应该弄乱浏览器辅助功能设置.合法的案例包括纯粹的装饰效果(复杂的ASCII艺术,形状诗歌)和文档预览.

²更准确地说,从基线到中间高度的距离,这是大多数字体中字母x的高度.

  • @plang Aaah,我明白了!不过,可能有更好的方法.你考虑过使用`scale`变换吗?例如http://dabblet.com/gist/3798630.您可以使用更大的字体大小,并且应该在大多数现代浏览器中可靠地调整大小 - 尽管您需要多个供应商前缀.您甚至可以使用专有的`zoom`功能使用自定义样式表在IE <9中重现效果. (4认同)
  • 惊人.让我们希望有人在mozilla,google ...阅读此内容并在将来的版本中停止该错误. (3认同)
  • 只是快速说明"这是不可读的,并假设糟糕的设计".我需要这些非常小的字体用于webapp,你可以在某种缩略图中实时预览打印字母.文本在标准显示器上根本不可读(在Retina显示器上没有问题),但目标是为用户提供文本显示"位置"的视觉反馈.我不得不说我很惊讶字体大小受到浏览器的限制. (2认同)
  • 我来到这里是因为我使用的是Firefox 33,而且它似乎正在做这样的事情 - 要么Firefox中有另一个错误,要么StackOverflow正在利用这个(对不起,如果有任何拼写错误,我现在打字的是7px左右)虽然我的最小字体大小设置为14px - 搞砸了谁做这个;-)) (2认同)

Dus*_*ine -2

如果您在正文上设置字体大小属性,则应将其设置为默认字体大小。

body
{
    font-size: 12px;
}
Run Code Online (Sandbox Code Playgroud)

  • 这不会覆盖 Firefox 中的最低设置。 (6认同)