国产av日韩一区二区三区精品,成人性爱视频在线观看,国产,欧美,日韩,一区,www.成色av久久成人,2222eeee成人天堂

目錄
矩形與圓角按鈕
梯形與平行四邊形
平行四邊形
梯形
切角 -- 純色背景與漸變色背景
利用 clip-path 實現(xiàn)漸變背景的切角圖形
箭頭按鈕
內(nèi)切圓角
借助 mask 實現(xiàn)漸變的內(nèi)切圓角按鈕
圓角不規(guī)則矩形
外圓角按鈕
總結(jié)一下
最后
首頁 web前端 css教程 巧用CSS實現(xiàn)各種奇形怪狀按鈕(附代碼)

巧用CSS實現(xiàn)各種奇形怪狀按鈕(附代碼)

Jul 19, 2022 am 11:28 AM
css javascript css3 前端

本篇文章帶大家看看怎么使用 CSS 輕松實現(xiàn)高頻出現(xiàn)的各類奇形怪狀按鈕,希望對大家有所幫助!

巧用CSS實現(xiàn)各種奇形怪狀按鈕(附代碼)

怎么樣使用 CSS 實現(xiàn)一個內(nèi)切角按鈕呢、怎么樣實現(xiàn)一個帶箭頭的按鈕呢?

本文基于一些高頻出現(xiàn)在設(shè)計稿中的,使用 CSS 實現(xiàn)稍微有點(diǎn)難度和技巧性的按鈕,講解使用 CSS 如何盡可能的實現(xiàn)它們?!就扑]學(xué)習(xí):css視頻教程

先讓我們來看看這些經(jīng)常會出現(xiàn)的按鈕形狀:

矩形與圓角按鈕

正常而言,我們遇到的按鈕就這兩種 -- 矩形和圓角:

它們非常的簡單,寬高和圓角和背景色。

????<div class=&#39;btn rect&#39;>rect</div>
????<div class=&#39;btn circle&#39;>circle</div>
.btn?{
????margin:?8px?auto;
????flex-shrink:?0;
????width:?160px;
????height:?64px;
}
.rect?{
????background:?#f6ed8d;
}

.circle?{
????border-radius:?64px;
????background:?#7de3c8;
}

梯形與平行四邊形

接下來,基于矩形的變形,經(jīng)常會出現(xiàn)梯形與平行四邊形的按鈕。

實現(xiàn)它們主要使用 transform 即可,但是要注意一點(diǎn),使用了 transform 之后,標(biāo)簽內(nèi)的文字也會同樣的變形,所以,我們通常使用元素的偽元素去實現(xiàn)造型,這樣可以做到不影響按鈕內(nèi)的文字。

平行四邊形

使用 transform: skewX() 即可,注意上述說的,利用元素的偽元素實現(xiàn)平行四邊形,做到不影響內(nèi)部的文字。

<div class=&#39;btn parallelogram&#39;>Parallelogram</div>
.parallelogram?{
????position:?relative;
????width:?160px;
????height:?64px;

????&::before?{
????????content:?"";
????????position:?absolute;
????????top:?0;
????????left:?0;
????????bottom:?0;
????????right:?0;
????????background:?#03f463;
????????transform:?skewX(15deg);
????}
}

如果不想使用偽元素,除了 transform: skewX(),平行四邊形使用漸變也是可以實現(xiàn)的。

大概就是這樣:

