10

CSS シンタックス モジュール レベル 3 仕様の今後の草案には、重大な (つまり、後方互換性のない) 変更があるようです。

古い文言と比較してください ( W3C Working Draft 2003 年 8 月 13 日):

4.8. ルール セット、宣言ブロック、およびセレクター 宣言ブロック (次のテキストでは {} ブロックとも呼ばれます) は、左中かっこ ({) で始まり、対応する右中かっこ (}) で終わります。間には、0 個以上のセミコロン(;)で区切られた宣言のリストが必要です。

新しいもの(編集者のドラフト2012年6月14日):

2. CSS の構文の説明 ルールはセレクター (セレクター仕様で定義) で始まり、一連の宣言を含む {} でラップされたブロックを持ちます。セレクターは、宣言が適用される要素を指定します。各宣言にはプロパティ名があり、その後にコロンとプロパティ値が続き、セミコロンで終わります。

(強調鉱山)。

その気の利いた短い形式、例えば:

em { color: lime }

(これは現在、CSS カラー モジュール レベル 3 勧告で有効な例として示されています) は検証されなくなります。

レベル 3 ドラフト コレクション全体に詳しい人が確認してくれませんか? スタイルシートの将来性を保証するために、仕様が完成する前に既存の CSS ファイルをオーバーホールする必要があるのですか (不足している場合はセミコロンを挿入する必要がありますか)、それとも何か誤解しているのでしょうか?

4

3 に答える 3

6

現在、仕様にあいまいさがあるようです。

あなたは正しく指摘しました2. 構文の説明 セクションでは、すべてのルールをセミコロンで終了するように規定しています。

各宣言にはプロパティ名があり、その後にコロンとプロパティ値が続き、セミコロンで終わります。

同時に、セクション3.6.8 での解析オートマトンの説明。宣言値モードは、セミコロンのない右中括弧が宣言と現在のルールを同時に正しく終了することを読み取ります。

トークン

現在の宣言を現在のルールの値に追加します。開いているルールのスタックから現在のルールをポップし、それを新しい現在のルールの値に追加します。現在のルールのコンテンツ モードに切り替えます。

したがって、3.6.8によれば、末尾のセミコロンはオプションです。

仕様作成者の本当の意図については言えません。しかし、現在の状況はおそらく報告され、修正される必要があります。確かに、CSS 2.1 との互換性を壊すつもりはなく、最終バージョンで構文の説明セクションを書き換える予定です。

于 2012-06-16T10:48:03.937 に答える
5

ただの仕様書の書き間違いだと思いますが、本当の意図は以前のバージョンと同じように区切りとして持つことでした。これは後のドラフトで調整されることを期待しています。

W3C 検証サービスによると、末尾にセミコロンがない例は有効な CSS レベル 3 です。

ただし、いつものように、各宣言をセミコロンで終了します。これは、宣言を追加するときに区切り記号を忘れないようにするための良い方法です。

于 2012-06-16T10:41:43.313 に答える
2

これは、「セパレータ-ターミネータ」問題の例です。明らかに、CSS 3は、区切り文字であるセミコロンからターミネーターであるセミコロンに移動しました。つまり、要素間だけでなく、すべての要素の後に必要です。Pascal(セパレーター)とC(ターミネーター)は他の例を提供します。これにより、「else」または「until」の前にセミコロンが違法になるなど、Pascalに明らかな異常が発生します。CSS 3がCSS-2と互換性のないルールを採用した理由は私にはわかりません。実装がそれを主張するかどうかは別の問題ですが、引用の意図は明らかです。これはターミネーターであるため、最後を含むすべてのエントリに存在する必要があります。

于 2012-06-16T10:31:03.363 に答える