流れるテキスト・流れる画像

流れるテキスト

<div class='loop-container'>
    <ul>
        <li>流れるテキスト</li>
        <li>流れるテキスト</li>
        <li>流れるテキスト</li>
    </ul>
</div>

.loop-container {
    display: flex;
    align-items: center;
    overflow: hidden;
    height: 30px;
    background: #fff000;
}
.loop-container ul {
    display: flex;
    animation: loop-slide 20s infinite linear 1s both;
    // margin:0; padding:0; list-style:0;
}
.loop-container li {
    width: 240px;
}
@keyframes loop-slide {
    from { transform: translateX(0); }
    to { transform: translateX(-100%); }
}

流れる画像

<div class='loop-wrap'>
    <ul>
        <li><img src=''></li>
        <li><img src=''></li>
        <li><img src=''></li>
        <li><img src=''></li>
        <li><img src=''></li>
    </ul>
    <ul>
        <li><img src=''></li>
        <li><img src=''></li>
        <li><img src=''></li>
        <li><img src=''></li>
        <li><img src=''></li>
    </ul>
</div>

.loop-wrap {
    display: flex;
    align-items: center;
    overflow: hidden;
    height: 30px;
}
.loop-wrap ul {
    display: flex;
    animation: loop-slide 30s infinite linear 1s both;
}
.loop-container li {
    width: calc( 100vw / 5 );
}
.loop-container li img {
    padding: 3px;
    width: 100%:
}
@keyframes loop-slide {
    from { transform: translateX(0); }
    to { transform: translateX(-100%); }
}

もしくは次のようにbackground-positionを使ってもできます。

<div class='loop-wrap'>
    <div></div>
</div>

.loop-wrap {
    display: flex;
    align-items: center;
    overflow: hidden;
    height: 100px;
}
.loop-wrap div {
    background-image: url(xxx);
    width: 100%;
    height: 100px;
    animation: loop-slide 1.5s infinite linear;
}
@keyframes loop-slide {
    from { background-position: 0 0; }
    to { background-position: -100px 0;}
}