Forums / National / Russian / Идеи / ODD / EVEN для элементов регулярного блока

Kort
#1 2025-08-23 07:48

Предлагаю обсудить давнишний и imho не настолько плохой функционал – функцию cot_build_oddeven() для регулярных блоков, т.е. генератор классов .odd и .even Вещь простая, но уже как-то мелькали предложения отменить, уйти в CSS и использовать псевдоклассы :nth-child(odd) и :nth-child(even).

Имеет смысл обсудить и решить как системно поступать дальше. Вот факты:

  1. Теги _ODD / _EVEN назначают классы блокам, выполнение происходит на сервере при парсинге.
  2. Класс по производительности занимает второе место после id. Т.е. это быстро.
  3. Скорее всего, определять придется только фон (свойство background или background-color). Отступы и прочее уже будут в каждом случае разные.
  4. Определив всего два класса, получим универсальность для всех регулярных блоков на сайте. Важно ли это?
  5. Псевдокласс избавит лишь от использования функции cot_build_oddeven()
  6. Псевдокласс по производительности – самый медленный селектор.
  7. Четные и нечетные элементы придется стилизовать для каждого контейнера. Использование препроцессора и миксинов / вложенных классов поможет, но только в плане продуктивности. И LESS / SASS это на любителя.

Ну вот как-то так.

SED.by - создание сайтов, разработка плагинов и тем для Котонти
Kopusha
#2 2025-08-24 07:17

Я у себя так традиционно делаю для случаев когда
- есть цикл идентичных блоков. 

- что бы не было совсем идентично - блоки несколько рандомизируем. Например в превью отображаю 5 картинок из поста, большая слева и 4 квадратом справа или наоброт. 

<div class="<!-- IF {LIST_ROW_NUM} % 2 == 0 -->alpha-post_preview__images-grid_even<!-- ELSE -->alpha-post_preview__images-grid_odd<!-- ENDIF -->">

Это дает рандомизацию "подряд". Если заменить LIST_ROW_NUM например на дату публикации страницы - рандомизация будет не линейная, может быть три подряд _odd а затем два _even. 

 

 

Kort
#3 2025-08-24 09:04

TPL-операторы тоже не лучший вариант по производительности, особенно если их использовать в каждой итерации.

<div class="{LIST_ROW_ODDEVEN}">
    Lorem Ipsum
</div>

будет и компактнее и понятнее и быстрее. Единственный минус - не подходит для любителей BEM-нейминга. Но ничто не мешает добавить в cot_build_oddeven() два необязательных параметра для кастомизации классов.

Рандомизировать нелинейно я не пробовал, в принципе, такая логика тоже имеет место быть. Но и здесь можно и через функцию и через шаблонизатор и скриптом.

SED.by - создание сайтов, разработка плагинов и тем для Котонти
Alex300
#4 2025-08-27 06:29

Согласен, это удобно. Давайте вернем использование cot_build_oddeven().

Есть миры, не здесь, там, где небеса горят, и моря засыпают, и реки дремлют; люди сделаны из дыма, а города – из песен. Где-то опасность, где-то несправедливость, даже где-то остыл чай. Идем Эйс, у нас много работы!...
...Sorry for my english...
Бесплатные расширения для Cotonti: https://lily-software.com/free-scripts/