IE用の順序付きリスト、カウンター、およびエクスプレス

状況を想像してください。作成する必要があるページのレイアウトには、順序付けられたリストがあります。 すべてうまくいきますが、デザインでは、リスト内のテキストのスタイルは、各アイテムのマーカーとして機能する数字のスタイルとは異なります。



そして、フォントサイズ、色、その他のフォントプロパティの違いが小さい場合は、大丈夫です。 この場合、これを実装する最も簡単な方法は、リストアイテムのスタイル(これがマーカーのスタイルになります)を設定し、対応するスタイルをオーバーライドするブロックでアイテムのコンテンツ全体をフレーム化することです。



しかし、違いがフォントだけではない場合はどうでしょうか? この場合、ほとんどの場合、タイプセッターはセマンティクスを打ち出し、リスト内の各アイテムに対応する番号を持つ要素を追加します。必要なスタイルは既に設定されています。 この解決策には多くの欠点があります-これはセマンティクスの吐き出しであり、サーバーからの実装の必要性です。





この場合の最も論理的で正しい解決策は、疑似要素の:before



:before



を使用し、 適切な仕様ルールを使用してカウンターを実装することです。



ただし、ご想像のとおり、1つの美しいブラウザでは、これはすべて機能しません。 状況を修正するには、1回限りの操作が役立ちます。これにより、カウンタのある擬似要素:before



エミュレーションが作成されます。



したがって、すべてのブラウザに次のように提供します。

.list {

counter-reset:list_item;

}

.list-item {

display:block;

}

.list-item:before,

.list-item-before {

content:counter(list_item);

counter-increment:list_item;

}








IEのみ:

.list-item {

list-style-type:expression(

function(t){

t.runtimeStyle.listStyleType = 'none';

t.insertAdjacentHTML('afterBegin','<span class="list-item-before">' + (++t.parentNode.IEcounter || (t.parentNode.IEcounter = 1)) + '</span>');

}(this)

);

}








注意すべきいくつかのポイント:

  1. .list-item:before



    セレクターと共に、生成された新鮮なアイテムのクラス名で.list-item-before



    セレクターを規定します。
  2. 単純なブラウザの場合、標準のリストマーカーはルール.list-item { display:block; }



    .list-item { display:block; }



    、しかしIEではこの点は機能しません-ワンタイムアクセスはlist-style-type



    プロパティを介して実装されたため、単純な場合(要素をフロートするか、他のプロパティを使用する必要がない場合、IEのマーカーを無効にする) IE javascriptでは、式は機能せず、標準マーカーが表示されます。
  3. 条件付きコメントに式を入れることを忘れないでください、これはカルマとWebkitエンジンに基づくブラウザにとって有害で​​す:)
  4. 以下に簡単な例を示します。



All Articles