效果演示
长文本轮回滚动播放,短文本静止不动:

教程
假设我们有如下结构的 HTML:
1 | |
其中outer是外部容器,p是需要显示的文本。
因为p需要依赖outer的大小,所以outer的大小不能使用auto,需要手动设定,现在我们写出下面的样式:
1 | |
现在最重要的部分就是如何设置p的样式了,首先我们需要一个动画:
1 | |
然后给p设置样式:
1 | |
现在就能够实现文本在容器(outer)中来回滚动了,但是小伙伴肯定发现了一个问题,当p的长度小于outer时依然会在其中滚动,这肯定不是我们希望的效果,那么如何实现p长度小于outer时不进行滚动呢?
实际上仅通过 css (据我所知)不能实现该效果,当然我可不是标题党,我们可以另辟蹊径来解决这个问题。
上面的样式我们不难看出来,当outer和p的宽度一样时p是不会滚动的,所以我们只需要将p的样式改为下面的样子,就能做到在文本短时不进行滚动:
1 | |
当然,这么写之后就不能给p标签添加边框、背景之类的效果了,不然在显示短文本的时候效果会很奇怪。这个我还没有想到比较好的解决方案,如果有小伙伴有的话可以发在评论区分享一下。
接下来如果想要实现p居中对齐的话就有坑了,千万不要将outer的display设置成flex,如果把outer设置为flex,当p设置min-width后p的长度就会被限制在outer的宽度。比如当outer宽度为 100px 时p的最大宽度就是 100px,这样子就完全没办法实现滚动了。
当然如果你可以肯定不会出现p宽度小于outer的情况就可以把min-width去掉,然后放心大胆的用flex了。如果需要设置min-width,可以给p设置line-height来实现垂直居中。