前端每日實戰:135# 視頻演示如何用純 CSS 創做一個懸停時右移的按鈕特效

圖片描述

效果預覽

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

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

可交互視頻

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

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

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

源代碼下載

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

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

代碼解讀

定義 dom,導航中包含一個無序列表,列表項中內嵌一個 span,文字寫在 span 中:dom

<nav>
    <ul>
        <li><span>home</span></li>
    </ul>
</nav>

居中顯示:flex

body {
    margin: 0;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: #333;
}

隱藏列表項前端的引導符號:spa

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

設置按鈕的尺寸和顏色:

nav li {
    width: 8em;
    height: 2em;
    font-size: 25px;
    color: orange;
}

設置文字樣式,注意高度是 120%span 比它父級的 li 要高一些:

nav li span {
    position: relative;
    box-sizing: border-box;
    width: inherit;
    height: 120%;
    top: -10%;
    background-color: #333;
    border: 2px solid;
    font-family: sans-serif;
    text-transform: capitalize;
    display: flex;
    align-items: center;
    justify-content: center;
}

span 元素稍向右移:

nav li span {
    transform: translateX(4px);
}

用列表項 li 的左邊框畫出 1 條豎線:

nav li {
    box-sizing: border-box;
    border-left: 2px solid;
}

用列表項的僞元素再畫出 2 條豎線,它們的高度依次下降,至此,按鈕左側一共有 3 條豎線:

nav li {
    position: relative;
}

nav li::before,
nav li::after
 {
    content: '';
    position: absolute;
    width: inherit;
    border-left: 2px solid;
    z-index: -1;
}

nav li::before {
    height: 80%;
    top: 10%;
    left: -8px;
}

nav li::after {
    height: 60%;
    top: 20%;
    left: -14px;
}

將僞元素的 2 條豎線的顏色逐漸變暗,增長一點層次感:

nav li::before {
    filter: brightness(0.8);
}

nav li::after {
    filter: brightness(0.6);
}

增長鼠標懸停效果,默認狀態是按鈕遮住 3 條豎線,當鼠標懸停時,按鈕右移,露出 3 條豎線:

nav li:hover span {
    transform: translateX(4px);
}

nav li span {
    /* transform: translateX(4px); */
    transform: translateX(-16px);
    transition: 0.3s;
}

由於按鈕默認狀態的位置是偏左的,爲了抵銷這個偏移量,讓列表項稍向右移:

nav ul {
    transform: translateX(16px);
}

在 dom 中再增長几個按鈕:

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

設置一下按鈕的間距:

nav li {
    margin-top: 0.8em;
}

大功告成!

相關文章
相關標籤/搜索