不使用任何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>
上面是我自己的实现,但总是到“金”这里横向滚动就结束了,要怎么解决一下?
先说解决办法
下面解释原因:
首先 这里的
.box
被设置了宽度为300px,而<p>
由于是块级元素,所以默认宽度是100%
,在这里也就是300px,但是<p>
的文本宽度其实是超过300px的,题主设置transform: translateX(-100%);
的本意是想让<p>
最终能够偏移整个文段的长度,但是很遗憾,因为p是块级元素,所以transform: translateX(-100%);
在这里的作用等同于transform: translateX(-300px);
所以如果你的文本不是恰好300px,最终滚动停止的位置就不会是刚好在文段末尾。添加完
display: inline-block
属性之后,<p>
的宽度就是文段的宽度,自然就不会有上述的问题。