Я хочу использовать анимацию CSS, чтобы переместить эти элементы div вверх, как показано на приложенном ниже GIF-файле.
Все дивы движутся вверх с одинаковой скоростью.
Я попробовал тег marquee, но, насколько я слышал, он обесценился или скоро будет обесценен. Так что я не могу его использовать.
Я никогда не занимался CSS-анимацией. Так что был бы очень признателен за вашу помощь.
В каждом столбце по 6 элементов. Когда все 6 пунктов закончены, он снова начинается с пункта 1. Элементы, которые переполняются, остаются скрытыми до тех пор, пока не будут отображены все остальные элементы, а затем снова появляются снизу после 6-го элемента.

.gridcontainer{
background: black;
width: 100%;
padding: 20px;
margin: 5px;
color: white;
border-radius: 10px;
}
.grid{
display:grid;
justify-items: center
}
.grid--1x3{
grid-template-columns: 1fr 1fr 1fr;
justify-items: "center"
}
.flexcolumn {
display:flex;
flex-direction: column;
}
<div class='grid grid--1x3'>
<div class='flexcolumn'>
<span class='gridcontainer'>Element A</span>
<span class='gridcontainer'>Element B</span>
<span class='gridcontainer'>Element C</span>
<span class='gridcontainer'>Element D</span>
<span class='gridcontainer'>Element E</span>
<span class='gridcontainer'>Element F</span>
</div>
<div class='flexcolumn'>
<span class='gridcontainer'>Element A</span>
<span class='gridcontainer'>Element B</span>
<span class='gridcontainer'>Element C</span>
<span class='gridcontainer'>Element D</span>
<span class='gridcontainer'>Element E</span>
<span class='gridcontainer'>Element F</span>
</div>
<div class='flexcolumn'>
<span class='gridcontainer'>Element A</span>
<span class='gridcontainer'>Element B</span>
<span class='gridcontainer'>Element C</span>
<span class='gridcontainer'>Element D</span>
<span class='gridcontainer'>Element E</span>
<span class='gridcontainer'>Element F</span>
</div>
</div>В вашем вопросе говорится, что в каждом столбце есть 10 элементов, но ваш код показывает только 6. Как правильно?
Предположим 6. Да, непрерывный поток этих элементов идет вверх.
У меня нет времени снимать код для вас. Но проверьте эту статью: ryanmulligan.dev/blog/css-marquee и эту демонстрацию: codepen.io/hexagoncircle/full/wvmjomb






