2013-09-06 13 views
34

ほとんどのブラウザでは好きな要素タグを作成して、好きな属性名を要素に追加することができます。例:AngularJSはカスタムHTML5要素タグと属性を使用してどのように離れますか?

<!DOCTYPE html> 
<html> 
<body> 
<div my-attribute="has no data- prefix, but seems to behave like an attribute should"> 
    <br/> 
    <hello-world style="display:block;background:#eee">Hello Everybody</hello-world> 
    <goodby-world style="background:#faa">Default display is inline</goodbye-world> 
</div> 
</body> 
</html> 

上記は表示されます。未定義の要素はスパンのように振る舞います。 AngularJSはカスタムタグ&の属性を利用しているようです。かなり多くの属性に依存しています。

しかし、私が理解する限り、そのようなことをすることは、「data-」プレフィックスを持つカスタムhtml5属性の場合を除いて、いいえでした。

私の質問は、独自のカスタム要素タグや属性名を作るのがタブーになっていないことですか?別の言い方をすれば、AngularJSは実際にHTML5仕様の一部ではない非標準の癖に頼っていますが、とにかく動作するのでしょうか?誰かがhtml5仕様の長い間失われた秘密の章を発見しましたか?あるいは私は何かを完全に誤解していますか?

+4

quirksはHTML5仕様の一部です。したがって、すべてのブラウザは同じ方法でクラップアウトする必要があります。つまり、HTML5ブラウザでは、angleで使用されているような虚偽のHTMLでもブラウザ間で一貫性があります。検証する場合は、仕様に従ってください。有効性を確認するよりも角度のある機能についてもっと気になる場合は、角度を使用してください。両方を必要とする場合は、クラスやデータ属性を使用して、カスタムタグや属性の代わりに角を駆動します。 – dandavis

答えて

16

これは検証されませんがレンダリングされます。

HTML5は、(XHTMLとは反対に)非常に寛容になるように設計されています。これは、「古い」HTML5ブラウザが、ページを破ることなくそのバージョンがまだサポートしていない新しい要素(ひどく書式が設定されたHTML)を許可できるようにするためのものです。

これはもちろん、カスタムタグを導入するために「悪用される」可能性があります。

これは言いました - あなたはHTML4でもこれを行うことができます。

コメントに記載されているとおり、普通のタグの属性に接頭辞を付けてdata-とすることもできます。

+6

ページを検証するには、属性にデータの接頭辞を付けてカスタム要素を使わず、代わりにクラスまたは属性ディレクティブを使用し、ページの検証を行うことができます。最終的には、それがレンダリングされれば/働くことが重要です。いくらか関連性のあるIEの互換性http://docs.angularjs.org/guide/ieと別のSO投稿http://stackoverflow.com/questions/16949926/w3c-validation-with-directives-in-angularjs – shaunhusain

+0

@shaunhusain良い点。 – K3N

4

これはちょっと意見がありますが、トピックもそうです。ウェブは今、私たちが作ったものです。スペック以外の要素を作成/スタイル/修正する能力があります。そして、Angularチームは、スペックを気にしないかもしれません。それは最先端です。彼らはあなたが望むことをすることを可能にします。つまり、HTML5仕様に準拠しているマークアップを使用して、Angularで何かや何かを行うことができます(両方向をサポートするように)。

4

AngularJSは本当に気にしません。それはあなた次第です。ディレクティブをolds IEと互換性を持たせたい場合は、<hello-world>の代わりに<div data-hello-world>を使用し、すべてのカスタム属性の前にデータを入れる必要があります。

HTML5はまだ100%標準ではありませんが、徐々に標準になりつつあります。 W3C仕様から

+0

また、IEShiv.jsファイルを使用して、独自の要素のためにdocument.createElement( "my-custom-element")を実行して、IEをボルキングから保護することもできます(検証は失敗しますが、ジミークラックドコーン...)。 https://github.com/angular-ui/angular-ui/tree/master/common/ieshiv – shaunhusain

11

:そうするために、それは非常に難しくなりますよう

著者は、[1]属性は、要素を使用するか、またはこの仕様または[その他の適用可能な仕様]によって許可されていない属性値をしてはなりません将来拡張される言語。 (角度のプロセスの前にNG-app要素)ページ本体の初期ソースはW3C標準に準拠しないかもしれないが、あなたがディレクティブでreplace: trueを使用する場合は、カスタム要素がテンプレートのHTMLに置き換えられ

、これは有効である可能性があります。したがって、この場合、角度要素は、端末のHTML出力に置き換えられるプレースホルダーとして考えることができます。

+0

問題は、何らかの理由で「置き換え」が廃止されてしまったことです。 – kboom

関連する問題