css利用transform skewX制作平行四邊形導(dǎo)航菜單

平行四邊形其實(shí)是矩形的超集:它的各條邊是兩兩平行的,但各個(gè)角則不一定都是直角。在視覺設(shè)計(jì)中,平行四邊形往往可以傳達(dá)出一種動(dòng)感。
讓我們?cè)囍?CSS 創(chuàng)建一個(gè)按鈕狀的平行四邊形鏈接。我們的起點(diǎn)就是一個(gè)普通的塊狀按鈕,輔以一些簡(jiǎn)單的樣式,然后,我們可以通過 skew() 的變形屬性來對(duì)這個(gè)矩形進(jìn)行斜向拉伸:
transform: skewX(-45deg);
但是,這導(dǎo)致它的內(nèi)容也發(fā)生了斜向變形,這很不好看,而且難讀。有沒有辦法只讓容器的形狀傾斜,而保持其內(nèi)容不變呢?
很多人會(huì)想到嵌套元素方案,那么我們可以對(duì)內(nèi)容再應(yīng)用一次反向的 skew() 變形,從而抵消容器的變形效果,最終產(chǎn)生我們所期望的結(jié)果。不幸的是,這意味著我們將不得不使用一層額外的 HTML 元素來包裹內(nèi)容,比如用一個(gè) span:
<a href="www.dbjr.com.cn" class="button"> <span>www.dbjr.com.cn</span> </a> .button { transform: skewX(-45deg); } .button > span { transform: skewX(45deg); }
我們可以看到,這個(gè)方法的表現(xiàn)很不錯(cuò),但它也意味著我們不得不添加額外的 HTML 元素。如果結(jié)構(gòu)層的變更是不允許的,或者你希望嚴(yán)格保持結(jié)構(gòu)層的純凈度,別擔(dān)心,我們還有一個(gè)純 CSS 的解決方案。
偽元素方案
另一種思路是把所有樣式(背景、邊框等)應(yīng)用到偽元素上,然后再對(duì)偽元素進(jìn)行變形。因?yàn)槲覀兊膬?nèi)容并不是包含在偽元素里的,所以內(nèi)容并不會(huì)受到變形的影響。下面來看看這個(gè)技巧能否得到與前面相同的鏈接樣式。
我們希望偽元素保持良好的靈活性,可以自動(dòng)繼承其宿主元素的尺寸,甚至當(dāng)宿主元素的尺寸是由其內(nèi)容來決定時(shí)仍然如此。一個(gè)簡(jiǎn)單的辦法是給宿主元素應(yīng)用 position: relative 樣式,并為偽元素設(shè)置 position:absolute,然后再把所有偏移量設(shè)置為零,以便讓它在水平和垂直方向上都被拉伸至宿主元素的尺寸。代碼看起來是這樣的:
.button { position: relative; /* 其他的文字顏色、內(nèi)邊距等樣式…… */ } .button::before { content: ''; position: absolute; top: 0; right: 0; bottom: 0; left: 0; }
此時(shí),用偽元素生成的方塊是重疊在內(nèi)容之上的,一旦給它設(shè)置背景,就會(huì)遮住內(nèi)容。為了修復(fù)這個(gè)問題,我們可以給偽元素設(shè)置z-index: -1 樣式,這樣它的堆疊層次就會(huì)被推到宿主元素之后?,F(xiàn)在我們要做的最后一步,就是盡情地對(duì)它設(shè)置變形樣式,并享受美好的結(jié)果。最終版的代碼如下所示,它產(chǎn)生的視覺效果跟前文所述技巧是完全一致的:
.button { position: relative; /* 其他的文字顏色、內(nèi)邊距等樣式…… */ } .button::before { content: ''; /* 用偽元素來生成一個(gè)矩形 */ position: absolute; top: 0; right: 0; bottom: 0; left: 0; z-index: -1; background: #58a; transform: skew(45deg); }
這個(gè)技巧不僅對(duì) skew() 變形來說很有用,還適用于其他任何變形樣式,當(dāng)我們想變形一個(gè)元素而不想變形它的內(nèi)容時(shí)就可以用到它。舉個(gè)例子,我們把這個(gè)技巧針對(duì) rotate() 變形樣式稍稍調(diào)整一下,再用到一個(gè)正方形元素上,就可以很容易地得到一個(gè)菱形。
這個(gè)技巧的關(guān)鍵在于,我們利用偽元素以及定位屬性產(chǎn)生了一個(gè)方塊,然后對(duì)偽元素設(shè)置樣式,并將其放置在其宿主元素的下層。這種思路同樣可以運(yùn)用在其他場(chǎng)景中,從而得到各種各樣的效果。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
CSS3實(shí)現(xiàn)的下劃線跟隨文字導(dǎo)航特效源碼
是一段基于css3 animation屬性制作簡(jiǎn)單的滑動(dòng)下劃線文字導(dǎo)航,文字下劃線效果代碼,非常有意思,歡迎有興趣的朋友前來下載使用2019-08-28純CSS3實(shí)現(xiàn)的圖標(biāo)菜單下拉收縮二級(jí)導(dǎo)航特效源碼
純CSS3實(shí)現(xiàn)的圖標(biāo)菜單下拉收縮特效源碼是一段全部使用css實(shí)現(xiàn)的二級(jí)菜單欄下拉收縮效果代碼,沒有使用一點(diǎn)JS,非常實(shí)用,歡迎有興趣的朋友前來下載使用2019-07-22js和CSS3炫酷圓形導(dǎo)航菜單插件circular-menu
circular-menu是一款基于js和CSS3的炫酷圓形導(dǎo)航菜單插件,使用js來驅(qū)動(dòng),通過CSS3制作炫酷的圓形導(dǎo)航菜單特效2018-12-04html+css 實(shí)現(xiàn)簡(jiǎn)易導(dǎo)航欄功能
這篇文章主要介紹了基于html+css 實(shí)現(xiàn)簡(jiǎn)易導(dǎo)航欄功能,主要就是css(級(jí)聯(lián)樣式表)對(duì)html的內(nèi)容做格式化。具體內(nèi)容詳情大家跟隨小編一起通過本文學(xué)習(xí)吧2021-04-07CSS導(dǎo)航條菜單之帶小三角形的實(shí)現(xiàn)代碼
這篇文章主要介紹了CSS導(dǎo)航條菜單之帶小三角形的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-11-22CSS3實(shí)現(xiàn)的自適應(yīng)瀏覽器大小導(dǎo)航及響應(yīng)式二級(jí)菜單欄特效源碼
是一段可以根據(jù)瀏覽器大小進(jìn)行調(diào)整導(dǎo)航欄的代碼,在瀏覽器大的情況下,導(dǎo)航欄正常長(zhǎng)鋪,并且會(huì)出現(xiàn)響應(yīng)式二級(jí)菜單欄,而在瀏覽器小的情況下,導(dǎo)航欄會(huì)匯聚一點(diǎn)2018-09-29純CSS3實(shí)現(xiàn)帶吸附和陰影效果的垂直菜單導(dǎo)航功能源碼
這是一款基于純CSS3實(shí)現(xiàn)帶吸附和陰影效果的垂直菜單導(dǎo)航功能源碼。畫面中的菜單導(dǎo)航項(xiàng)豎直排列,且每個(gè)菜單項(xiàng)的右邊帶有卷折翹起離開桌面的視覺效果,并且下方還帶有陰影。2018-08-27css實(shí)現(xiàn)導(dǎo)航切換的實(shí)例代碼
本文通過實(shí)例代碼給大家介紹了css實(shí)現(xiàn)導(dǎo)航切換效果,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2018-08-15純CSS實(shí)現(xiàn)導(dǎo)航欄下劃線跟隨的示例代碼
這篇文章主要介紹了純CSS實(shí)現(xiàn)導(dǎo)航欄下劃線跟隨的示例代碼的相關(guān)資料,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2018-04-11css實(shí)現(xiàn)流程導(dǎo)航效果(三種方法)
本文通過三種方法給大家介紹css實(shí)現(xiàn)流程導(dǎo)航效果,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下2019-11-13