{
????background:?linear-gradient(45deg,?transparent?22%,?#04e6fb?22%,?#9006fb?78%,?transparent?0);
}

梯形

梯形比平行四邊形稍微復(fù)雜一點(diǎn),它多借助了 perspective,其實是利用了一定的 3D 變換。原理就是一個矩形,繞著 X 軸旋轉(zhuǎn),像是這樣:

使用 ?perspectivetransform: rotateX() 即可,當(dāng)然,它們可以合在一起寫:

<div class=&#39;btn trapezoid&#39;>Trapezoid</div>
.parallelogram?{
????position:?relative;
????width:?160px;
????height:?64px;

????&::after?{
??????????content:"";
??????????position:?absolute;
??????????top:?0;?right:?0;?bottom:?0;?left:?0;
??????????transform:?perspective(40px)?rotateX(10deg);
??????????transform-origin:?bottom;
??????????background:?#ff9800;
????}
}

切角 -- 純色背景與漸變色背景

接下來是切角圖形,最常見的方法主要是借助漸變 linear-gradient 實現(xiàn),來看這樣一個圖形

<div></div>
.notching?{
????background:?linear-gradient(135deg,?transparent?10px,?#ff1493?0);
????background-repeat:?no-repeat;
}

結(jié)果如下,

基于此,我們只需要利用多重漸變,實現(xiàn) 4 個這樣的圖形即可,并且,利用 background-position 定位到四個角:

<div class="notching">notching</div>
.notching?{
????background:?
????????linear-gradient(135deg,?transparent?10px,?#ff1493?0)?top?left,
????????linear-gradient(-135deg,?transparent?10px,?#ff1493?0)?top?right,
????????linear-gradient(-45deg,?transparent?10px,?#ff1493?0)?bottom?right,
????????linear-gradient(45deg,?transparent?10px,?#ff1493?0)?bottom?left;
????background-size:?50%?50%;
????background-repeat:?no-repeat;
}

利用 clip-path 實現(xiàn)漸變背景的切角圖形

當(dāng)然,這個技巧有個問題,當(dāng)要求底色是漸變色的時候,這個方法就比較笨拙了。

好在,我們還有另外一種方式,借助 clip-path 切出一個切角圖形,這樣,背景色可以是任意定制的顏色,無論是漸變還是純色都不在話下:

<div class="clip-notching">notching</div>
.clip-notching?{
????background:?linear-gradient(
????????45deg,
????????#f9d9e7,
????????#ff1493
????);
????clip-path:?polygon(
????????15px?0,
????????calc(100%?-?15px)?0,
????????100%?15px,
????????100%?calc(100%?-?15px),
????????calc(100%?-?15px)?100%,
????????15px?100%,
????????0?calc(100%?-?15px),
????????0?15px
????);
}

簡單的實現(xiàn)一個漸變背景,接著核心就是,在漸變矩形圖形的基礎(chǔ)上,利用 clip-path: polygon() 切出我們想要的形狀(一個 8 邊形):

當(dāng)然,上述代碼非常容易聯(lián)想到下述這種 6 邊形,使用漸變和 clip-path 都可以輕松得到:

箭頭按鈕

接下來是箭頭按鈕,仔細(xì)觀察上面的切角按鈕,當(dāng)兩邊的角被切掉的足夠多的時候,就變成了一個箭頭的形狀。

我們可以利用兩重漸變,實現(xiàn)一個單箭頭按鈕:

<div class="arrow">arrow</div>
&.arrow?{
????background:?linear-gradient(
????????????????-135deg,
????????????????transparent?22px,
????????????????#04e6fb?22px,
????????????????#65ff9a?100%
????????????)
????????????top?right,
????????linear-gradient(
????????????????-45deg,
????????????????transparent?22px,
????????????????#04e6fb?22px,
????????????????#65ff9a?100%
????????????)
????????????bottom?right;
????background-size:?100%?50%;
????background-repeat:?no-repeat;
}

一個箭頭就出來了:

它是由上下兩個漸變塊組合得到的,換個顏色立馬就能明白:

那如果是這樣一個箭頭造型呢?

一樣的,它也是兩個漸變的疊加,漸變的顏色是透明 --> 顏色A --> 顏色B --> 透明。當(dāng)然,同樣在這里也可以使用 clip-path

這里給出 clip-path 的解法:

{
????background:?linear-gradient(45deg,?#04e6fb,?#65ff9a);
????clip-path:?polygon(
????????0?0,
????????30px?50%,
????????0?100%,
????????calc(100%?-?30px)?100%,
????????100%?50%,
????????calc(100%?-?30px)?0
????);
}

內(nèi)切圓角

下面這個按鈕形狀,多出現(xiàn)于優(yōu)惠券,最常見的解法,也是使用漸變,當(dāng)然,與切角不同,這里使用的徑向漸變。

首先,看這樣一個簡單的例子:

<div></div>
div?{
????background-image:?radial-gradient(circle?at?100%?100%,?transparent?0,?transparent?12px,?#2179f5?12px);
}

可以得到這樣一個圖形:

所以,只需控制下 background-size,在 4 個角實現(xiàn) 4 個這樣的圖形即可:

<div class="inset-circle">inset-circle</div>
&.inset-circle?{
????background-size:?70%?70%;
????background-image:?radial-gradient(
????????????circle?at?100%?100%,
????????????transparent?0,
????????????transparent?12px,
????????????#2179f5?13px
????????),
????????radial-gradient(
????????????circle?at?0?0,
????????????transparent?0,
????????????transparent?12px,
????????????#2179f5?13px
????????),
????????radial-gradient(
????????????circle?at?100%?0,
????????????transparent?0,
????????????transparent?12px,
????????????#2179f5?13px
????????),
????????radial-gradient(
????????????circle?at?0?100%,
????????????transparent?0,
????????????transparent?12px,
????????????#2179f5?13px
????????);
????background-repeat:?no-repeat;
????background-position:?right?bottom,?left?top,?right?top,?left?bottom;
}

借助 mask 實現(xiàn)漸變的內(nèi)切圓角按鈕

如果背景色要求漸變怎么辦呢?

假設(shè)我們有一張矩形背景圖案,我們只需要使用 mask 實現(xiàn)一層遮罩,利用 mask 的特性,把 4 個角給遮住即可。

mask 的代碼和上述的圓角切角代碼非常類似,簡單改造下即可得到漸變的內(nèi)切圓角按鈕:

<div class="mask-inset-circle">inset-circle</div>
.mask-inset-circle?{
????background:?linear-gradient(45deg,?#2179f5,?#e91e63);
????mask:?radial-gradient(
????????????circle?at?100%?100%,
????????????transparent?0,
????????????transparent?12px,
????????????#2179f5?13px
????????),
????????radial-gradient(
????????????circle?at?0?0,
????????????transparent?0,
????????????transparent?12px,
????????????#2179f5?13px
????????),
????????radial-gradient(
????????????circle?at?100%?0,
????????????transparent?0,
????????????transparent?12px,
????????????#2179f5?13px
????????),
????????radial-gradient(
????????????circle?at?0?100%,
????????????transparent?0,
????????????transparent?12px,
????????????#2179f5?13px
????????);
????mask-repeat:?no-repeat;
????mask-position:?right?bottom,?left?top,?right?top,?left?bottom;
????mask-size:?70%?70%;
}

這樣,我們就得到了這樣一個圖形:

當(dāng)然,讀懂上述代碼,你需要首先弄清楚 CSS mask 屬性的原理,如果你對它還有些陌生,可以看看我的這篇文章:

《奇妙的 CSS MASK》:https://github.com/chokcoco/iCSS/issues/80

圓角不規(guī)則矩形

下面這個按鈕形狀,也是最近被問到最多的,先來看看它的造型:

不太好給它起名,一側(cè)是規(guī)則的帶圓角直角,另外一側(cè)則是帶圓角的斜邊。

其實,它就是由圓角矩形 + 圓角平行四邊形組成

所以,借助兩個偽元素,可以輕松的實現(xiàn)它們:

<div class="skew">Skew</div>
.skew?{
????position:?relative;
????width:?120px;

????&::after?{
????????content:?"";
????????position:?absolute;
????????top:?0;
????????left:?0;
????????right:?0;
????????bottom:?0;
????????border-radius:?10px;
????????background:?orange;
????????transform:?skewX(15deg);
????}
????&::before?{
????????content:?"";
????????position:?absolute;
????????top:?0;
????????right:?-13px;
????????width:?100px;
????????height:?64px;
????????border-radius:?10px;
????????background:?orange;
????}
}

由于一個偽元素疊加在另外一個之上,所以對其中一個使用漸變,一個則是純色,其顏色是可以完美銜接在一起的,這樣就實現(xiàn)了漸變色的該圖形:

外圓角按鈕

接下來這個按鈕形狀,常見于 Tab 頁上,類似于 Chrome 的分頁:

我們對這個按鈕形狀拆解一下,這里其實是 3 塊的疊加:

只需要想清楚如何實現(xiàn)兩側(cè)的弧形三角即可。這里還是借助了漸變 -- 徑向漸變,其實他是這樣,如下圖所示,我們只需要把黑色部分替換為透明即可,使用兩個偽元素即可:

代碼如下:

<div class="outside-circle">outside-circle</div>
.outside-circle?{
????position:?relative;
????background:?#e91e63;
????border-radius:?10px?10px?0?0;

????&::before?{
????????content:?"";
????????position:?absolute;
????????width:?20px;
????????height:?20px;
????????left:?-20px;
????????bottom:?0;
????????background:?#000;
????????background:radial-gradient(circle?at?0?0,?transparent?20px,?#e91e63?21px);
????}
????&::after?{
????????content:?"";
????????position:?absolute;
????????width:?20px;
????????height:?20px;
????????right:?-20px;
????????bottom:?0;
????????background:?#000;
????????background:radial-gradient(circle?at?100%?0,?transparent?20px,?#e91e63?21px);
????}
}

即可得到:

上述的所有圖形的完整代碼,你可以在這里看到:CodePen Demo -- CSS Various Button Shapes | CSS 各種造型按鈕

https://codepen.io/Chokcoco/pen/QWMoBGO?editors=1100

總結(jié)一下

基于上述的實現(xiàn),我們不難發(fā)現(xiàn),一些稍微特殊的按鈕,無非都通過拼接、障眼法、遮罩等方式實現(xiàn)。

而在其中:

  • 漸變(線性漸變 linear-gradient、徑向漸變 radial-gradient、多重漸變)
  • 遮罩 mask
  • 裁剪 clip-path
  • 變形 transform

發(fā)揮了重要的作用,熟練使用它們,我們對于這些圖形就可以信手拈來,基于它們的變形也能從容面對。

上述的圖形,再配合 filter: drop-shadow(),基本都能實現(xiàn)不規(guī)則陰影。

再者,更為復(fù)雜的圖形,如下所示:

還是切圖吧,CSS 雖好,實際使用中也需要考慮投入產(chǎn)出比。

最后

本文的目的更多的是當(dāng)一個簡單的手冊,實際中實現(xiàn)上述的效果可能有更好的方法,本文沒有一一枚舉,也歡迎補(bǔ)充指正。

好了,本文到此結(jié)束,希望本文對你有所幫助 :)

原文地址:https://segmentfault.com/a/1190000041044028

作者:chokcoco

(學(xué)習(xí)視頻分享:web前端入門

以上是巧用CSS實現(xiàn)各種奇形怪狀按鈕(附代碼)的詳細(xì)內(nèi)容。更多信息請關(guān)注PHP中文網(wǎng)其他相關(guān)文章!

本站聲明
本文內(nèi)容由網(wǎng)友自發(fā)貢獻(xiàn),版權(quán)歸原作者所有,本站不承擔(dān)相應(yīng)法律責(zé)任。如您發(fā)現(xiàn)有涉嫌抄襲侵權(quán)的內(nèi)容,請聯(lián)系admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費(fèi)脫衣服圖片

Undresser.AI Undress

Undresser.AI Undress

人工智能驅(qū)動的應(yīng)用程序,用于創(chuàng)建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用于從照片中去除衣服的在線人工智能工具。

Clothoff.io

Clothoff.io

AI脫衣機(jī)

Video Face Swap

Video Face Swap

使用我們完全免費(fèi)的人工智能換臉工具輕松在任何視頻中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費(fèi)的代碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

功能強(qiáng)大的PHP集成開發(fā)環(huán)境

Dreamweaver CS6

Dreamweaver CS6

視覺化網(wǎng)頁開發(fā)工具

SublimeText3 Mac版

SublimeText3 Mac版

神級代碼編輯軟件(SublimeText3)

熱門話題

Laravel 教程
1600
29
PHP教程
1502
276
如何更改CSS中的文本顏色? 如何更改CSS中的文本顏色? Jul 27, 2025 am 04:25 AM

要改變CSS中文本顏色,需使用color屬性;1.使用color屬性可設(shè)置文本前景色,支持顏色名稱(如red)、十六進(jìn)制碼(如#ff0000)、RGB值(如rgb(255,0,0))、HSL值(如hsl(0,100%,50%))以及帶透明度的RGBA或HSLA(如rgba(255,0,0,0.5));2.可將顏色應(yīng)用于包含文本的任何元素,如h1至h6標(biāo)題、段落p、鏈接a(需注意a:link、a:visited、a:hover、a:active不同狀態(tài)的顏色設(shè)置)、按鈕、div、span等;3.最

如何清除未使用的CSS? 如何清除未使用的CSS? Jul 27, 2025 am 02:47 AM

UseAutomatedToolSlikePurgecsSoruncsStoscanAndRemoveUnusedcss; 2. integratePuratePurgingIntoyourBuildProcessviawebpack,vite,vite,ortailwind ’scontentConfiguration; 3.AuditcsSusageWithChroMedEvtoolScoverAgeTabBeforgeForgingToavoidRemovingNeedEdedStyles; 4.safelistdynamic

什么是堆疊上下文? 什么是堆疊上下文? Jul 27, 2025 am 03:55 AM

astackingcontextisaself-containeerrincssthatconthatconthatconthatconthatconthatconthatconthatconthatconthatconthatconthatconthatconthatconthatconthatconteroverlapplapsplatements,wherenestedContextSrextSrextSratcrets-IndexInteractions; itiscreatedByDybyPropertiesLikeLikeZ-IndexonPositionsedElements,Epacity,opacity

描述不同的CSS單元以及何時使用它們 描述不同的CSS單元以及何時使用它們 Jul 27, 2025 am 04:24 AM

在網(wǎng)頁開發(fā)中,CSS單位的選擇取決于設(shè)計需求和響應(yīng)式表現(xiàn)。1.像素(px)用于固定尺寸如邊框和圖標(biāo),但不利于響應(yīng)式設(shè)計;2.百分比(%)根據(jù)父容器調(diào)整大小,適合流式布局但需注意上下文依賴;3.em基于當(dāng)前字體大小,rem基于根元素字體,適合彈性字體和統(tǒng)一主題控制;4.視口單位(vw/vh/vmin/vmax)依據(jù)屏幕尺寸調(diào)整,適合全屏元素和動態(tài)UI;5.auto、inherit、initial等值用于自動計算、繼承或重置樣式,有助于靈活布局與樣式管理。合理使用這些單位能提升頁面靈活性與響應(yīng)性。

如何使用CSS Backdrop-Filter屬性? 如何使用CSS Backdrop-Filter屬性? Aug 02, 2025 pm 12:11 PM

backdrop-filter用于對元素背后的內(nèi)容應(yīng)用視覺效果,1.使用backdrop-filter:blur(10px)等語法實現(xiàn)毛玻璃效果;2.支持blur、brightness、contrast等多種濾鏡函數(shù)并可疊加;3.常用于玻璃態(tài)卡片設(shè)計,需確保元素與背景重疊;4.現(xiàn)代瀏覽器支持良好,可用@supports提供降級方案;5.避免過大模糊值和頻繁重繪以優(yōu)化性能,該屬性僅在元素背后有內(nèi)容時生效。

如何在CSS中樣式鏈接? 如何在CSS中樣式鏈接? Jul 29, 2025 am 04:25 AM

鏈接的樣式應(yīng)通過偽類區(qū)分不同狀態(tài),1.使用a:link設(shè)置未訪問鏈接樣式,2.a:visited設(shè)置已訪問鏈接,3.a:hover設(shè)置懸停效果,4.a:active設(shè)置點(diǎn)擊時樣式,5.a:focus確保鍵盤可訪問性,始終遵循LVHA順序以避免樣式?jīng)_突,可通過添加padding、cursor:pointer和保留或自定義焦點(diǎn)輪廓來提升可用性和可訪問性,還可使用border-bottom或動畫下劃線等自定義視覺效果,最終確保鏈接在所有狀態(tài)下均有良好用戶體驗和可訪問性。

如何將文本集中在CSS中? 如何將文本集中在CSS中? Jul 27, 2025 am 03:16 AM

使用text-align:center實現(xiàn)文本水平居中;2.使用Flexbox的align-items:center和justify-content:center實現(xiàn)垂直和水平居中;3.單行文本可通過設(shè)置line-height等于容器高度來垂直居中;4.絕對定位元素可結(jié)合top:50%、left:50%與transform:translate(-50%,-50%)實現(xiàn)居中;5.CSSGrid的place-items:center也可同時實現(xiàn)雙軸居中,現(xiàn)代布局推薦優(yōu)先使用Flexbox或Grid。

什么是用戶代理樣式表? 什么是用戶代理樣式表? Jul 31, 2025 am 10:35 AM

用戶代理樣式表是瀏覽器自動應(yīng)用的默認(rèn)CSS樣式,用于確保未添加自定義樣式的HTML元素仍具基本可讀性。它們影響頁面初始外觀,但不同瀏覽器存在差異,可能導(dǎo)致不一致顯示。開發(fā)者常通過重置或標(biāo)準(zhǔn)化樣式來解決這一問題。使用開發(fā)者工具的“計算”或“樣式”面板可查看默認(rèn)樣式。常見覆蓋操作包括清除內(nèi)外邊距、修改鏈接下劃線、調(diào)整標(biāo)題大小及統(tǒng)一按鈕樣式。理解用戶代理樣式有助于提升跨瀏覽器一致性并實現(xiàn)精準(zhǔn)布局控制。

See all articles