Closed
Bug 57234
Opened 24 years ago
Closed 24 years ago
a -> font leads to wrong color, if "always use my color"=true
Categories
(Core :: Layout, defect, P3)
Tracking
()
VERIFIED
FIXED
mozilla0.6
People
(Reporter: BenB, Assigned: attinasi)
References
Details
Attachments
(3 files)
221 bytes,
text/html
|
Details | |
1.88 KB,
patch
|
Details | Diff | Splinter Review | |
1.89 KB,
patch
|
Details | Diff | Splinter Review |
If a <font> element (no matter if it has attributes) is a child of a :link and
"always use my colors" pref is sat, the foreground color, not link color, is
used, i.e. layout "forgets" that this is a link.
Reproduce:
1. Set color prefs to unusual values, but observe document colors
2. Open testcase
3. Set "always use my colors" pref to true
4. Check testcase again
Actual result:
After step 2: Everything is as expected.
After step 4: All text but "Music3" has your foreground color (not link color).
("Music3" does have your link color.)
Expected result:
After step 4: Music1,2,3 have your link color, Music4,5 have your foreground
color.
Reporter | ||
Comment 1•24 years ago
|
||
This would be fixed by my suggestion on bug 40340:
> And
> shouldn't the existing rule set the background on the root element to the pref
> and set all the other backgrounds to transparent?
In other words, the rules you want to create should look like:
* { color: <preferred color> ! important; background: transparent ! important; }
:root { background: <preferred background> ! important; }
:link { color: <preferred link color> ! important; }
:visited { color: <preferred visited color> ! important; }
Er, ignore my previous comment. The problem is you need:
:link, :link *
:visited, :visited *
as the selectors. As painful (for performance) as that may be...
No, now that I'm awake...
There's a better way, which is to do what I described in my first comment,
except for color. Set the default on the root, and use 'inherit'. Doing the
analogous thing for background (default/'transparent') might be good too, but
I'm not sure how form controls will react.
Assignee | ||
Comment 6•24 years ago
|
||
I think I see what you are saying. So if the parts in [] are only for when the
'ignore document colors' is set:
[:root { color: <pref> !important; background: <pref> !important; }]
[* { color: inherit !important; background: transparent !important; }]
:link { color: <pref> [!important]; }
:visited { color: <pref> [!important]; }
:link, :visited { text-decoration: <pref> !important; }
So the root element gets the colors set on it, and everything else inherits the
foreground color, and uses a transparent background. This means background
images are lost too...
Links and visited links get their foreground color set, but still use the
transparent background color. And of course, links are underlined or not
according to the pref.
I'm trying it now. Thanks.
Assignee | ||
Comment 7•24 years ago
|
||
Assignee | ||
Comment 8•24 years ago
|
||
Assignee | ||
Comment 9•24 years ago
|
||
Setting dependencies on related bugs also fixed by patch: not really dependent
but related.
Reporter | ||
Comment 10•24 years ago
|
||
> So if the parts in [] are only for when the 'ignore document colors' is set:
> [:root { color: <pref> !important; background: <pref> !important; }]
Did you really mean that? If you do that, the document color will be ignored
completely all the time, if "always use my color" is false, not? Don't you mean
:root { color: <pref> [!important]; background: <pref> [!important;] }
?
Reporter | ||
Comment 11•24 years ago
|
||
The patch fixes for me the problem originally reported, and the realworld
testcase through which I found the bug. Same for bug 57240 and bug 57316.
The reason why the patch works though no :root color is sat (see last comment)
is that IIRC we set also this pref at another place already. attinasi, what
about removing this other place and just using what I suggested for the trunk?
This would reduce redundancy.
Assignee | ||
Comment 12•24 years ago
|
||
The reason the patch works when the :root {...} is not set is that the default
colors are applied without style rules. When no style rules specifying a color
are found, the style context gets the initial colors from the pref.
http://lxr.mozilla.org/seamonkey/source/layout/base/src/nsStyleContext.cpp#242
That is where the styleColor structures is initialized and it gets the default
colors from the presContext and directly sets them into the style context data.
I realy don't want to change this behavior now, since it has been that way for a
long time, and it works, and I don't know the risks of changing it. It is
something to think about, though...
Reporter | ||
Comment 13•24 years ago
|
||
You are the master... :)
Assignee | ||
Comment 14•24 years ago
|
||
Master of EViL, thank you ;)
Comment 15•24 years ago
|
||
Marc: actually, according to Pierre (ccing), that is _not_ where the colour is
actually set. It turns out we do some voodoo that nobody has been able to
explain yet. This would be an even better reason not to touch it for now...
Assignee | ||
Comment 16•24 years ago
|
||
Wrong time to be messin' with voodoo, I agree.
I wonder if it has something to do with the
HTMLStyleSheet::SetDocumentBackgroundColor and
HTMLStyleSheet::SetDocumentForegroundColor methods
(http://lxr.mozilla.org/seamonkey/source/layout/html/style/src/nsHTMLStyleSheet.
cpp#1199)?
Comment 17•24 years ago
|
||
See my comments from [2000-10-02 16:03] in bug 19329 about the document
background color.
Depends on: 19329
Assignee | ||
Comment 18•24 years ago
|
||
Can I get a review or two on this patch for a landing on the trunk? It makes it
much nicer. Thanks!
Reporter | ||
Comment 19•24 years ago
|
||
Marc, I can't review (nlot qualified), but, as I said, the patch works fine for
me, and fixes all the bugs I filed.
r=dbaron
... assuming you've tested that form controls, frames, and scrollbars are happy.
Assignee | ||
Comment 22•24 years ago
|
||
Now that you mention it, David, I did have to modify the rules for form controls
:-) The little down-arrow on the select was getting obliterated by the
'background: transparent' rule, so I changed it to 'background-color:
transparent'. This way, background *images* on elements will be preserved while
the background color will be transparent. I think it is better to leave the
background images alone, do you agree?
Assignee | ||
Comment 23•24 years ago
|
||
But that leaves authors' background images lying around -- probably exactly what
people using this pref would want to get rid of. It could easily make a page
illegible (since you're forcing the color).
I think the real solution is in the select -- perhaps the select's arrow
background-image needs to be !important? (And perhaps we need to make
UA-stylesheet !important the highest -- to be used sparingly by us only.)
Assignee | ||
Comment 25•24 years ago
|
||
I'm not so sure I agree that are better off clearing all of the background images...
Clearly there are some instances where the background-images will make things
look terrible, possibly unusable by some people. But then again, forcing a
user's preferred colors should not eliminate content, and some background images
are used to show content (I'm thinking of cases where a background image is
indicating that something is a draft, or an example, or an uncontrolled
document). I guess authors could make the background-images !important if they
wanted to ensure that they were seen, but how many really will?
I agree that making the select background-image rule important would be
sufficient if we are willing to swallow the possible content-loss concern. I'll
see if Rod S. has any feelings on that - maybe some authors want to change the
background-image on the select's button???
Authors shouldn't use background images for content.
Comment 27•24 years ago
|
||
Presentational style shouldn't be used for content, and that includes background
images. 4.x doesn't show background images when `always use my colors' is on (and
nor does it show them when the `Show Images' command is selected). I would
imagine that a considerable proportion of those people who have `always use my
colors' choose white on black, for example, and that would be disastrous if a
white or nearly-white background image was loaded.
If it helps, you could change the rendering of SELECT widgets so that they are
a single button (like they are in Mac OS, and GTK, and Motif, and OS/2, and
MUI ...), rather than having two sections with different appearance but the same
behavior (like they are in Windows).
Reporter | ||
Comment 28•24 years ago
|
||
I agree with dbaron and mpt. CSS is not content, by definition. If a webpage
uses CSS for content, this is a bug in the webpage.
Assignee | ||
Comment 29•24 years ago
|
||
Great input, thanks. In addition to the *original* patch (11/19/00), I need to
change html.css to make the arrows on select buttons stick:
select > input[type="button"] {
position: static ! important;
white-space: nowrap;
- background-image: url("arrow.gif");
- background-repeat: no-repeat;
- background-position: center;
+ background-image: url("arrow.gif") !important;
+ background-repeat: no-repeat !important;
+ background-position: center !important;
width: 12px;
height: 12px;
-moz-user-focus: none;
}
select > input[type="button"]:active {
- background-image: url("arrowd.gif");
+ background-image: url("arrowd.gif") !important;
}
(note: the second rule for the active button never seems to get applied for some
reason, but I want to make the rule correct anyway in case is does start to apply).
I'll need approval from Rod S. for the html.css changes, and David, your review
would be most welcome too.
Scanning html.css for other background rules, I see that there are several form
controls that set their background-color to special values (ThreeDHighlight,
WindowColor, or -moz-field, for example) and these will be overridden by the
preference colors too. These include input, textarea, select, radio, checkbox,
and buttons. Currently, these all get the background color set in the user's
preference. If this behavior is contentious, we will need to open up another
bug. I don't think we really want to make those all !important, as clearly we
want to allow authors to change the background color of a textarea, for example.
Comment 30•24 years ago
|
||
(dbaron: ua.css ! important overrides everything already IIRC.)
Assignee | ||
Comment 32•24 years ago
|
||
Rod's input vis a vis making the select button's image ruls important:
Rod Spears wrote:
I think it should be important, if they mess with it, it is non-standard.
Reporter | ||
Comment 33•24 years ago
|
||
Did the patch go into the branch yet (with the original patch that coused the
regression)? I assume no.
Keywords: rtm
Comment 34•24 years ago
|
||
sr=buster
Assignee | ||
Comment 35•24 years ago
|
||
This patch has not gone anywhere yet. I see Steve just sr'd it, and dbaron r'd
it and rod OK'd the html.css change for the select button, so I guess it is
ready to rock 'n roll (on the trunk anyway).
Assignee | ||
Comment 36•24 years ago
|
||
Fix checked into trunk.
(nsPResShell.cpp, html.css)
Status: ASSIGNED → RESOLVED
Closed: 24 years ago
Resolution: --- → FIXED
You need to log in
before you can comment on or make changes to this bug.
Description
•