自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

CSS 實現(xiàn)弧形卡片的三種方式

開發(fā) 前端
border-radius 支持斜杠語法,可以單獨控制圓弧的x、y半徑,實現(xiàn)“外凸”圓弧最簡單,缺點是圓弧不能自定義弧度,也不能實現(xiàn)“內(nèi)凹”效果。

在平時開發(fā)中,有時候會碰到下面這種“弧形”樣式,主要分為“內(nèi)凹”和“外凸”兩種類型,如下

圖片圖片

該如何實現(xiàn)呢?或者想一下,有哪些 CSS 屬性和“弧形”有關(guān)?下面介紹 3 種方式,一起看看吧

一、border-radius

通常情況下,我們用border-radius都是這樣

div{
  border-radius: 20px;
}

這樣表示 4 個角都是圓角,并且是標(biāo)準(zhǔn)的正圓

圖片圖片

其實,border-radius還支持斜杠的寫法,比如

div{
  border-radius: 20px / 10px;
}

這表示,圓角是一個x半徑為20px,y半徑為10px的橢圓,如下

圖片圖片

放大來看,其實是這樣的

圖片圖片

進(jìn)一步,我們將x半徑設(shè)置成50%,這樣就能得到一個完整的弧形了

div{
  border-radius: 50% / 20px;
}

效果如下

圖片圖片

這樣就得到了“外凸”的弧形了,是不是很容易?

至于“內(nèi)凹”弧形,單純的border-radius表示無能為力,可以看接下來的方式

二、偽元素+border-radius

這個其實大多數(shù)同學(xué)都能想到的方式,一個矩形和一個橢圓組合起來,不就是一個弧形卡片了嗎?原理非常簡單

圖片圖片

用代碼實現(xiàn)就是

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裁剪多余部分,可以得到一個邊緣比較“鋒利”的弧形,如下所示

圖片圖片

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

圖片圖片

用代碼實現(xiàn)就是

div{
  background: none;
  overflow: hidden;
}
div::after{
  content: '';
  background: none;
  box-shadow: 0 0 0 9999vh #FFE8A3; /*足夠大的陰影*/
  z-index: -1;
}

效果如下(虛線表示偽元素的邊緣)

圖片圖片

三、徑向漸變

提到圓弧,還可以想到徑向漸變,沒錯,這里通過徑向漸變也能輕易實現(xiàn)弧形卡片效果。

先來看“外凸”的,其實思路和偽元素一樣,先拆分,一個橢圓和一個矩形,對應(yīng)的就是徑向漸變(radial-gradient)和線性漸變(linear-gradient),如下

圖片圖片

用代碼實現(xiàn)就是

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;
}

效果如下(紫色部分是徑向漸變)

圖片圖片

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

圖片圖片

調(diào)整好漸變中心點,用代碼實現(xiàn)就是

div{
  background: radial-gradient(50% 10px at center bottom, transparent 100%,#FFE8A3 0) center bottom;
}

效果如下(全部都是徑向漸變繪制)

圖片圖片

當(dāng)然你也可以隨意改變徑向的弧度和大小,來實現(xiàn)各種不同的效果。

以上所有demo都可以查看以下在線鏈接

  • CSS radius layout (juejin.cn)[1]
  • CSS radius layout (codepen.io)[2]

四、優(yōu)缺點總結(jié)

以上就是本文的全部內(nèi)容了,共介紹了 3 種不同的方式,下面總結(jié)一下各自優(yōu)缺點

  1. border-radius 支持斜杠語法,可以單獨控制圓弧的x、y半徑,實現(xiàn)“外凸”圓弧最簡單,缺點是圓弧不能自定義弧度,也不能實現(xiàn)“內(nèi)凹”效果
  2. 偽元素最符合常規(guī)思維,可以解決以上問題,缺點是需要占用偽元素,略微麻煩
  3. 漸變實現(xiàn)和偽元素拼接思路類似,缺點是語法復(fù)雜,需要熟練掌握漸變語法

[1]CSS radius layout (juejin.cn): https://code.juejin.cn/pen/7307633420241534985

[2]CSS radius layout (codepen.io): https://codepen.io/xboxyan/pen/RwveByx

責(zé)任編輯:武曉燕 來源: 前端偵探
相關(guān)推薦

2010-09-07 16:31:27

CSS

2022-03-16 14:27:49

CSS三角形前端

2014-12-31 17:42:47

LBSAndroid地圖

2021-06-24 08:52:19

單點登錄代碼前端

2021-11-05 21:33:28

Redis數(shù)據(jù)高并發(fā)

2010-03-12 17:52:35

Python輸入方式

2024-07-31 20:38:18

2024-07-01 12:42:58

2018-04-02 14:29:18

Java多線程方式

2010-08-24 14:47:48

CSS居中

2024-07-08 09:03:31

2022-11-03 08:44:24

代理模式Java設(shè)計模式

2012-07-17 09:16:16

SpringSSH

2023-01-09 11:33:25

CSS寫作網(wǎng)格線

2024-05-27 00:20:00

2024-08-13 08:25:16

C#外部程序方式

2010-09-02 16:26:59

CSS命名

2019-11-20 18:52:24

物聯(lián)網(wǎng)智能照明智能恒溫器

2020-11-01 17:10:46

異步事件開發(fā)前端

2021-03-07 10:17:40

RDMA網(wǎng)絡(luò)傳輸網(wǎng)絡(luò)協(xié)議
點贊
收藏

51CTO技術(shù)棧公眾號