-
Notifications
You must be signed in to change notification settings - Fork 2k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
CSS 技巧一则 -- 不定宽溢出文本适配滚动 #81
Labels
Comments
还有个问题,就是如果不同行的文字长短差距太大,动画时间就不好设定了🤦♂️ |
@Ksdb104 是的,这个确实是个问题,如果文案之间长度差距不大还好,太大的话,暂时没有特别好的纯 CSS 方案 |
还是只相差几px的最尴尬,小距离的来回滚动看起来就是抖动 |
我们无法通过 CSS 去判断当前元素长度是否大于父元素长度再选择性的进行动画 |
还是觉得title提示比较好 |
tooltip 比较好看点 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
在日常布局当中,肯定经常会遇到文本内容超过容器的情况。非常常见的一种解决方案是超出省略。
但是,有的时候,由于场景的限制,可能会出现在一些无法使用超出打点省略的方法的场景,譬如在导航栏中:
这种情况下,在容器定宽但是文本又溢出且不能换行的情况下,我们就需要寻求另外的解决方案。
hover 时弹出框提示
一种可行的方案是在 hover 的时候,弹出一个文本框展示全文,最简单的就是在文本标签下添加 title 属性,填充我们需要的内容:
当然,这种方法简单但是可能缺乏点用户体验。
本文将简单介绍在文本长度不确定,容器长度也不确定的情况下,任意长度的文本实现 hover 状态下,从左向右,滚动到文本末端,再滚动回初始位置,如此反复,像是这样:
容器定宽,文本不定宽
我们先假设一下,我们的容器的宽度如果是固定的,但是不确定每条文本的宽度。
像是这样:
使用
inline-block
获取实际文本的宽度由于
<p>
标签的宽度为父元素的 100%,如果是这样,我们很难进行下面的操作。我们首先需要拿到实际文本的宽度,这里可以借助inline-block
的特性,做到这一点,我们改进下我们的 CSS:这样,当前
<p>
标签的实际宽度,其实就是整个文本元素的宽度。算出滚动距离,进行滚动
这样,我们有了父元素的宽度
150px
,文本的宽度。那么很容易得到需要滚动的距离:需要滚动的距离 S = 溢出的文本元素的宽度 - 父元素的宽度
这样,我们只需要找到一个可以表示并且当前文本宽度是变量值即可。即是 -- transoform。
由于在使用 transform: translate() 进行位移的时候,如果使用百分比表示,那么百分比的基准元素是元素本身,也就是如果我们
transform: translate(100%, 0)
,其实表示的就是向右移动一个元素本身宽度的距离。那么我们可以借助 calc 非常容易的拿到我们上述的需要滚动的距离 S --
transform: translate(calc(-100% + 150px), 0)
,嵌入动画中:至此,对于任意超出容器宽度的文本,我们都可以轻松的完成上述的效果。
父容器不定宽度
当然,还没完。
如果父容器的宽度也是不固定的,或因为者
calc
兼容性问题无法使用上述方法。那么,我们要做的就是,在一段固定的 CSS 代码中,既能运动当前元素的宽度,也能位移父容器的宽度。正巧,CSS 还真能完成上述要求,我们改造一下
animation
的代码:transform: translate(-100%, 0)
能够向左位移自身宽度的 100%left: 100%
能够实现向右位移父容器宽度的 100%这样,不论父容器宽度如何,文本元素宽度如何,都可以实现对溢出文本适配滚动展示。
部分不足之处
当然,上述方案并非完美的方案,如果我们希望只针对本文长度溢出的情况,hover 的时候才进行滚动,这一点在使用纯 CSS 的情况下是无法实现的。
我们无法通过 CSS 去判断当前元素长度是否大于父元素长度再选择性的进行动画。毕竟 CSS 只是负责样式,不控制行为。所以实际使用中,可能还是需要借助 JavaScript 简单判断,然后通过一个 class 进行控制。
在父容器不定宽度的情况下,由于需要同时对两个属性进行动画,并且位移的方向是相反的,所以动画看上去会有一点闪烁。这个暂时没有找到特别好的解决方案。
最后
好了,本文到此结束,希望对你有帮助 :)
更多精彩 CSS 技术文章汇总在我的 Github -- iCSS ,持续更新,欢迎点个 star 订阅收藏。
如果还有什么疑问或者建议,可以多多交流,原创文章,文笔有限,才疏学浅,文中若有不正之处,万望告知。
The text was updated successfully, but these errors were encountered: