Возможно ли установить animation-duration
относительно ширины элемента, используя calc
, когда элемент добавляется динамически и поэтому его ширина неизвестна до загрузки страницы?
У меня есть несколько «новостных лент» с текстами, которые переводятся горизонтально справа налево, используя следующие ключевые кадры:
@keyframes ticker {
0% {
transform: translateX(1%);
visibility: visible;
}
100% {
transform: translateX(-101%);
}
}
А это CSS:
animation-name: ticker;
animation-duration: 10s;
animation-timing-function: linear;
animation-iteration-count: infinite;
Проценты в translateX относятся к переводимому элементу. Таким образом, 101% на 1% больше, чем собственная ширина элемента.
Из-за этого ширина элемента влияет на скорость перевода. Более широкие элементы идут быстрее, чтобы выполнить анимацию за 10 секунд, а короткие элементы - медленнее.
Вот рабочий пример, который учитывает некоторые требования макета моего рабочего сценария:
.grid{
display: grid;
grid-template-columns: 1fr;
overflow-y: auto;
overflow-x: hidden;
font-size: 5em;
width: 40vw;
padding:0;
margin:0;
}
.ticker {
margin: 0;
overflow: hidden;
display: inline-block;
}
.wrapper {
display: inline-block;
white-space: nowrap;
animation-name: ticker;
animation-duration: 10s;
animation-timing-function: linear;
animation-iteration-count: infinite;
padding-left: 100%;
}
.wrapper a {
margin-right: 3em;
}
@keyframes ticker {
0% {
transform: translateX(1%);
visibility: visible;
}
100% {
transform: translateX(-101%);
}
}
<ul class="grid">
<li class="ticker">
<div class="wrapper">
<a href="">This now</a>
<a href="">Stunning example</a>
</div>
<div class="wrapper">
<a href="">Pan</a>
</div>
<div class="wrapper">
<a href="">Terribly known or unknown or perhaps just new</a>
<a href="">In times of war every hole is a trench</a>
</div>
</li>
</ul>
Я хотел бы предоставить значение для продолжительности анимации, которое каким-то образом зависит от ширины элемента, чтобы я мог заставить все тикеры двигаться с одинаковой скоростью независимо от ширины.
Я подумал, что, возможно, я смогу использовать calc()
для умножения или деления 10 на что-то, что относится к ширине элемента. К сожалению, здесь ширина элемента является динамической, так как она определяется строкой внутри элемента, и строка не известна до загрузки страницы.
Спасибо