如何使用CSS實現(xiàn)具有方面感知的幽靈按鈕

小編給大家分享一下如何使用CSS實現(xiàn)具有方面感知的幽靈按鈕,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

為雞冠等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及雞冠網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為做網(wǎng)站、成都網(wǎng)站建設、雞冠網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

基礎

我們先創(chuàng)建一個按鈕,很簡單!

<button>Boo!</button>

我們使用 CSS 自定義屬性完成樣式,這樣更易于維護。

button {

--borderWidth: 5;

--boxShadowDepth: 8;

--buttonColor: #f00;

--fontSize: 3;

--horizontalPadding: 16;

--verticalPadding: 8;

background: transparent;

border: calc(var(--borderWidth) * 1px) solid var(--buttonColor);

box-shadow: calc(var(--boxShadowDepth) * 1px) calc(var(--boxShadowDepth) * 1px) 0 #888;

color: var(--buttonColor);

cursor: pointer;

font-size: calc(var(--fontSize) * 1rem);

font-weight: bold;

outline: transparent;

padding: calc(var(--verticalPadding) * 1px) calc(var(--horizontalPadding) * 1px);

transition: box-shadow 0.15s ease;

}

button:hover {

box-shadow: calc(var(--boxShadowDepth) / 2 * 1px) calc(var(--boxShadowDepth) / 2 * 1px) 0 #888;

}

button:active {

box-shadow: 0 0 0 #888;

}

我們實現(xiàn)了一個按鈕及懸停效果,但是沒有填充。我們繼續(xù)進行!

添加填充

我們額外創(chuàng)建元素做為按鈕填充時的狀態(tài)。通過 clip-path 將它隱藏。當鼠標懸停在按鈕上時設置 clip-path將元素過渡顯示出來。

它們必須與父按鈕對齊。這里我們的 CSS 變量會顯示出它的優(yōu)勢。

本來我們可以通過偽元素實現(xiàn),但是它不滿足我們需要的四個方面,而且它還會干擾可訪問性&hellip;稍后我們再講。

我們先添加一個從左到右填充的效果。首頁我們要添加一個 span 標簽,它與按鈕具有相同的內容。

<button>Boo!

<span>Boo!</span>

</button>

下面我們要將 span 與按鈕重疊對齊。

