Closed
Bug 158868
Opened 22 years ago
Closed 21 years ago
Bad interline spacing when minimum font size is set (need to scale line-height)
Categories
(Core :: CSS Parsing and Computation, defect, P1)
Tracking
()
RESOLVED
FIXED
mozilla1.5beta
People
(Reporter: mics, Assigned: dbaron)
References
(Depends on 1 open bug, )
Details
(Keywords: testcase)
Attachments
(6 files)
26.15 KB,
image/jpeg
|
Details | |
31.25 KB,
image/jpeg
|
Details | |
16.50 KB,
image/jpeg
|
Details | |
1.92 KB,
text/html
|
Details | |
2.91 KB,
patch
|
bzbarsky
:
review+
bzbarsky
:
superreview+
|
Details | Diff | Splinter Review |
745 bytes,
text/html; charset=UTF-8
|
Details |
When viewing page http://www.atptennis.com/en/default.asp, with minimum font size for "Western" set to anything except "None", text is shown with incorrect interline spacing. When manually decreasing font size (Ctrl '-'), lines begin to be shown on top of the previous lines, i.e. font size is not decreased but interline spacing is decreased. The same happens with some other sites as well: http://www.cnn.com/ (left sidebar) http://www.gazeta.ru/ http://websearch.about.com/ (left sidebar) I'm using Mozilla 1.1b Win2000
Reporter | ||
Comment 1•22 years ago
|
||
Reporter | ||
Comment 2•22 years ago
|
||
Reporter | ||
Comment 3•22 years ago
|
||
Comment 4•22 years ago
|
||
The page explicitly sets an interline spacing of 12px and a font size of 10px. Any font size bigger than 12px will cause the lines to overlap as you see. Text zoom scales both font sizes and line heights, so if your initial font size was bigger than 10px and you scale down eventually you will end up with overlapping text.....
Reporter | ||
Comment 5•22 years ago
|
||
The question is why it allows scaling down interline spacing when font size is not scaled down (because of minimum font size set)? Shouldn't setting minimum font size also limit interline spacing of the text to which this minimum font size is applied?
Updated•22 years ago
|
QA Contact: petersen → moied
Comment 6•22 years ago
|
||
I've seen the same behaviour in both the bulleted and numbered list in http://support.microsoft.com/default.aspx?scid=kb;en-us;Q235356 Viewing the page directly in the browser shows the page in a small font, with too little spacing so you cannot read it. If I copy the source into the composer, the preview shows a larger font (Times New Roman) and I have no spacing problems. My preferences settings are serif: Times New Roman 16. Sans Serif Arial and Allow documents to use other fonts is checked. Setting this to a large font does display the large fonts, but does not eliminate the spacing problem.
Assignee | ||
Comment 7•22 years ago
|
||
Taking bug. I think the solution to this is to do something similar to the minimum font size as I did for text zoom in bug 41847. However, for the line height, I think the solution is to scale the line height proportionally when it's specified in physical or 'px' units and we're applying a minimum font size to the font.
Assignee: attinasi → dbaron
Status: UNCONFIRMED → NEW
Component: Layout → Style System
Ever confirmed: true
Priority: -- → P1
QA Contact: moied → ian
Assignee | ||
Comment 8•22 years ago
|
||
What makes this difficult is that the font min size is per lang-group. (font.min-size.{fixed,variable}.<lang>)
Comment 9•22 years ago
|
||
The reason for having different minimum sizes for different languages is that different languages have different glyph complexity. Latin glyphs are fairly simple and are often readable down to 6-8px. Kanji (Chinese/Japanese/Korean) can be much more complex and typically become unreadable below 10-12px. There is no number that is suitable for both.
Assignee | ||
Comment 10•22 years ago
|
||
Perhaps there's a way we can propagate the information from font selection out to the layout code and then consider the line height in terms of half-leading (half the computed 'line-height' minus the computed 'font-size').
Comment 11•22 years ago
|
||
Actually, the value being modified on the Fonts preference dialog is: font.minimum-size.<lang>. It is handled/propagated by the Style System directly, and so further action can be taken there if necessary. http://lxr.mozilla.org/seamonkey/search?string=minimumFontSize (The old one, font.min-size.{fixed,variable}.<lang>, is something that bstell seems attach to.)
Comment 12•22 years ago
|
||
I particularly attached to either one as long as we don't break things too much for users.
Comment 13•22 years ago
|
||
steps: 1. display testcase with 100% original size 2. use "ctrl + -" to reduce text size the text size is reduced without any distortion till 7% text size. Text starts getting distorted from 4% text size onwards. noted that list items do not get affected with the size reduction
Assignee | ||
Updated•22 years ago
|
Severity: normal → major
Status: NEW → ASSIGNED
Target Milestone: --- → mozilla1.3alpha
Comment 14•22 years ago
|
||
There are also other related cases where using a minimum font setting creates problems because Mozilla changes only the font size and does not scale any other component in the page to reflect the overridden font size value. For example, currently there are search fields and drop-down menus on http://www.bn.com/ the height of which the webmaster has fixed to 18px using CSS. When viewing this page with a relatively large minimum font size, say 20pt, the form controls are illegible because the fonts used in them are too large for the text to be completely visible within the control. Mozilla should override the CSS rule that sets the form control size and enlarge the form controls so that the text fits into them.
Comment 15•22 years ago
|
||
Even text zoom has troubles with http://www.bn.com/. The comprehensive fix is going to come from the full zoom bug 4821.
Comment 16•21 years ago
|
||
In phoenix, I have "Always use my fonts" checked and Minimum font size set to 18. I sometimes get the bad interline spaceing problem. To fix, I've inserted the following lines into userContent.css: a { line-height: normal !important; } font { line-height: normal !important; } p { line-height: normal !important; } li { line-height: normal !important; } td { line-height: normal !important; } body { line-height: normal !important; }
Assignee | ||
Updated•21 years ago
|
Summary: Bad interline spacing when minimum font size is set → Bad interline spacing when minimum font size is set (need to scale line-height)
Target Milestone: mozilla1.3alpha → mozilla1.5beta
Comment 17•21 years ago
|
||
*** Bug 217791 has been marked as a duplicate of this bug. ***
Assignee | ||
Comment 18•21 years ago
|
||
*** Bug 219631 has been marked as a duplicate of this bug. ***
Updated•21 years ago
|
Flags: blocking1.5? → blocking1.5-
Comment 20•21 years ago
|
||
Would it be possible to add a "Minimum Line Height" preference to go along with the "Minimum Font Size"?
Assignee | ||
Comment 21•21 years ago
|
||
There's no need for an additional preference -- we just need to scale the line-height when the minimum font size applies.
Assignee | ||
Comment 22•21 years ago
|
||
Assignee | ||
Comment 23•21 years ago
|
||
This testcase shows the bug fixed by the typo the patch fixes (changing aInherited to inherited).
Assignee | ||
Updated•21 years ago
|
Attachment #135745 -
Flags: superreview?(bz-vacation)
Attachment #135745 -
Flags: review?(bz-vacation)
Assignee | ||
Updated•21 years ago
|
Attachment #135744 -
Flags: superreview?(bz-vacation)
Attachment #135744 -
Flags: review?(bz-vacation)
Assignee | ||
Updated•21 years ago
|
Attachment #135745 -
Flags: superreview?(bz-vacation)
Attachment #135745 -
Flags: review?(bz-vacation)
Comment 24•21 years ago
|
||
Comment on attachment 135744 [details] [diff] [review] patch >Index: nsRuleNode.cpp >+ mPresContext->GetCachedIntPref(kPresContext_MinimumFontSize, >+ minimumFontSize); >+ if (minimumFontSize > 0 && !IsChrome(mPresContext)) { >+ // If we applied a minimum font size, scale the line height by >+ // the same ratio. (If we *might* have applied a minimum font >+ // size, we can't cache in the rule tree.) >+ inherited = PR_TRUE; >+ const nsStyleFont *font = aContext->GetStyleFont(); >+ lh = float(lh) * float(font->mFont.size) / float(font->mSize); Wouldn't it make sense to do this scaling any time font->mFont.size is not the same as font->mSize, though? Alternately, is there any way we can end up with the min font size passed into this function? That business about getting the cached pref and then checking for chrome is not all that fast.... Other than this bit, looks great.
Assignee | ||
Comment 25•21 years ago
|
||
I think the only way the two can be different is if there's a min font size. See |SetFont|, which does: // We want to zoom the cascaded size so that em-based measurements, // line-heights, etc., work. if (zoom) aFont->mSize = nsStyleFont::ZoomText(aPresContext, aFont->mSize); // enforce the user' specified minimum font-size on the value that we expose aFont->mFont.size = PR_MAX(aFont->mSize, aMinFontSize); Getting the cached pref from the pres context is quick. This will be a tiny performance hit for when the font is set -- but no worse than what ComputeFontData already does. (Perhaps the solution to both problems is a GetMinFontSize on the pres context that already has the equivalent of |IsChrome| done, but I'd rather do one thing at a time.)
Comment 26•21 years ago
|
||
> I think the only way the two can be different is if there's a min font size.
Then why bother doing that check, if multiplying by that ratio is a no-op
whenever the check is false? Or rather, why not make that check be a simple
if (font->mFont.size != font->mSize)
?
One other question, out of curiousity.... What is font->mSize if I do
"font-size: 0" in a stylesheet?
Assignee | ||
Comment 27•21 years ago
|
||
The reason to do the minimum font size pref check is to know whether we can cache in the rule tree -- although another possibility would be to just explicitly say that we can never cache the text struct in the rule tree.
Comment 28•21 years ago
|
||
I would just go with: if (font->mFont.size != font->mSize) { // these two are different is if there's a min font size inherited = true; // don't cache ... }
Assignee | ||
Comment 29•21 years ago
|
||
The suggestion in comment 28 is incorrect, since it could cause us to cache a struct in the rule tree in a case where the font size is large (no difference) and then use that cached node when the font size is small rather than recomputing. (That is somewhat unlikely to happen, but considering that this whole thing is to work around when authors do things they shouldn't, I wouldn't be surprised to see it.)
Comment 30•21 years ago
|
||
Comment on attachment 135744 [details] [diff] [review] patch Oh, I see. You want to avoid caching no matter whether the min font size actually affected the font size in this case... r+sr=bzbarsky, then; I finally understand the comment. ;)
Attachment #135744 -
Flags: superreview?(bz-vacation)
Attachment #135744 -
Flags: superreview+
Attachment #135744 -
Flags: review?(bz-vacation)
Attachment #135744 -
Flags: review+
Comment 31•21 years ago
|
||
Well, the reason I was curious about a preference for minimum line-height is for cases where the size is fine but the author has spaced things too closely for my taste. I seem to see that a lot.
Comment 32•21 years ago
|
||
* { line-height: normal ! important } in userContent.css will handle that, no?
Assignee | ||
Comment 33•21 years ago
|
||
Fix checked in to trunk, 2003-11-17 21:53 -0800.
Status: ASSIGNED → RESOLVED
Closed: 21 years ago
Resolution: --- → FIXED
Comment 34•21 years ago
|
||
*** Bug 203888 has been marked as a duplicate of this bug. ***
Comment 35•20 years ago
|
||
*** Bug 252458 has been marked as a duplicate of this bug. ***
You need to log in
before you can comment on or make changes to this bug.
Description
•