как можно пронумировать список js-ом чтобы в css я мог умножить эту переменную calc-ом?
как можно пронумировать список js-ом чтобы в css я мог умножить эту переменную calc-ом? нужно переменную в delay чтобы каждый последующий элемент был с такой задержкой, но сколько элементов будет неизвестно, чтобы не задавать для каждого элемента в ксс delay..
ul {
list-style: none;
display: -webkit-box;
display: -ms-flexbox;
display: flex;
width: 50%;
height: 100%;
flex-direction: column;
gap: 49px;
position: absolute;
top: 0;
left: 50%;
opacity: 0;
transition: opacity 0.3s linear;
overflow: hidden;
}
ul.active {
opacity: 1;
}
li {
position: relative;
top: 100%;
opacity: 0;
transition: opacity 0.3s linear, top 0.3s linear;
}
ul.active li {
top: 0;
opacity: 1;
}
ul.active li:nth-child(1) {
transition-delay: 0.1s;
}
ul.active li:nth-child(2) {
transition-delay: 0.2s;
}
ul.active li:nth-child(3) {
transition-delay: 0.3s;
}
ul.active li:nth-child(4) {
transition-delay: 0.4s;
}
<ul class="active">
<li>текст</li>
<li>текст</li>
<li>текст</li>
<li>текст</li>
<li>текст</li>
<li>текст</li>
<li>текст</li>
</ul>
Ответы (1 шт):
Автор решения: Daniil Loban
→ Ссылка
Если я правильно понял задачу можно сделать это таким образом создав счетчик внутри css, тогда не нужен js.
body {
counter-reset: my-counter; /* инициируем счетчик */
}
ul {
list-style: none; /* прячем маркеры */
padding-left: 0;
}
li::before{
counter-increment: my-counter 111; /* увеличиваем счетчик*/
content: counter(my-counter); /* выводим значение */
}
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
Если нужно сделать так чтобы 111 задавалось из js — используем css переменную.
const root = document.documentElement;
root.style.setProperty('--inc-step', 111);
:root {
--inc-step: 1; /* css переменная для шага инкремента в списке*/
}
body {
counter-reset: my-counter; /* инициируем счетчик */
}
ul {
list-style: none; /* прячем маркеры */
padding-left: 0;
}
li::before{
counter-increment: my-counter var(--inc-step); /* увеличиваем счетчик*/
content: counter(my-counter); /* выводим значение */
}
<ul>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
<li></li>
</ul>
Пример для анимации (если нужно чтобы каждый последущий элемент появлялся с некоторой задержкой) здесь достаточно цикла в js так как счетчик нельзя использовать в расчетах calc:
const btn = document.querySelector('button')
btn.onclick = function(){
const ul = document.querySelector('ul');
ul.classList.toggle('active');
delayMs = 0;
for (child of ul.children){
delayMs += 100;
child.style.transitionDelay = delayMs + 'ms'
}
}
ul {
list-style: none; /* прячем маркеры */
padding-left: 0;
}
ul li{
opacity: 0.3;
}
ul.active li{
transition: opacity 0.3s linear, top 0.3s linear;
opacity: 1;
}
<button>Animate</button>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
<li>4</li>
<li>5</li>
<li>6</li>
<li>7</li>
</ul>
Для нескольких списков:
const btnFirst = document.getElementById('first')
const btnSecond = document.getElementById('second')
function animate ({target}){
const ul = target.nextElementSibling
ul.classList.toggle('active');
delayMs = 0;
for (child of ul.children){
delayMs += 100;
child.style.transitionDelay = delayMs + 'ms'
}
}
btnFirst.onclick = animate
btnSecond.onclick = animate
ul {
list-style: none; /* прячем маркеры */
padding-left: 0;
}
ul li{
opacity: 0.3;
}
ul.active li{
transition: opacity 0.3s linear, top 0.3s linear;
opacity: 1;
}
<button id="first">Animate</button>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
<button id="second">Animate</button>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>