button span {

background: var(--buttonColor);

border: calc(var(--borderWidth) * 1px) solid var(--buttonColor);

bottom: calc(var(--borderWidth) * -1px);

color: var(--bg, #fafafa);

left: calc(var(--borderWidth) * -1px);

padding: calc(var(--verticalPadding) * 1px) calc(var(--horizontalPadding) * 1px);

position: absolute;

right: calc(var(--borderWidth) * -1px);

top: calc(var(--borderWidth) * -1px);

}

最后,我們通過裁剪使元素隱藏,當懸停時更新裁剪規(guī)則使元素顯示出來。

button span {

--clip: inset(0 100% 0 0);

-webkit-clip-path: var(--clip);

clip-path: var(--clip);

transition: clip-path 0.25s ease;

// ...Remaining div styles

}

button:hover span {

--clip: inset(0 0 0 0);

}

添加方向感知

那么,如何感知方向呢?我們需要四個要素。每個元素將負責檢測懸停入口點。使用 clip-path,我們可以將按鈕區(qū)域分為四個部分。

我們在按鈕里添加四個 span,并放在四個方面以進行填充按鈕。<button>

Boo!

<span></span>

<span></span>

<span></span>

<span></span>

</button>

button span {

background: var(--bg);

bottom: calc(var(--borderWidth) * -1px);

-webkit-clip-path: var(--clip);

clip-path: var(--clip);

left: calc(var(--borderWidth) * -1px);

opacity: 0.5;

position: absolute;

right: calc(var(--borderWidth) * -1px);

top: calc(var(--borderWidth) * -1px);

z-index: 1;

}

我們將每個元素進行定位并使用 CSS 變量賦予它們背景色及裁剪規(guī)則。

button span:nth-of-type(1) {

--bg: #00f;

--clip: polygon(0 0, 100% 0, 50% 50%, 50% 50%);

}

button span:nth-of-type(2) {

--bg: #f00;

--clip: polygon(100% 0, 100% 100%, 50% 50%);

}

button span:nth-of-type(3) {

--bg: #008000;

--clip: polygon(0 100%, 100% 100%, 50% 50%);

}

button span:nth-of-type(4) {

--bg: #800080;

--clip: polygon(0 0, 0 100%, 50% 50%);

}

為了測試,懸停時我們改變一下元素的透明度。

button span:nth-of-type(1):hover,

button span:nth-of-type(2):hover,

button span:nth-of-type(3):hover,

button span:nth-of-type(4):hover {

opacity: 1;

}

哎呀,這里有個問題。如果我們進入并懸停一個分段,然后懸停在另一分段上,則填充方向將會發(fā)生變化。這看起來很不對勁。要解決此問題,我們可以在懸停時設置 z-index 和 clip-path 來填充這一空間。

button span:nth-of-type(1):hover,

button span:nth-of-type(2):hover,

button span:nth-of-type(3):hover,

button span:nth-of-type(4):hover {

--clip: polygon(0 0, 100% 0, 100% 100%, 0 100%);

opacity: 1;

z-index: 2;

}

合到一起

現(xiàn)在我們知道如何創(chuàng)建填充動畫了,也知道如何判斷方向了。那我們應該如何將它們放到一起實現(xiàn)想要的效果呢?答案是同級選擇器!

當我們將鼠標懸停在一方向塊上時,我們可以填充指定的元素。

首先,我們要更新一下我們的代碼:

<button>

Boo!

<span></span>

<span></span>

<span></span>

<span></span>

<b>Boo!</b>

<b>Boo!</b>

<b>Boo!</b>

<b>Boo!</b>

</button>

接下來,我們需要更新一下我們的 CSS,填充樣式我們可以復用從左到右的樣式。但需要為每個元素設置不同的 clip-path。我們按第一個在上,第二個在右,第三個在下,第四個在左的順序設置。

button b:nth-of-type(1) {

--clip: inset(0 0 100% 0);

}

button b:nth-of-type(2) {

--clip: inset(0 0 0 100%);

}

button b:nth-of-type(3) {

--clip: inset(100% 0 0 0);

}

button b:nth-of-type(4) {

--clip: inset(0 100% 0 0);

}

最后一步是鼠標懸停在對應方向塊時更新對應元素的 clip-path。

button span:nth-of-type(1):hover &mdash;&mdash; b:nth-of-type(1),

button span:nth-of-type(2):hover &mdash;&mdash; b:nth-of-type(2),

button span:nth-of-type(3):hover &mdash;&mdash; b:nth-of-type(3),

button span:nth-of-type(4):hover &mdash;&mdash; b:nth-of-type(4) {

--clip: inset(0 0 0 0);

}

至此,我們具有方向感知性的幽靈按鈕就實現(xiàn)了。

可訪問性

當按鈕不可訪問里,會顯示如下狀態(tài)。

這些額外的元素使屏幕閱讀器重復閱讀了四次。所以,我們需要將它們隱藏起來。

<button>

Boo!

<span></span>

<span></span>

<span></span>

<span></span>

<b aria-hidden="true">Boo!</b>

<b aria-hidden="true">Boo!</b>

<b aria-hidden="true">Boo!</b>

<b aria-hidden="true">Boo!</b>

</button>

以上是“如何使用CSS實現(xiàn)具有方面感知的幽靈按鈕”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道!

分享標題:如何使用CSS實現(xiàn)具有方面感知的幽靈按鈕
文章URL:http://muchs.cn/article42/ighpec.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站設計、云服務器、面包屑導航、網(wǎng)站建設、標簽優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

營銷型網(wǎng)站建設