.container {
position: absolute;
bottom: 0;
display: flex;
animation-name: move;
animation-duration: 4s;
animation-fill-mode: forwards;
}
.box{
width: 200px;
height: 100px;
background: red;
margin-right: 10px;
}
@keyframes move {
from { bottom: 0 }
to { bottom: 200px }
}<div class = "container">
<div class = "box"></div>
<div class = "box"></div>
<div class = "box"></div>
<div class = "box"></div>
<div class = "box"></div>
<div class = "box"></div>
</div>Вы можете использовать ключевые кадры для добавления анимации
Один из способов добиться непрерывного движения — иметь две копии всего в одном контейнере.
Затем контейнер перемещается вверх, но только на половину своей высоты — вторая копия будет перезаписана первой в конце анимации, чтобы все выглядело непрерывно.
В этом фрагменте предполагается, что внешний контейнер может иметь другую (меньшую) высоту (как показано на рисунке — не все сообщения отображаются сразу) — поэтому есть внешний контейнер со скрытым переполнением и внутренний контейнер, который и переводится вверх.
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.gridcontainer {
background: black;
width: 100%;
padding: 20px;
margin: 5px;
color: white;
border-radius: 10px;
}
.outer {
overflow: hidden;
height: 400px;
width: 100vw;
display: flex;
justify-content: center;
}
.inner {
animation: move 10s linear infinite;
rposition: relative;
height: fit-content;
}
@keyframes move {
0% {
transform: translateY(0);
}
100% {
transform: translateY(-50%);
}
}
.grid {
display: grid;
gap: 2vw;
justify-content: space-around;
height: fit-content;
}
.grid--1x3 {
grid-template-columns: 1fr 1fr 1fr;
}
.flexcolumn {
display: flex;
flex-direction: column;
}
</style>
<div class = "outer">
<div class = "inner">
<div class='grid grid--1x3'>
<div class='flexcolumn'>
<span class='gridcontainer'>Element A</span>
<span class='gridcontainer'>Element B</span>
<span class='gridcontainer'>Element C</span>
<span class='gridcontainer'>Element D</span>
<span class='gridcontainer'>Element E</span>
<span class='gridcontainer'>Element F</span>
</div>
<div class='flexcolumn'>
<span class='gridcontainer'>Element A</span>
<span class='gridcontainer'>Element B</span>
<span class='gridcontainer'>Element C</span>
<span class='gridcontainer'>Element D</span>
<span class='gridcontainer'>Element E</span>
<span class='gridcontainer'>Element F</span>
</div>
<div class='flexcolumn'>
<span class='gridcontainer'>Element A</span>
<span class='gridcontainer'>Element B</span>
<span class='gridcontainer'>Element C</span>
<span class='gridcontainer'>Element D</span>
<span class='gridcontainer'>Element E</span>
<span class='gridcontainer'>Element F</span>
</div>
</div>
<div class='grid grid--1x3'>
<div class='flexcolumn'>
<span class='gridcontainer'>Element A</span>
<span class='gridcontainer'>Element B</span>
<span class='gridcontainer'>Element C</span>
<span class='gridcontainer'>Element D</span>
<span class='gridcontainer'>Element E</span>
<span class='gridcontainer'>Element F</span>
</div>
<div class='flexcolumn'>
<span class='gridcontainer'>Element A</span>
<span class='gridcontainer'>Element B</span>
<span class='gridcontainer'>Element C</span>
<span class='gridcontainer'>Element D</span>
<span class='gridcontainer'>Element E</span>
<span class='gridcontainer'>Element F</span>
</div>
<div class='flexcolumn'>
<span class='gridcontainer'>Element A</span>
<span class='gridcontainer'>Element B</span>
<span class='gridcontainer'>Element C</span>
<span class='gridcontainer'>Element D</span>
<span class='gridcontainer'>Element E</span>
<span class='gridcontainer'>Element F</span>
</div>
</div>
</div>
</div>Во-первых, ваша сетка должна быть короче содержащихся в ней элементов, чтобы создать переполнение.
Затем вы можете сдвинуть столбцы в сетке с помощью свойства transform: translateY().
Однако вы хотите создать анимацию, которую я вижу в вашем примере, поэтому вам нужно будет определить ключевой кадр для создания анимации.
В приведенном ниже примере я предпринял следующие шаги:
Создал переменную, содержащую высоту сетки. я сделал это потому что нам нужно это точное значение в двух разных местах.
Установите высоту сетки на основе переменной.
Установите переполнение как скрытое, чтобы «переполнение» не было видно.
Создал ключевой кадр под названием слайд. В этом ключевом кадре вы видите 2 шага: 0%: со значением transform: translateY(0). Это указывает на нормальное положение, пока ничего не происходит. 100%: Это конец анимация. С -100% я указываю, что мне нужен последний элемент в начало сетки. Однако мы сталкиваемся с проблемой: в вашем примере я вижу, что вы хотите, чтобы последний элемент останавливался внизу сетки. Для этого нам нужно немного остановить анимацию. ранее. Использование функции calc(), где мы добавляем высоту сетки до -100%, мы достигаем нижней части сетки.
Анимация применяется к столбцам в течение 10 с, с установка бесконечности, чтобы анимация продолжала повторяться
:root {
/* step 1 */
--height: 250px;
}
.gridcontainer{
background: black;
width: 100%;
padding: 20px;
margin: 5px;
color: white;
border-radius: 10px;
}
.grid{
display:grid;
justify-items: center;
background-color: red;
/* step 2 */
height: var(--height);
/* step 3 */
overflow: hidden;
}
.grid--1x3{
grid-template-columns: 1fr 1fr 1fr;
justify-items: "center"
}
.flexcolumn {
display:flex;
flex-direction: column;
/* step 5 */
animation: slide 5s infinite;
}
/* step 4 */
@keyframes slide {
0% {
transform: translateY(0);
}
100% {
transform: translateY(calc(-100% + var(--height)));
}
} <div class='grid grid--1x3'>
<div class = "flexcolumn">
<span class='gridcontainer'>Element A</span>
<span class='gridcontainer'>Element B</span>
<span class='gridcontainer'>Element C</span>
<span class='gridcontainer'>Element D</span>
<span class='gridcontainer'>Element E</span>
<span class='gridcontainer'>Element F</span>
</div>
<div class = "flexcolumn">
<span class='gridcontainer'>Element A</span>
<span class='gridcontainer'>Element B</span>
<span class='gridcontainer'>Element C</span>
<span class='gridcontainer'>Element D</span>
<span class='gridcontainer'>Element E</span>
<span class='gridcontainer'>Element F</span>
</div>
<div class = "flexcolumn">
<span class='gridcontainer'>Element A</span>
<span class='gridcontainer'>Element B</span>
<span class='gridcontainer'>Element C</span>
<span class='gridcontainer'>Element D</span>
<span class='gridcontainer'>Element E</span>
<span class='gridcontainer'>Element F</span>
</div>
</div>
GIF имеет своего рода рывки при перезапуске — я прав, что вы хотели бы, чтобы непрерывный поток этих элементов шел вверх?