纯css 如何实现文本超出部分横向滚动

smileyby
  • 116

不使用任何js代码如何实现一段很长的文字横向滚动?

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>纯css实现文字循环滚动效果</title>
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }

        .box {
            width: 300px;
            margin: 0 auto;
            position: relative;
            border: 1px solid #ff6700;
        }

        .animate {
            padding-left: 20px;
            font-size: 12px;
            color: #000;
            white-space: nowrap;
            animation: 15s wordsLoop linear infinite normal;
        }

        @keyframes wordsLoop {
            0% {
                transform: translateX(0px);
                -webkit-transform: translateX(0px);
            }
            100% {
                transform: translateX(-100%);
                -webkit-transform: translateX(-100%);
            }
        }

        @-webkit-keyframes wordsLoop {
            0% {
                transform: translateX(0px);
                -webkit-transform: translateX(0px);
            }
            100% {
                transform: translateX(-100%);
                -webkit-transform: translateX(-100%);
            }
        }
    </style>
</head>
<body>
<div class="box">
    <p class="animate">
        君不见黄河之水天上来,奔流到海不复回,君不见高堂明镜悲白发,朝如青丝暮成雪,人生得意须尽欢,莫使金樽空对月
    </p>
</div>
</body>
</html>

上面是我自己的实现,但总是到“金”这里横向滚动就结束了,要怎么解决一下?

回复
阅读 20.2k
3 个回答
✓ 已被采纳

先说解决办法

 .animate {
            padding-left: 20px;
            font-size: 12px;
            color: #000;
            display: inline-block;//增加这句即可
            white-space: nowrap;
            animation: 15s wordsLoop linear infinite normal;
        }

下面解释原因:
首先 这里的.box被设置了宽度为300px,而<p>由于是块级元素,所以默认宽度是100%,在这里也就是300px,但是<p>的文本宽度其实是超过300px的,题主设置transform: translateX(-100%);的本意是想让<p>最终能够偏移整个文段的长度,但是很遗憾,因为p是块级元素,所以transform: translateX(-100%);在这里的作用等同于transform: translateX(-300px);所以如果你的文本不是恰好300px,最终滚动停止的位置就不会是刚好在文段末尾。

添加完display: inline-block属性之后,<p>的宽度就是文段的宽度,自然就不会有上述的问题。

.animate 加个

    display: inline-block;

图片描述

我也是一样的代码,为什么页面变宽了。检查了元素 没有overflow啊

宣传栏