Open
Bug 175415
Opened 22 years ago
Updated 2 years ago
multiple generic fonts (font: monospace,serif) cause unexpected variation of font-size
Categories
(Core :: CSS Parsing and Computation, defect, P4)
Core
CSS Parsing and Computation
Tracking
()
NEW
People
(Reporter: felipe, Unassigned)
References
()
Details
(Keywords: css1, testcase, Whiteboard: [CSS1-5.2.2])
Attachments
(2 files)
User-Agent: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2b) Gecko/20021016
Build Identifier: Mozilla/5.0 (Windows; U; Win98; en-US; rv:1.2b) Gecko/20021016
Compare this page to http://fgmusic.org/~fgasper/mass_pts/header2.html. The only
difference between the two is that the regular one has <body style="font-family:
monospace, generic"> declared, whereas header2.html only has "monospace" listed.
Moz should be taking monospace from both, but instead it appears to use
"generic", which yields a bigger monospace font for me. Works correctly in IE.
Reproducible: Always
Steps to Reproduce:
1.
2.
3.
Comment 1•22 years ago
|
||
Hmmm. "generic" is not a generic font-family per the CSS2 specification, so that
isn't doing you any good. But whitespace is not required after the comma in the
listing of font-families, as I read CSS2, so both of the documents should have
the generic font-family "monospace" applied, AIUI. dbaron?
Assignee: asa → dbaron
Status: UNCONFIRMED → NEW
Component: Browser-General → Style System
Ever confirmed: true
QA Contact: asa → ian
Summary: Moz won't take "monospace" in CSS → Variation in computed font-size on monospace font
I don't see a problem. If there is one, it seems like it would be in the
windows font code. ->shanjian
Assignee: dbaron → shanjian
Keywords: css1
Comment 3•22 years ago
|
||
Actually, this is a rulenode problem, and it's XP. Steps to reproduce:
1) Open preferences
2) Set font size for "variable-width" to 16px
3) Set font size for "fixed-width" to 10px
4) Open the testcase I'm about to attach.
The problem is the code in nsRuleNode::ComputeFontData that sets the size and
such based on the "generic family". Currently it does:
nsFont::GetGenericID(font->mFont.name, &generic);
Of course when there are multiple families listed font->mFont.name is the full
list, so "generic" is false. We then end up applying the "normal" font size
instead of the "fixed-width" one.... (this explains some trouble we had once
with -moz-fixed not being recognized for sizing purposes if any other
font-families were listed, btw).
So the problem is that the whole setup is flawed. There could be multiple
generic families listed in the decl, etc.
Perhaps Hixie is right and we should eliminate the "two different font sizes"
thing, except it's very convenient from a user perspective....
If we knew at style-resolution time which family we would use, we could use that
information... but we don't know that at that point, do we?
Assignee: shanjian → dbaron
OS: Windows 98 → All
Hardware: PC → All
Comment 4•22 years ago
|
||
Comment 5•22 years ago
|
||
One way to fix this would be to make '-moz-fixed' not a font-family but a
special font shorthand like we do for '-moz-dialog', setting:
font-size: 1em
font-family: monospace
font-size-adjust: /x/
...where /x/ is the ratio of the default font size to the fixed font size.
Or we could just drop the whole multiple font size idea.
Comment 6•22 years ago
|
||
Actaully, this has nothing to do with -moz-fixed. This is the standard CSS
"monospace" font-family. If it occurs alone, we use the "monospace" font size
from prefs; otherwise we use the "everything else" font size.
Comment 7•22 years ago
|
||
That should definitely change then; 'font-family: monospace' shouldn't cause any
change of 'font-size' and should not affect 'font-size-adjust'.
Dupe. It is the same issue as bug 78517, and is one aspect of bug 79074. See
also bug 105297.
Parsing is needed to figure out the generic font of a font-family list at style
resolution. Not much incentive to do that since style resolution is often blamed
for speed.
Perhaps the speed isn't that bad these days, and parsing could be done. Or
perhaps the fontdata could be changed so that it keeps an atom list of font
names. This way, the parser does the parsing once, allowing anybody to lookup
the list without re-parsing.
<p style="font-family: 'No such family, man', monospace">Some text (bigger)</p>
Also, this illustrates how the problem is much trickier than it seems. In the
above example, it is clear that the monospace font is what is going to be
ultimately used by the font subsystem when it realizes the actual fonts. But if
the style resolution has to check for existence of the fonts in each font-family
list in order to make much finer decisions, then it is just going to crawl (in
the current setup where there is no internal db/history of fonts).
Comment 10•22 years ago
|
||
Yet another reason not to have any sort of magic here.
Comment 11•22 years ago
|
||
Worse yet: "font-family: sans-serif, monospace"....
Hixie, feel free to suggest an alternate approach. Perhaps we need to let the
user select font-size-adjust for the different generic font-families? That
would be arcane to the point of being ridiculous. Can Mozilla calculate
font-size-adjust based on the font metrics somehow?
Priority: P3 → P2
Comment 12•22 years ago
|
||
Hey, I have a radical idea here, why don't we do what the spec says and only
have one font size?
Priority: P2 → P3
Updated•22 years ago
|
Priority: P3 → P2
Comment 13•22 years ago
|
||
> Worse yet: "font-family: sans-serif, monospace"....
Actually, it isn't any worse (the common root problem is the parsing -- and the
existence constraint).
> Hixie, feel free to suggest an alternate approach. Perhaps we need to let the
> user select font-size-adjust for the different generic font-families? That
> would be arcane to the point of being ridiculous.
There are already hidden prefs to do that :-) But they only work on Windows.
> Can Mozilla calculate font-size-adjust based on the font metrics somehow?
Yes. If desired, the font subsystem can be made to pick automatic values on the
fly to force a perfect match of all 'x' across _individual_ fonts. See the
second line in the demo on attachment 38875 [details] on bug 74186 (which is the bug that
you might read if you are interested in getting more background on the issue).
People want different sizes because certain fonts are designed very differently.
As attachment 38875 [details] shows, the text on the first line is unreadable with the
cursive font if it is rendererd with the same actual size as the Verdana font.
Conversely, the Verdana text would be huge if the (common) size was chosen so as
to make the cursive text readable. Summary: it is not going to be acceptable to
set a single size without means to compensate in certain fonts.
The reason why Hixie's idea of using the font-size-adjust hasn't materialized so
far is because font-size-adjust is only implemented on Windows. Hence rather
than switching to the spec way and breaking everybody else, we had little choice
than emulating by other means which have their own limitations. If other
platforms can implement font-size-adjust, then that will provide a common
foundation to try other things.
Comment 14•22 years ago
|
||
So could you provide a brief rundown in what's involved in implementing
font-size-adjust? It sounds like it's implemented in the platform-specific
font-selection code? Any way to hoist it out of there?
Comment 15•22 years ago
|
||
Unfortunately, it cannot be factored out because it is deadly tied with
font-switching (i.e., glyph lookup).
<excerpt from bug 74186 comment #24>
[...]
If you have some peculiar scenarios, such as:
<div style="font-family: HebrewFont, RomanFont; font-size: 16px;
font-size-adjust: 1.0;">
Some Hebrew Text Some Roman Text
</div>
...and the HebrewFont has an aspect ratio of 2, and the RomanFont has
an aspect ratio of 0.5, and the relevant pieces of text are drawn in
their respective fonts after glyph lookup, then the computed font
size will be 16px all the way through, but "Some Hebrew Text" will
have an actual font size of 8px, and "Some Roman Text" will have an
actual font size of 32px.
[...]
</excerpt>
Comment 16•22 years ago
|
||
Instead of multiple font sizes, we should just auto-detect the aspect ratio of
the user's main choice font (call it 'x'), and then synthesise the following
rule in the user's preferences stylesheet:
:root { font-size-adjust: x; }
That would automatically take care of making things like <pre> the right size.
We could even do that before other platforms support font-size-adjust, since it
basically falls back on what I've been suggesting for all platforms, which is to
drop this whole notion of multiple font sizes.
Comment 17•22 years ago
|
||
Ian, perhaps my understanding of font-size-adjust is faulty.... how does :root
rule solve the problem in the following situation?
<html>
This is some text. It should be serif, not too big and readable -- default font.
<pre>
This is some text in pre. It should be monospace, not too big, and readable --
default monospace font
</pre>
<p style="font-family: fantasy">This is a fancy script font that's probably hard
to read at small sizes. This part should be readable too</p>
</html>
It seems to me that we should be applying the calculated font-size-adjust for a
generic family to _any_ element to which we apply a generic family....
I agree that we can (and should) put the font-size-adjust stuff in place and
test it on Windows before it's even implemented on other platforms...
Comment 18•22 years ago
|
||
font-size-adjust inherits.
Comment 19•22 years ago
|
||
Ah. I see... I just re-read that part of the spec, and that _should_ indeed
work....
Comment 20•22 years ago
|
||
To test, just (manually) add Hixie's rule to html.css for a moment:
:root { font-size-adjust: 0.55 } (or xheight/font-size in general)
Comment 21•22 years ago
|
||
I've been using that rule for several months now with no ill effects.
Assignee: dbaron → nobody
QA Contact: ian → style-system
Comment 22•17 years ago
|
||
Hello all,
I read carefully all of the comments in this bug and then the summary and description of bug 205537 and I am convinced this bug and bug 205537 are *_exactly about the same issue_*. I believe+wish this bug could be resummarized to better reflect the issue here.
Updated•17 years ago
|
Summary: Variation in computed font-size on monospace font → multiple generic fonts (font: monospace,serif) cause unexpected variation of font-size
Comment 24•17 years ago
|
||
Initial conditions or steps before loading this testcase:
1- Go to Tools/Options.../Content tab/Fonts and colors section/Advanced.../
2- Set proportional to serif and then proportional default font-size to 16
3- Set fixed width default font-size to 10
4- Set minimal font-size to none
Note that CSS1 Test Suite: 5.2.2 font-family test page at
http://www.w3.org/Style/CSS/Test/CSS1/current/sec522.htm
is also using the same code for the first 2 sentences of this testcase.
Updated•17 years ago
|
Whiteboard: [CSS1-5.2.2]
Comment 27•15 years ago
|
||
(In reply to comment #25)
> Retest once bug 216456 lands, please.
seems that this hasn't been resolved, considering bug 518746 was just reported as being the same.
Priority: P2 → P4
Comment 28•12 years ago
|
||
Any updates on this? Do this change and/or lobby Webkit to change their default before Presto dies off? And maybe also change this as a forerunner to bug 468169 which might become relevant again once XP dies off?
Updated•2 years ago
|
Severity: normal → S3
Comment 29•2 years ago
|
||
The severity field for this bug is relatively low, S3. However, the bug has 12 votes.
:emilio, could you consider increasing the bug severity?
For more information, please visit auto_nag documentation.
Flags: needinfo?(emilio)
Comment 30•2 years ago
|
||
This is legacy behavior that we're probably unlikely to change.
Flags: needinfo?(emilio)
You need to log in
before you can comment on or make changes to this bug.
Description
•