OL, LI: content, counter. IE & Opera

10th October 2003 - 00:54

Mozilla побороть не смог, но вечер провёл занимательно. Спасибо. :)

CSS
/* Задаём систему нумерации списков для Mozilla,
IE (если *.htc вдруг не сработает);
скрываем маркёры от Opera */
ol {list-style-type: decimal;} /* IE */
html>body ol {list-style-type: none;} /* Opera */
html[xmlns] ol {list-style-type: decimal;} /* Mozilla */

/* Вешаем behavior */
ol {behavior: url("li.htc");}

/* Остальное для Opera */
ol {counter-reset: ol;}
ol ol {counter-reset: olol;}
ol ol ol {counter-reset: ololol;}
ol li:before {
content: counter(ol) ". ";
counter-increment: ol;
}
ol ol li:before {
content: counter(ol) "." counter(olol) ". ";
counter-increment: olol;
}
ol ol ol li:before {
content: counter(ol) "." counter(olol) "." counter(ololol) ". ";
counter-increment: ololol;
}
/* и т.д. Хотя есть подозрение, что в следующих
версиях Opera баги пофиксят */

Содержимое li.htc:

HTC
<public:attach event="oncontentready" onevent="LetsDoIt();" />
<script language="JavaScript" type="text/javascript"><!--
function LetsDoIt() {

element.style.listStyleType = 'none';

oM = element.childNodes.length;

for ( i = 0; i < oM; i++ ) {

	oLI = element.childNodes[i];

	oLI.innerHTML = (i+1) + '. ' + oLI.innerHTML;

	oLI.innerHTML = oLI.innerHTML.replace(/(([1-999]\. )([1-999]\. )*)/, "$1$2");

	oLI.innerHTML = oLI.innerHTML.replace(/[1-999]\. /, '');

	oLI.innerHTML = oLI.innerHTML.replace(/<LI>((([1-999]\. )?)*)/g, "<LI>$1" + (i+1) + '. ');

}
}
--></script>

Может быть и не самый удачный код, но вполне рабочий (download). «Доработка напильником» производится в зависимости от конкретных условий.

PS. Тестировал мало (организм требует сна).

Update: теперь и в Mozilla.

Categories: CSS, dHtml, Web-билдинг | comments: (5)

Комментарии

1. kukutz 10th October 2003 - 18:09

Во-первых, большое спасибо.

Во-вторых, КАК вам удалось сделать, чтобы оно работало в IE5.0, если «One of the most exciting new features introduced in Microsoft® Internet Explorer 5.5 is Dynamic HTML (DHTML) behaviors.»?

Mash:

Пожалуйста.

Видимо я просто не так понял ( MSDN: Introduction to DHTML Behaviors ). Ну… бывает. :)

2. alshur 10th October 2003 - 19:43

2 mash: супер-супер!

2 kukutz: всё-таки, они появились именно в ie 5.0

Mash:

Спасибо на добром слове. :)

3. kukutz 10th October 2003 - 20:00

http://ar.sky.ru/olcount/li.html

как странно…
с локального диска это всегда работает правильно.

а из сети в IE5 замена происходит очень медленно и в половине случаев неправильно.

Mash:

Может быть там проблемы с кэшированием *.htc? Я имею ввиду проблемы IE5, а не серверных headers. Когда тестировал, то заметил, что локально он тоже тормозит.

Интересно, а если добавить в HTML такой скрипт (без всяких HTC), то будет ли эта страница лучше работать в IE5?

4. RusPutin 3rd November 2003 - 21:28

А если внутри <ol> есть <ul>? Там счетчик все равно показывается, так как порядок ol ul li подпадает под ol li. Такая трабла. Фиксится?

Mash:

Трабла фиксится.

Причём можно сделать так, что нумерация следующего <ol>, дочернего по отношению к такому <ul>, не будет нарушена. Т.е. можно чередовать <ul>/<ol> и «ничего за это не будет». Изврат полный.

Наброски у меня где-то были. Если интересно, то могу поискать.

5. RusPutin 4th November 2003 - 08:45

Интересною Причем очень. Если найдешь, вышли на мыло: rusputin@fromru.com

Mash:

ok

Комментарии временно отключены.