5

ubiquity-xforms を使用するアプリケーションを開発しています。以前は、XHTML 1.0 doctype を使用して、ページを text/html として提供していました。

MIME タイプを application/xhtml+xml に切り替えた場合、javascript が現在行っていることの代わりに get____NS() 関数を使用できるため (毎回 DOM ツリー全体をゆっくりと反復処理する)、パフォーマンスが大幅に向上します。要素を選択する必要があります)。

しかし、これを試してみると、CSS の束が機能しなくなりました。Firebug または WebKit Nightly Web Inspector のいずれかで要素を調べたところ、XFORMS 名前空間の要素の '.classname' および '#id' css セレクターが失敗のポイントであることに気付きました。また、これらの要素のリストされた DOM プロパティに、「id」属性と「className」属性の両方が欠けていることにも気付きました。

私の質問は、UA にこれらをクラスと ID として認識させる方法はありますか?

私が試したこと、無駄に:

  1. インラインDoctypeのATTLISTで「id」属性をIDとして指定する
  2. 私ができるすべてのDoctypeを試すか、Doctypeをまったく試しません
  3. xhtml 名前空間 (つまり、xhtml:id) で id およびクラス名属性を修飾する

サンプルの xhtml を次に示します。Firefox 3.5 または Safari 4 / WebKit Nightly では動作しません

<html xmlns="http://www.w3.org/1999/xhtml"
  xmlns:xhtml="http://www.w3.org/1999/xhtml"
  xmlns:xf="http://www.w3.org/2002/xforms">
<head>
    <style type="text/css">
    /* <![CDATA[ */
    #test {
        background-color: red;
    }
    .testing {
        color: blue;
    }
    /* ]]> */
    </style>
</head>
<body>
    <xf:group id="test" class="testing">Test</xf:group>
</body>

4

3 に答える 3

4

フランキー

porneL の答えは正しいです。XHTML モードでは、異なる CSS ルールを使用する必要があり@idます@class

この知識を身につけても、問題は解決しません。:)

HTML セレクターと XHTML CSS セレクターをまとめて、同じルールに適用したくなるかもしれません。

@namespace xf url(http://www.w3.org/2002/xforms);

xf\:input.surname, xf|input[class~="surname"] {
  color: green;
}

ただし、さらに別の問題として、IE は XHTML 構文を好まないため、ルール全体を無視します。Ubiquity XForms を散らかしてみると、次のようなものが表示されます。

@namespace xf url(http://www.w3.org/2002/xforms);

xforms\:hint.active, xf\:hint.active {
  display: inline;
}

xf|hint[class~="active"] {
  display: inline;
}

ご覧のとおり、さまざまなセレクターでスタイリングを繰り返す必要がありました。(これは、スタイル設定タスクを抽象化する関数で対処したいと考えているものです。そうすれば、1 つのルールを記述するだけで済みます。)

いくつかの追加事項に注意してください。

  • HTML ルールが ':' をリテラル文字として使用しており (したがって '\' をエスケープする)、名前空間について何も知らない;
  • XHTML CSS ルールでは「~=」演算子が使用されます。これは、属性が正確に等しい値ではなく、指定された値を含む必要があることを意味します。
于 2010-02-12T00:01:37.017 に答える
1

#id/.classセレクターを使用する必要はありません。代わりに、次を使用できます。

[id=test] {}
[class|=testing] {}

同等です。

私の知る限り、クラスは HTML 固有のものであり、XML 名前空間は完全に正気でないため、XHTML 属性は XHTML 名前空間にありません! あなたはおそらくこれで運が悪いでしょう。

ID については を試すことxml:idができますが、実際にサポートされているかどうかは確認していません。

名前空間付きの要素を一致させたい場合は、CSS Namespacesで可能です:

@namespace xf "http://www.w3.org/2002/xforms";
xf|group {}
于 2010-02-08T22:38:56.950 に答える
0

Doctype、文字エンコーディングなどはありません。

これを正確に変更します:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">

<head>
    <!--Always include character encoding and content-type-->
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" />
</head>
于 2010-01-28T18:33:04.740 に答える