用CSS實現弧形卡片的三種方式小結
在平時開發(fā)中,有時候會碰到下面這種“弧形”樣式,主要分為“內凹”和“外凸”兩種類型,如下

該如何實現呢?或者想一下,有哪些 CSS 屬性和“弧形”有關?下面介紹 3 種方式,一起看看吧
一、border-radius
通常情況下,我們用border-radius都是這樣
div{
border-radius: 20px;
}這樣表示 4 個角都是圓角,并且是標準的正圓

其實,border-radius還支持斜杠的寫法,比如
div{
border-radius: 20px / 10px;
}這表示,圓角是一個x半徑為20px,y半徑為10px的橢圓,如下

放大來看,其實是這樣的

進一步,我們將x半徑設置成50%,這樣就能得到一個完整的弧形了
div{
border-radius: 50% / 20px;
}效果如下

這樣就得到了“外凸”的弧形了,是不是很容易?
至于“內凹”弧形,單純的border-radius表示無能為力,可以看接下來的方式
二、偽元素+border-radius
這個其實大多數同學都能想到的方式,一個矩形和一個橢圓組合起來,不就是一個弧形卡片了嗎?原理非常簡單

用代碼實現就是
div{
position: relative;
}
div::after{
content: '';
position: absolute;
width: 100%;
height: 20px;
border-radius: 100%;
background: inherit; /* 繼承父級背景 */
bottom: 0;
left: 50%;
transform: translate(-50%,50%);
}效果如下(虛線表示偽元素的邊緣)

用偽元素的好處是,可以隨意控制弧度的大小和位置,這個是border-radius所不能比的
通過overflow:hidden裁剪多余部分,可以得到一個邊緣比較“鋒利”的弧形,如下所示

另外,用偽元素還能實現“內凹”的效果,不過這需要反過來思考,什么意思呢?之前是給偽元素加的背景,現在需要加在偽元素的外圍,這里用box-shadow實現,原理如下

用代碼實現就是
div{
background: none;
overflow: hidden;
}
div::after{
content: '';
background: none;
box-shadow: 0 0 0 9999vh #FFE8A3; /*足夠大的陰影*/
z-index: -1;
}效果如下(虛線表示偽元素的邊緣)

三、徑向漸變
提到圓弧,還可以想到徑向漸變,沒錯,這里通過徑向漸變也能輕易實現弧形卡片效果。
先來看“外凸”的,其實思路和偽元素一樣,先拆分,一個橢圓和一個矩形,對應的就是徑向漸變(radial-gradient)和線性漸變(linear-gradient),如下

用代碼實現就是
div{
background:
radial-gradient(closest-side, #9747FF 100%,transparent 0) center bottom/100% 20px no-repeat,
linear-gradient(#FFE8A3, #FFE8A3) 0 0/100% calc(100% - 10px) no-repeat;
}效果如下(紫色部分是徑向漸變)

再來看“內凹”的弧形,其實也和偽元素思路類似,只不過這里需要繪制一個足夠大的漸變,從透明到純色的徑向漸變,示意如下

調整好漸變中心點,用代碼實現就是
div{
background: radial-gradient(50% 10px at center bottom, transparent 100%,#FFE8A3 0) center bottom;
}效果如下(全部都是徑向漸變繪制)

當然你也可以隨意改變徑向的弧度和大小,來實現各種不同的效果。
以上所有demo都可以查看以下在線鏈接
CSS radius layout (codepen.io)
四、優(yōu)缺點總結
以上就是本文的全部內容了,共介紹了 3 種不同的方式,下面總結一下各自優(yōu)缺點
- border-radius 支持斜杠語法,可以單獨控制圓弧的x、y半徑,實現“外凸”圓弧最簡單,缺點是圓弧不能自定義弧度,也不能實現“內凹”效果
- 偽元素最符合常規(guī)思維,可以解決以上問題,缺點是需要占用偽元素,略微麻煩
- 漸變實現和偽元素拼接思路類似,缺點是語法復雜,需要熟練掌握漸變語法
大家可以根據自己的實際場景自行選擇適當的方式,當然最好都能夠掌握,這樣碰到類似需求時才能游刃有余,如果你有其他的思路,歡迎留言討論。
以上就是用CSS實現弧形卡片的三種方式小結的詳細內容,更多關于CSS實現弧形卡片的資料請關注腳本之家其它相關文章!
相關文章
為了構建一個閱讀進度條,即顯示用戶向下滾動時閱讀文章的進度,很難不考慮 JavaScript,但是,事實證明,您也可以使用純 CSS 構建閱讀進度條,本文小編就給大家介紹如何使2023-12-05
CSS的陰影效果為網頁設計增添了許多細節(jié)和質感,本文就來介紹一下css實現元素四周陰影的示例代碼,具有一定的參考價值,感興趣的可以了解一下2023-12-04
CSS 中盒子并列是指在同一行或同一列中,將多個盒子按照一定的規(guī)則排列在一起的布局方式,本文主要介紹了CSS利用浮動實現多個盒子并排,感興趣的可以了解一下2023-11-29- 設置text-overflow: ellipsis;即可實現文本溢出省略的效果,本文主要介紹了CSS 文字溢出:ellipsis在IE上不起效果的解決,具有一定的參考價值,感興趣的可以了解一下2023-11-23
在開發(fā)微信小程序的時候,發(fā)現有的元素長按之后,出現了討厭人的背景色,這就很奇怪,就想把它去掉,本文給大家介紹CSS取消移動端長按元素背景色的方法,感興趣的朋友一起2023-11-23
web開發(fā)中,三角形指示箭頭最為常見,本文就來介紹了CSS實現空心尖角的示例代碼,具有一定的參考價值,感興趣的可以了解一下2023-11-22- CSS 添加了許多新的數學函數來補充舊有的函數(如 calc() 和最近的 clamp() ),本文主要為大家介紹了rem()和mod()的常見用例以及不太常見的用例,感興趣的小伙伴可以跟隨小2023-11-22
這篇文章主要為大家詳細介紹了如何通過純CSS實現炫酷的文本時鐘特效,文中的示例代碼講解詳細,對我們掌握CSS有一定的幫助,感興趣的小伙伴可以跟隨小編一起學習一下2023-11-21
這篇文章主要為大家詳細介紹了如何使用CSS實現多行文本展開收起效果,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學習一下2023-11-21
本文我們將深入探討css中flexbox和grid的布局,通過了解他們的主要差異,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面2023-11-20




