看到一個文字高亮切換的效果,感覺可以改造成一個文字版的進度條效果。
先看效果:
一步步實現
接下來說下實現思路。
進度條的思路,基本都是下方一個100%的進度節點,上面疊放一個進度中的進度節點。這裡也是一樣。我們可以用偽類來作為進度中的變化節點。程式碼如下:
<span class="progress" data-txt="寫程式碼的浩浩最帥!!">寫程式碼的浩浩最帥!!</span>
.progress {
color: #c7c7c7;
}
.progress::after {
content: attr(data-txt);
color: #0c6723;
display: inline-block;
}
這樣就有兩個文字。
第二步,需要把進度中的文字疊放到進度100%的節點上方,透過position
來做。程式碼調整如下:
.progress {
color: #c7c7c7;
position: relative;
}
.progress::after {
content: attr(data-txt);
color: #0c6723;
display: inline-block;
position: absolute;
left: 0;
top: 0;
background-color: #c8edd1;
width: 100%;
}
改變下after
的寬度,就能控制進度。但是after的寬度較小時,會發現文字被截斷。這個時候我們就需要加一個文字不截斷,並且將超出部分隱藏。
.progress::after {
/* ...之前的程式碼 */
word-break: keep-all;
white-space: nowrap;
width: 50%;
overflow: hidden;
}
最後再對進度中的節點新增一個width的變化過程,用來控制進度條的進度。這個怎麼選技術方案可以看我之前的文章《一文說清這難搞的CSS動畫》。
這邊我用的是transition
。
程式碼如下:
.progress::after {
content: attr(data-txt);
color: #0c6723;
display: inline-block;
position: absolute;
left: 0;
top: 0;
word-break: keep-all;
white-space: nowrap;
width: 0%;
overflow: hidden;
transition: width 1s linear;
}
.progress:hover::after {
width: 100%;
}
最終結果就是這樣:
但是這個變化不是很明顯。我們加一個文字的陰影和背景,讓變化明顯一點。
.progress::after {
/* 之前的程式碼 */
background-color: #c8edd1;
text-shadow: 0px 1px 2px #aed7b8;
}
結束
好了,本文到此結束,希望本文對你有所幫助 :-)
最近新弄了一個公眾號:寫程式碼的浩,求關注 ?。後面會逐步把掌握的前端知識以及職場知識沉澱下來。
如果還有什麼疑問或者建議,可以多多交流,原創文章,文筆有限,才疏學淺,文中若有不正之處,萬望告知。