70

デザイン

情報ウィジェットのコンテンツは、次のように中央に垂直に配置する必要があります。

オリジナルのPSDデザイン


コード化された設計

Windows:Chrome 20 / FF 14 / IE 9

Windowsのコード化された設計

Mac(ライオン/ライオン山):クローム/ FF

Macコードデザイン


コード

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&deg; / 89&deg;</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;
    } 

問題

コード化されたデザインの上記の画像を見ると、がどのように配置を外しているように見えるかがわかります。さらに表示すると、テキストはMacの要素の外側にレンダリングされています。

ウィンドウズ

Windowsのコード化された設計の調整

マック

Macコード化されたデザインの配置


ノート

GoogleWebFontsスタイルシートを使用してフォントを埋め込みます。


テスト済み

私は以下を試しました:

  • すべての要素に行の高さを設定します。
  • すべての要素にフォントの太さを設定します。
  • すべての要素に高さを設定します。
  • すべての要素の高さ/パディングトップの組み合わせ。
  • パディングに使用されたパーセンテージ/em/px。

私が何をしようとしても、コンテンツがMacとPCで完全に中央揃えになることは決してないようです。


私の質問

私がやろうとしていることを単純な方法で達成することは可能ですか?

ルートを放棄して、display:table-cell;各要素と子に特定の高さ/パディングを設定する必要がありますか?それでも、2つのOS間でパディング/間隔の問題が発生します。

この問題を何に分類する必要がありますか?行の高さ?テーブルセル?OS?等...

前もって感謝します!

4

11 に答える 11

37

別のフォント (Arial) を使用して解決した場合、問題は CSS ではなくフォントにあります。お気づきのように、フォントのレンダリングはブラウザーによって異なります。

考えられる解決策の 1 つは、Cutive フォントをダウンロードして (SIL ライセンスがあるようです)、それを Font Squirrel フォント フェイス ジェネレーターで実行することです。「エキスパート」モードには、探しているものである可能性がある「垂直メトリックを修正する」オプションがあります。

于 2013-04-07T08:19:32.867 に答える
9

クライアントのブランド用に作成されたカスタム フォントでこの問題に遭遇しました。Font Forge で TTF フォントを開きました。レンダリングで均一性を作成する方法は、Element->Font Info->OS/2->Metrics の値を調整することでした。

Win Ascent/Descent の値は、他の値とは異なる動作をしているように見えます。次の値がありました。

Win Ascent: 1000

Win Descent: 0

Typo Ascent: 750

Typo Descent: -250

HHead Ascent: 750

HHead Descent: -250

Win Ascent と Descent の値を次のように変更しました。

Win Ascent: 750

Win Descent: 250(正の値に注意してください)

私の場合を除いて、値を一致させる必要があるようです。Win Descent の値を正の値に反転する必要がありました。

フォントに関する知識は非常に限られていますが、これで問題は解決しました。フォントを TTF として生成し、それを Web フォント ジェネレーターで実行しました。フォントは、Mac/Windows 7/Android/iOS で同じようにレンダリングされるようになりました。

これが誰かに役立つことを願っています。

于 2016-07-21T15:22:22.520 に答える
5

これに対する私の解決策(非常に厄介な問題):

  • すべての要素を float:left; に設定します。

  • 行の高さを明示的に設定します。

クロス ブラウザー/プラットフォームの CSS のばかげたことに対する勝利をお楽しみください。

于 2014-04-29T07:30:22.790 に答える
2

私もこの問題に遭遇しました。ルークの答えは私を助けました。この設定を使用して、FontForge でフォントを調整する必要がありました。

FontForge の設定

「Is offset」チェックボックスと「Really use Typo metrics」チェックボックスをすべてオフにします。私は Firefox と IE でほとんどの問題を抱えていました。「Win Descent」の値をいじってみると、これらの 2 つのブラウザーで修正されました。

于 2016-09-10T12:05:59.970 に答える
1

問題の一部は、Windows/Mac OSX がフォントをレンダリングする方法にある可能性があります。具体的には、@font-face 経由で取り込まれたものです。使用されているフォント形式を切り替えてみましたか?

于 2012-07-30T17:37:05.970 に答える
0

これは、フォント形式の歴史と Windows/Mac の戦争が原因です。行の高さを計算するにはさまざまな方法があり、使用するフォントでそれらが同期されていない場合、一部のシステムでは問題が発生します。

フォントを修正する (ライセンスで許可されている場合) か、この問題のないフォントに切り替える必要があります

ここでは、設計を正確な値に依存させない方がよいでしょう。

于 2013-12-12T17:22:40.587 に答える
-1

Macは、ベースラインより下の長さを線の高さに属するものとして正しく表示します。Windowsはトップから計算するのに対し、OSXはボトムアップでカウントするようです。

1emは、使用されるフォントの大文字のMの幅であるため、通常、フォント全体の高さよりも小さくなります。

行の高さを要素の高さと同じに設定してみましたか?これは通常、この種の問題を解決するのに役立ちます。

于 2012-07-30T17:51:17.013 に答える