2012-09-21 5 views
7

ブラウザ間の互換性を実現するために、ベンダー固有の拡張機能と標準のCSS3構文の両方を使用する傾向があります。 私はCSS3がまだ草稿であることは知っていますが、すでに使用し始めています。しかし、問題はどこに起こるかの順序は大変重要なのでしょうか?ベンダーベースCSS3 Vs標準CSS3構文での注文

は、例えば、これはborder-radius特定のブラウザを適用し、その後、戻って標準的な方法にフォールここ

-moz-border-radius: 10px; 
border-radius: 10px; 

見ることができます、後の意志の希望に満ちたが、それでも、無視されます。

同様に、今、彼らのため

border-radius: 10px; 
-moz-border-radius: 10px; 

を切り替え、これは最初の標準構文を試み、次に、ブラウザベースの拡張機能にフォールバックします。

注文によって違いがありますか?パフォーマンスの面でも、それ以外の場合もあります。

+0

__P.S .__ http://stackoverflow.com/questions/8131846/why-do-browsers-create-vendor-prefixes-for-css-propertiesの複製ではありません。 – Starx

答えて

2

CSS3のプロパティを書くとき、現実的なプロパティを最後にリストし、ベンダーの接頭辞を最初に挙げるのが現代の知恵です。

非接頭辞付きのプロパティを追加するときに考慮するもう1つの点は、ベンダープレフィックス付きのバージョンの後に置くことです。ブラウザが関連するCSS3仕様で指定されているように、ブラウザの標準バージョンのプロパティを実装している場合は、実験的なブラウザ固有のバージョン(後方互換性があると思われます)の代わりに、 。最後に置くことで、ベンダーがプレフィックスを付けた実装をオーバーライドするようにする必要があります。

Ordering CSS3 Properties

参照してくださいを参照してください:Remember non-vendor-prefixed CSS 3 properties (and put them last)

+0

はい、私は知っていますそれ。しかし、問題は、なぜですか?この現代の知恵の背後にある理由は何ですか? – Starx

+0

更新された答えを参照してください。 –

+0

私の懸念事項の1つであるあなたの見積もりに「ベンダープレフィックスの実装を上書きする」。これはパフォーマンスの問題を引き起こしますか? – Starx

2

プレフィックスの順序は、限り、あなたは最後に、将来の標準バージョンを保つよう、重要ではありません。

ブラウザがプレフィックスをサポートしなくなった場合、ルールを無視して標準バージョンを実行します。

ps:A.Kと同じです。簡単ですが、すべてのページを読む必要はありません。

+0

この質問は、標準とベンダーのプロパティの順序について具体的に説明しています。だから、*なぜ*標準バージョンは最後になるべきですか?また、ブラウザは、通常、ベンダー固有のバージョンと標準バージョンの両方のプロパティをサポートしています。 *彼らがサポートを落とした場合、プロパティがどの順序であったかは関係ありません。 – 0b10011

+0

CSSはカスケードに基づいているので、最後のルールは前のルールを無効にしますか?したがって、標準バージョンは接頭辞付きのものに従うべきです。 – Mark

+1

私は私に尋ねていませんでした(私は答えを書いた人でしたが、もう答えは書かれていませんでした)。私は、これがあなたの答えで明確にされるべきだと思っています。特に、OPが求めていたものです。あなたの答えは*何をするべきかを述べていますが、なぜそれをするのかは分かりません。 – 0b10011

6

これで、最初に標準構文を試してから、ブラウザベースの拡張に戻っています。

これは誤解を招く可能性があります。準拠しているブラウザでは、最初にであるが、でもが標準に加えて接頭辞付きのプロパティをサポートする場合は、という標準の接頭辞付きのプロパティが試されます。これは通常、プレフィックス宣言とそのプロパティのブラウザの潜在的に非標準実装によってオーバーライドされる標準宣言をもたらし、最初に標準プロパティを持つという目的を破ってしまいます。

unprefixedプロパティを最後に宣言しなければならないのは、プロパティがルール内でどのようにカスケードするかということです。ブラウザは常に最後に適用されたプロパティを使用します。プロパティのプレフィックスとプレフィックスのないバージョンは、カスケードに対して同じプロパティとして扱われるため、ブラウザがそのプロパティを適用する際に標準に準拠するように最善を尽くすことを望みます。

ブラウザでプレフィックスが実装されていても標準ではない場合は問題ありませんが、両方を実装する場合は、代わりに標準を使用します。これは、標準プロパティーを最後に宣言することによって行います。私の知る限り限りスペックとしては、ベンダー拡張は、非標準的なので、その実装は記述することはできませんされている懸念しているので、これは、仕様によって決定されていません知っていて


syntax of vendor prefixesが仕様に記述されていますが、実装は完全にベンダの裁量に委ねられています。それが合意されただが慣例ほとんどのブラウザ開発者が常に互いの別名として、両方の接頭辞や接頭辞のバージョンを治療するために被標準化されたプロパティまたはルールのプレフィックス付きバージョンを、実装する際

+0

「ベンダー固有の拡張機能」はCSS仕様の一部です。http://www.w3.org/TR/CSS21/syndata.html#vendor-keywords – Rob

+0

1)CSS2.1仕様2)それは実装ではなく構文を記述するだけです。構文は、標準以外のプロパティを作成するときに実装者が使用するように定義されています。これらの接頭辞付きのプロパティは標準の一部ではなく、実装するベンダーには完全に任せられていますが、好きです。この仕様では、接頭辞付きのプロパティ自体を実装する方法については言及していません。 – BoltClock

+0

そして、どこに構文があるのでしょうか?編集:ああ、待ってください。わかった。おそらく、実装が非標準であり、ベンダープレフィックスではないと言っているでしょう。 – Rob

関連する問題