<o:conditionalComment>
がCSSファイル専用であるというのは真実ではありません。それは誤解です。純粋なFaceletsタグ/コンポーネントを使用して要件を達成することは、技術的には単純に不可能です。これは、XML構文の形式が正しくないため、Faceletsのコンパイルエラーが発生するためです。
<o:conditionalComment if="lt IE 7">
<html lang="en" class="lt-ie9 lt-ie8 lt-ie7">
</o:conditionalComment>
<o:conditionalComment if="IE 7">
<html lang="en" class="lt-ie9 lt-ie8">
</o:conditionalComment>
<o:conditionalComment if="IE 8">
<html lang="en" class="lt-ie9">
</o:conditionalComment>
<o:conditionalComment if="gt IE 8">
<h:outputText value="<!-->" escape="false" />
<html lang="en" class="no-js">
<h:outputText value="<!--" escape="false" />
</o:conditionalComment>
...
</html>
これは整形式のXMLではありません。 ご存知のとおり、XMLの終了要素はXMLの開始要素とまったく同じスコープ内にある必要があります。すべてが同じ親XML要素に独自のものを持っている場合、それは有効なXMLになります。しかし、これは有効なHTMLではありません。<html>
</html>
<h:outputText escape="false">
すべての<html>
タグで使用するだけです。</html>
終了タグについても同じことを忘れないでください。
<o:conditionalComment if="lt IE 7">
<h:outputText value="<html lang="en" class="lt-ie9 lt-ie8 lt-ie7">" escape="false" />
</o:conditionalComment>
<o:conditionalComment if="IE 7">
<h:outputText value="<html lang="en" class="lt-ie9 lt-ie8">" escape="false" />
</o:conditionalComment>
<o:conditionalComment if="IE 8">
<h:outputText value="<html lang="en" class="lt-ie9">" escape="false" />
</o:conditionalComment>
<o:conditionalComment if="gt IE 8">
<h:outputText value="<!--><html lang="en" class="no-js"><!--" escape="false" />
</o:conditionalComment>
...
<h:outputText value="</html>" escape="false" />
かなり厄介ですが、HTML5ボイラープレート(このアプローチが始まった場所)は、それ自体も厄介なIMOです。
<my:html>
または、で十分なように、目的のマークアップを生成するカスタムコンポーネントを自分で作成することを検討することもできます<my:html>...</my:html>
。