可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
The Design
The info widgets content should be vertically aligned in the middle as such:
The Coded Design
Windows: Chrome 20 / FF 14 / IE 9
Mac (Lion / Mt. Lion): Chrome / FF
The Code
HTML
<div class="info">
<div class="weather display clearfix">
<div class="icon"><img src="imgs/icons/thunderstorms.png" align="Thunderstorms" /></div>
<div class="fl">
<p class="temperature">82° / 89°</p>
<p class="conditions">Thunderstorms</p>
</div>
</div>
<div class="time display">
<p>11:59 <span>AM</span></p>
</div>
<div class="date display clearfix">
<p class="number fl">23</p>
<p class="month-day fl">Jun <br />Sat</p>
</div>
</div><!-- //.info -->
CSS
.info {
display:table;
border-spacing:20px 0;
margin-right:-20px;
padding:6px 0 0;
}
.display {
background-color:rgba(255, 255, 255, .2);
border-radius:10px;
-ms-border-radius:10px;
color:#fff;
font-family:"Cutive", Arial, sans-serif;
display:table-cell;
height:70px;
vertical-align:middle;
padding:3px 15px 0;
}
.display p {padding:0;line-height:1em;}
.time, .date {padding-top:5px;}
.time p, .date .number {font-size:35px;}
.time span, .display .month-day, .conditions {
font-size:14px;
text-transform:uppercase;
font-family:"Maven Pro", Arial, sans-serif;
line-height:1.15em;
font-weight:500;
}
.display .month-day {padding-left:5px;}
.icon {float:left;padding:0 12px 0 0}
.display .temperature {font-size:24px;padding:4px 0 0;}
.display .conditions {text-transform:none;padding:2px 0 0;}
.lt-ie9 .display { /* IE rgba Fallback */
background:transparent;
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#20ffffff,endColorstr=#20ffffff);
zoom:1;
}
The Issue
Looking at the above images of the coded design you can see how the appears to throw off the alignment. Upon further viewing, the text is being rendered outside of the element on the mac.
Windows
Mac
Note
I am embedding the fonts through a Google Web Fonts stylesheet.
Tested
I have tried the following:
- Set line-heights on every element.
- Set font-weights on every element.
- Set heights on every element.
- A combination of height/padding-top on every element.
- Used percentages/em/px for padding.
It seems that no matter what I try, the content will never center align perfectly across mac and pc.
My Question(s)
It is possible to achieve what I'm trying to do in a simplistic manner?
Should I forgo the display:table-cell;
route and set specific heights/paddings on each element and child? I will still run into padding/spacing issues between the two OS's.
What should I categorize this issue under? Line-height? Table-cells? OS? etc...
Thanks in advance!
回答1:
If it is resolved by using a different font (Arial) then the issue is with the font, not with the CSS. As you have noticed font rendering differs between browsers.
One possible solution could be to download the Cutive font (I see it has a SIL license) and then run it through the Font Squirrel font-face generator. In "Expert" mode there is an option to "Fix Vertical Metrics" which might be what you are looking for.
回答2:
I came across this problem with a custom font that had been created for a client's brand. I opened the TTF font in Font Forge. The way I created uniformity with rendering was to adjust the values in Element->Font Info->OS/2->Metrics.
Win Ascent/Descent values appear to work differently to the other values. I had the following values:
Win Ascent: 1000
Win Descent: 0
Typo Ascent: 750
Typo Descent: -250
HHead Ascent: 750
HHead Descent: -250
I changed the Win Ascent and Descent values to:
Win Ascent: 750
Win Descent: 250
(notice the positive value)
It appears you need to match the values except in my case I needed to invert the value of Win Descent to a positive one.
I have very limited knowledge about fonts but this did fix my problem. I generated the font as TTF and then ran it through a web font generator. The fonts now render identically on Mac/Windows 7/Android/iOS.
Hope this helps someone.
回答3:
My solution to this (very annoying problem):
Enjoy a victory over cross-browser/platform css ridiculousness.
回答4:
Part of the problem may be in the way Windows/Mac OSX renders fonts. Specifically those that are brought in via @font-face. Have you tried switching out which font formats are being used?
回答5:
I witnessed the same issue, with a custom font (Trade Gothic) served by FastFonts.
Windows did what it should have. But all other browsers on Linux based machines, Mac, iOS, Android suffered the problem.
My only solution was to match on the user agent, and namespace the body tag with .not-win
Then my styles could override the line-height specific to non-windows devices.
回答6:
Since you said in your comment to Jordan Brown that using Arial makes the alignment perfect, this is a font issue. It is likely that whoever created your font did not set the Ascent value properly.
If you have the TTF, upload it to FontSquirrel, select the "Expert" option and then keeping all default options. The one that fixes it I believe is "Fix Vertical Metrics." but I had issues when changing the defaults so I recommend keeping them as-is.
Now the font line height renders the same on MAC and PC (it worked for me).
回答7:
I also came across this issue. Luke's answer helped me. I had to adjust the fonts with FontForge using this settings:
Uncheck all "Is offset" checkboxes and also the "Really use Typo metrics" checkbox. I had most problems with Firefox and IE. Playing around with the value of "Win Descent" fixed it for those two browsers.
回答8:
The Mac correctly displays the lengths below the baseline as belonging to line height. It seems that OS X counts bottom up whereas Windows calculates from the Top.
Since 1em is the width of the capital M of the used font it is usually smaller than the font's overall height.
Have you tried setting the line-height to be the same as the element height? This usually helps solve these kind of problems.
回答9:
It's caused by font format history and Windows/Mac wars, there are different ways to compute line height and if they are not synced in the font you use things will go wrong on some systems
You need to fix your font (if the licensing allows it) or switch to one without this problem
See http://www.webfonts.info/node/330 (warning, this is an infomercial even if the tech info is true)
Better, not to make your design depend on an exact value here