FireFox 3 line-height
Asked Answered
I

4

10

Firefox 3 has introduced a new behavior in which line-height, when unset, differs from how other browsers render it. Thus, a critical section maybe render too high in that browser. Setting a global percentage doesn't work, since it's basis is different. Setting a unitless value such as "1" doesn't work either. Is there some way to normalize this dimension?

Inexpugnable answered 21/1, 2009 at 17:43 Comment(2)
Perhaps an example page or something? I haven't had this problem.Boykins
Indeed. No such problem here; question is insufficiently specific.Forestaysail
S
11

The computed value of line-height: normal varies between platforms, browsers (and different versions of the same browser, as you state), fonts, and even different sizes of the same font (see Eric Meyer's article).

Setting a unitless value such as...

body {line-height: 1.2;}

...should work to normalize the spacing between browsers. If this is not working, can you provide a more-detailed description of your stylesheet?

It's hard (impossible?) to get "pixel-perfect" results, but in order to get results that are as predictable as possible, I try to use a line height that produces a nice round value when multiplied by the font-size. We can't know the user agent's default font size, but 16 pixels is somewhat common.

body 
{
    font-size: 100%;
    line-height: 1.5;
}

If the user agent's starting font size is indeed 16 pixels then the line height of 1.5 comes out to a nice, even 24 pixels. Users can and do change the default font size or the page zoom, though, and different browsers have different methods of scaling the page. Nevertheless, I think I've had reasonable success for a majority of the users. If I can't make the line height come out exactly, then I shoot for a little above the integer rather than a little below, because some browsers seem to truncate values rather than round them.

Also, note that if you use a percentage for the line height, it behaves differently when the value is inherited.

body 
{
    font-size: 100%;
    line-height: 150%;
}

p
{
    font-size: 75%;
}

Starting from a base font size of 16 pixels, the line height will be 24 pixels. Within a <p> element the font size becomes 12 pixels, but the line height does not become 18 pixels, rather it remains 24 pixels. This is the difference between line-height: 1.5 and line-height: 150%. When body {line-height: 1.5;} is used, the line height for <p> is 18 pixels.

Seagirt answered 21/1, 2009 at 19:35 Comment(2)
Yes, setting the attribute as you've shown helps, as does line-height: 120%. This does not, however, product pixel perfect results. Maybe this is as good as it gets. Anyone know why Firefox changed this behavior?Inexpugnable
I believe the changes to Firefox relate to improvements in their rounding algorithm, so FF3's computed results should more-closely match Mozilla's intentions.Seagirt
J
2

There is absolutely nothing you can do. Every browser has there way of rendering CSS and content. You can use a "Master" reset (as cowgod suggests), but even then, that's not ultimately going to fix the alignment issues. They are there because of actual rendering engine. Apple the CSS to your existing website and test it. Tell me if it makes pixel perfect across the board. It won't.

The only way to actually achieve pixel perfection is to implement specific CSS for specific browsers. Mozilla has the @-moz-doc, IE has it's own hacks, but none of these are part of the W3C specs, and we all know standards are important. So not much of an option.

As David said above, it's hard. I'm inclined to think impossible actually. And I've spent hours trying, trust me! Almost went mad more times than I care to count. It's a hard pill to swallow, but there is just no way around it, unless everyone used the same browsing engine (which would actually take the internet a great leap forward in my opinion). I mean, it wouldn't be that hard to slap whatever interface you want on your browser, so long as you plugin [gecko][webkit][presto][trident][whatever] to handle the backend... Since the good ones are all open source, you could merge the projects and really get going. People need to learn to play nice together ;)

Jurist answered 24/1, 2010 at 9:32 Comment(0)
O
0

You CAN solve this:

Set line height to 1, then zero in your text using padding-top and padding-bottom, and set height to auto.

.zeroed_in_element {
    padding: 4px 2px 5px 2px;
    height: auto;
    line-height: 1;
} 
Opine answered 7/5, 2012 at 16:22 Comment(0)
A
-2

You should always "reset" styles to eliminate all browser inconsistencies with element styles.

I like Eric Meyer's CSS Reset. Yahoo has one also.

Aery answered 21/1, 2009 at 17:56 Comment(2)
What would the reset value be in this case? 0? Then add line-height to ever text container? I think this is a different type of issue from margin and padding.Inexpugnable
If you're going to use the Eric Meyer reset, make sure you use the most current version - meyerweb.com/eric/tools/css/reset/index.htmlPadova

© 2022 - 2024 — McMap. All rights reserved.