前端每日實戰:148# 視頻演示如何用純 CSS 創做從按鈕兩側滑入裝飾元素的懸停特效

圖片描述

效果預覽

按下右側的「點擊預覽」按鈕能夠在當前頁面預覽,點擊連接能夠全屏預覽。css

https://codepen.io/comehope/pen/yRyOZrhtml

可交互視頻

此視頻是能夠交互的,你能夠隨時暫停視頻,編輯視頻中的代碼。前端

請用 chrome, safari, edge 打開觀看。git

https://scrimba.com/p/pEgDAM/cmWMQtzgithub

源代碼下載

每日前端實戰系列的所有源代碼請從 github 下載:chrome

https://github.com/comehope/front-end-daily-challengesdom

代碼解讀

定義 dom,容器是一個無序列表,列表項表明按鈕:佈局

<ul>
    <li>home</li>
</ul>

居中顯示:flex

body {
  margin: 0;
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  background: linear-gradient(deepskyblue, navy);
}

去掉列表項前面的符號:動畫

ul {
  padding: 0;
  list-style-type: none;
}

設置按鈕的文字樣式:

ul li {
  color: #ddd;
  font-size: 25px;
  font-family: sans-serif;
  text-transform: uppercase;
}

用僞元素在按鈕的左側增長一個方塊:

ul li {
  position: relative;
}

ul li::before {
  content: '';
  position: absolute;
  width: 100%;
  height: 100%;
  background: tomato;
  left: -100%;
}

用僞元素在按鈕的右側增長一條下劃線:

ul li::after {
  content: '';
  position: absolute;
  width: 100%;
  height: 0.2em;
  background: tomato;
  bottom: 0;
  left: 100%;
}

接下來設置鼠標懸停效果。
當鼠標懸停時,左側的方塊移到文字所在位置:

ul li::before {
  transition: 0.4s ease-out;
}

ul li:hover::before {
  left: 100%;
}

右側的下劃線移到文字所在位置,它的動畫時間延遲到方塊的動畫快結束時再開始:

ul li::after {
  transition: 0.3s 0.3s ease-out;
}

ul li:hover::after {
  left: 0%;
}

同時,提升文字的亮度:

ul li {
  transition: 0.3s;
  cursor: pointer;
}

ul li:hover {
  color: #fff;
}

隱藏掉按鈕外的部分,使方塊和下劃線在默認狀態下都不可見,只有鼠標懸停時它們才從兩側入場:

ul li {
  overflow: hidden;
}

最後,在 dom 中再增長几個按鈕:

<ul>
    <li>home</li>
    <li>products</li>
    <li>services</li>
    <li>contact</li>
</ul>

佈局多個按鈕:

ul {
  display: flex;
  flex-direction: column;
  align-items: center;
}

ul li {
  margin: 0.5em;
}

大功告成!

相關文章
相關標籤/搜索