劃線動態:css
背景高亮:html
色塊進出:前端
首先,利用::after
和::before
就能夠畫出上下兩條線,因此只須要一個 dom 元素便可。web
其次,對於鼠標移入的動畫,要給上面兩個僞元素設置:hover
選擇器。dom
最後是處理動畫方向。咱們以上面的線條爲例,在鼠標移入的時候,是從右到左變化的。這裏是經過設置transform-origin
屬性來修改動畫方向。下面的線條同理,方向相反便可。工具
注意:代碼是經過scaleX
來實現縮放,相比於設置width
,會啓用 GPU,避免重繪。學習
html 代碼:開發工具
<body> <span>xin-tan.com</span> </body> web前端開發學習Q-q-u-n: 784783012 ,分享開發工具,零基礎,進階視頻教程,但願新手少走彎路
css 代碼:動畫
span { color: #595959; position: relative; z-index: 1; } span::before, span::after { content: ""; z-index: -1; position: absolute; left: 0; right: 0; height: 2px; background: #262626; transform: scaleX(0); transition: transform 0.2s ease-in-out; } span::before { top: 0; transform-origin: center right; } span::after { bottom: 0; transform-origin: center left; } span:hover { cursor: pointer; } span:hover::before { transform-origin: center left; transform: scaleX(1); } span:hover::after { transform-origin: center right; transform: scaleX(1); } web前端開發學習Q-q-u-n: 784783012 ,分享開發工具,零基礎,進階視頻教程,但願新手少走彎路
首先,利用::before
僞元素就能夠模擬出覆蓋須要的色塊。因此僅僅須要一個 dom 元素。這裏僞元素的content
元素必須給,不然不會顯示(有些坑)。spa
其次,色塊大小改變是經過scaleY
來設置的,緣由和第一個動畫緣由同樣。
最後,僞元素的色塊會覆蓋 dom 上的元素。因此須要給 dom 元素設置z-index
,而且讓其生效並大於僞元素的z-index
。
html 代碼:
<body> <span>xin-tan.com</span> </body>
css 代碼:
span { color: #d9d9d9; position: relative; z-index: 1; } /* 1\. content必須給 2\. 用transform覆蓋 配合 z-index */ span::before { content: ""; position: absolute; top: 0; bottom: 0; left: -0.25em; right: -0.25em; z-index: -1; background: #262626; transform: scaleY(0.2); transform-origin: center bottom; transition: all 0.1s linear; } span:hover { cursor: pointer; } span:hover::before { transform: scaleY(1); }
這和上一個「背景高亮」動畫相似,不一樣的是色塊的位置和大小變化方向不一樣。其他基本一致。
html:
<body> <span>xin-tan.com</span> </body>
css:
span { color: #d9d9d9; position: relative; z-index: 1; } span::before { content: ""; z-index: -1; position: absolute; top: 0; bottom: 0; left: 0; right: 0; background: #262626; transform-origin: center right; transform: scaleX(0); transition: transform 0.1s linear; /* 這裏不要指明爲 all */ } span:hover { cursor: pointer; } span:hover::before { transform-origin: center left; transform: scaleX(1); } web前端開發學習Q-q-u-n: 784783012 ,分享開發工具,零基礎,進階視頻教程,但願新手少走彎路