4

私はPHP用のCSSミニファイアに取り組んできましたが、それは次の1つを除いて行われました。

ユーザーのブラウザーを検出して、ユーザーがborder-radius、-webkit-border-radius、-moz-border-radiusなどを必要としているかどうかを判断してもらいたいので、非常に長くて煩わしいグループを使用する必要はありません。 。

これにより、-webkit、-mozなどのすべてのインスタンスが検出されてborder-radiusがマージされるか、{vendor} border-radiusがCSSファイルに配置され、-webkit-、-moz-、または何もありません。最初のものは、他のプロジェクトに拡張できるようにしたいので理想的です。

私の人生では、使用するプレフィックスを正確に検出するPHP実装が機能していることを理解できません(そして、考えられるすべての場所でグーグル/検索しました)。

どんな助けでも大歓迎です!

4

3 に答える 3

5

ここでの主な問題は、PHP(サーバー)がブラウザー(クライアント)のCSS機能を認識しないことです。PHPに送信されるブラウザの識別にリモートで近い唯一の情報は、ユーザーエージェント文字列です。それでも、ユーザーエージェント文字列の解析で見つけたものに基づいて、特定のブラウザまたはエンジンの特定のバージョンのCSS機能を調査し、その情報に基づいて意思決定コードをハードコーディングする必要があります。

これが、サーバー側のコードを使用してクライアントのCSS機能を決定しようとする主な責任だと思います。他にもあるかもしれませんが、残念ながらこれが最大のハードルのようです。

クライアント側には、プレフィックスの追加を簡単な作業にする-prefix-freeのようなスクリプトがあります。縮小されたCSSにプレフィックスなしのプロパティとルールのみを提供し、スクリプトがブラウザーについて知っていること(サーバーが認識していないこと)に基づいてプレフィックスを追加できるようにします。

FAQのこのエントリの最初の段落も読む価値があるようです。

「このようなものはサーバー側に属します」</h3>

サーバーサイドスクリプトはすべてのプレフィックスを追加する必要があり、CSSファイルのサイズがかなり大きくなります。また、プレフィックスが必要な機能のリストを維持するか、それらをすべて追加してスタイルシートを不必要に肥大化させる必要があります。-prefix-freeは、プレフィックスが必要なものと不要なものを自動的に検出します。

その作者へのインタビューと同様に、それはリンクしています:

「これはサーバー上でより適切に実行されます。すべてのページロードではなく、1回実行してください。」

-prefix-freeが正確に行うことは、サーバーで行うことは不可能です。-prefix-freeは、プレフィックスが必要な機能を検出し、必要な場合にのみプレフィックスを追加します。また、プレフィックスが必要な使用可能なプロパティを自動的に検出します。どの機能に追加するプレフィックスのリストを保持する必要はなく、すべてが機能を検出するため、将来にわたって利用できます。プリプロセッサでは、この種のものについてリストを維持する必要があります。そのようなリストは不完全であり、すぐに時代遅れになる運命にあります。私が試したすべてのサーバー側プレフィックスは、多くの場合失敗します。

(私のものを強調します。)

于 2012-07-23T07:16:42.927 に答える
1

ブラウザのユーザーエージェントをスニッフィングしてから、php条件付きステートメントを設定します。忙しいのでWebアプリに使用するスクリプトをすばやく貼り付けたので、書き直すことはできませんが、さまざまなブラウザーのユーザーエージェントをグーグルで検索し、必要に応じて変更することができます。

<?php
    $iPod = stripos($_SERVER['HTTP_USER_AGENT'],"iPod");
    $iPhone = stripos($_SERVER['HTTP_USER_AGENT'],"iPhone");
    $iPad = stripos($_SERVER['HTTP_USER_AGENT'],"iPad");
    $Android = stripos($_SERVER['HTTP_USER_AGENT'],"Android");
    $Blackberry = stripos($_SERVER['HTTP_USER_AGENT'],"Blackberry");
    $Playbook = stripos($_SERVER['HTTP_USER_AGENT'],"Playbook");
    $Mango = stripos($_SERVER['HTTP_USER_AGENT'],"Mango");
    $webOS = stripos($_SERVER['HTTP_USER_AGENT'],"webOS");
?>

または、cssで、3つすべてを使用するクラスを設定し、そのクラスを必要な要素に設定するだけです。いずれにせよ、これは最も簡単で実用的なソリューションです。繰り返しますが、必要に応じて変更します。

.border-radius{
    -moz-border-radius: 0px 0px 0px 0px;
    -webkit-border-radius: 0px 0px 0px 0px;
    border-radius: 0px 0px 0px 0px;
}
于 2012-07-23T07:16:58.027 に答える
0

これはあなたの質問に対する答えではありませんが、車輪の再発明の代わりにPrefixFreeを使用することができます。

ここで詳細を見てください:

http://coding.smashingmagazine.com/2011/10/12/prefixfree-break-free-from-css-prefix-hell/

あなたの質問について:

php get_browser()を使用して、ユーザーブラウザーを判別し、必要に応じて実行できます。

私の経験では、プレフィックスを避けてもcssサイズはそれほど減少しません。代わりにファイルをGZIPで圧縮できます。これは、cssファイルに大きな影響を与え、すべてのプレフィックスまたは1つのプレフィックスの差をさらに小さくします。

于 2012-07-23T07:19:24.237 に答える