CSS實(shí)現(xiàn)弧形卡片的3種方式:打造優(yōu)雅的現(xiàn)代網(wǎng)頁(yè)設(shè)計(jì)
**導(dǎo)語(yǔ):** 在網(wǎng)頁(yè)設(shè)計(jì)中,弧形元素以其柔和而富有動(dòng)態(tài)感的設(shè)計(jì)深受青睞,尤其在卡片設(shè)計(jì)上,弧形邊緣能賦予其獨(dú)特的視覺效果。本文將詳細(xì)介紹利用CSS創(chuàng)建弧形卡片的3種不同方法,包括但不限于CSS border-radius、clip-path及mask屬性,讓您的網(wǎng)頁(yè)更具吸引力。下面我們將通過(guò)實(shí)戰(zhàn)代碼演示每種方法的具體應(yīng)用。
---
### **一、基礎(chǔ)方法:border-radius 弧度控制**
**簡(jiǎn)介:**
`border-radius` 是最常見且兼容性最好的創(chuàng)建圓角或弧形卡片的方式,適用于創(chuàng)建簡(jiǎn)單弧形邊角的卡片設(shè)計(jì)。
```html
<div class="card-rounded">
<!-- 卡片內(nèi)容 -->
</div>
```
```css
.card-rounded {
background-color: #f5f5f5;
width: 200px;
height: 100px;
border-radius: 20px; /* 可根據(jù)需要調(diào)整數(shù)值 */
overflow: hidden;
}
```
上述代碼將創(chuàng)建一個(gè)具有弧形邊角的卡片。通過(guò)調(diào)整 `border-radius` 的值,您可以創(chuàng)建出不同程度的弧形效果,但請(qǐng)注意,這種方法無(wú)法創(chuàng)建非對(duì)稱或復(fù)雜弧形。
---
### **二、進(jìn)階技巧:clip-path 實(shí)現(xiàn)自由形狀**
**介紹:**
`clip-path` 屬性允許我們創(chuàng)建任意形狀的裁剪區(qū)域,從而實(shí)現(xiàn)更為復(fù)雜和定制化的弧形卡片設(shè)計(jì)。
```html
<div class="card-clip-path">
<!-- 卡片內(nèi)容 -->
</div>
```
```css
.card-clip-path {
background-color: #f5f5f5;
width: 200px;
height: 100px;
-webkit-clip-path: circle(50% at right 50%);
clip-path: circle(50% at right 50%);
}
```
上述代碼創(chuàng)建了一個(gè)右半部分呈弧形的卡片。`clip-path` 提供了更多創(chuàng)造性可能,可以創(chuàng)建橢圓、多邊形甚至路徑裁剪等多種弧形效果。然而需要注意的是,`clip-path` 的瀏覽器兼容性不如 `border-radius` 理想。
---
### **三、創(chuàng)新方案:CSS Masks 打造靈活曲線**
**原理:**
CSS Masks 可以通過(guò) `mask-image` 或 `mask-shape` 屬性為元素添加遮罩,同樣可以用來(lái)創(chuàng)建弧形卡片效果。
```html
<div class="card-mask">
<!-- 卡片內(nèi)容 -->
</div>
```
```css
.card-mask {
background-color: #f5f5f5;
width: 200px;
height: 100px;
-webkit-mask-image: radial-gradient(circle, transparent 50%, white 51%);
mask-image: radial-gradient(circle, transparent 50%, white 51%);
}
```
以上代碼利用徑向漸變作為遮罩,實(shí)現(xiàn)了卡片頂部弧形邊緣的效果。CSS Masks 具有高度靈活性,可以用于創(chuàng)建更復(fù)雜的形狀,但它的瀏覽器兼容性也相對(duì)有限。
---
### **結(jié)論與比較**
- **border-radius** 方法最為簡(jiǎn)單易用且兼容性最好,適合日常項(xiàng)目和快速原型設(shè)計(jì);
- **clip-path** 提供了更豐富的形狀裁剪能力,適合需要突破常規(guī)、追求獨(dú)特視覺效果的場(chǎng)景;
- **CSS Masks** 能夠創(chuàng)建基于圖像或者漸變的復(fù)雜蒙版效果,適用范圍較廣,但需要注意舊版本瀏覽器的支持情況。
選擇何種方式實(shí)現(xiàn)弧形卡片取決于項(xiàng)目的實(shí)際需求和兼容性要求。通過(guò)巧妙運(yùn)用這些CSS特性,您可以輕松打造出別具一格的弧形卡片設(shè)計(jì),增添網(wǎng)站的視覺吸引力。
---
**補(bǔ)充實(shí)踐案例:**
對(duì)于一些高級(jí)應(yīng)用場(chǎng)景,您還可以結(jié)合以上技術(shù),比如使用CSS Grid布局和Flexbox進(jìn)行容器布局,同時(shí)利用CSS變量和媒體查詢適應(yīng)不同屏幕尺寸,讓弧形卡片設(shè)計(jì)更加靈活和響應(yīng)式。
切記,在實(shí)際開發(fā)過(guò)程中,務(wù)必關(guān)注瀏覽器兼容性問題,必要時(shí)借助PostCSS、Autoprefixer等工具增強(qiáng)跨瀏覽器兼容性。同時(shí),保持對(duì)新興CSS特性的關(guān)注,與時(shí)俱進(jìn)地更新您的設(shè)計(jì)與開發(fā)技術(shù)棧。
css3之前,并沒有直接的設(shè)置元素圓角的屬性,那如何實(shí)現(xiàn)設(shè)計(jì)圖中的圓角設(shè)定呢?
如:表單demo中的文本框圓角。
一般通過(guò)在PS 軟件中截取上左、上右、下左、下右四個(gè)邊角的圓角圖片,通過(guò)background-position背景圖屬性設(shè)定位置,從而實(shí)現(xiàn)圓角的設(shè)定。
或是將四個(gè)圓角圖片當(dāng)做四個(gè)img標(biāo)簽,通過(guò)position定位屬性找尋設(shè)定的位置,如:
通過(guò)圖片設(shè)定圓角
在IE6、7、8還比較盛行的時(shí)候,如果要兼容到IE瀏覽器,需要使用CSS hack兼容IE瀏覽器版本,高級(jí)瀏覽器可以直接使用border-radius屬性設(shè)定圓角,對(duì)低版本瀏覽器使用圖片定位的方式實(shí)現(xiàn)設(shè)計(jì)圖呈現(xiàn)。但隨著近幾年瀏覽器版本的不斷更新迭代,我們需要做的就是,如果需要兼容低版本瀏覽器,只需保證呈現(xiàn)正常即可,無(wú)需過(guò)分的追求展示效果與設(shè)計(jì)圖的還原度。但實(shí)現(xiàn)的思想在web布局中是很重要的。
查 郭一璞 發(fā)自 凹非寺
量子位 報(bào)道 | 公眾號(hào) QbitAI
HTML不是編程語(yǔ)言,但這并不妨礙精通它的大佬玩出花來(lái)。
普通的前端,用HTML+CSS制作網(wǎng)頁(yè),元素簡(jiǎn)單,工具豐富。
大佬級(jí)前端,用HTML+CSS繪畫,全程不用PS、AI這種圖形化的圖片編輯器,單純敲一行行代碼純手工繪制。
把代碼轉(zhuǎn)換之后,就變成了鮮嫩的水果:
或者畫出洛可可風(fēng)格的古典女性肖像:
還有弗拉芒巴洛克肖像風(fēng)格的人物畫像,充滿了中世紀(jì)的禁欲感:
現(xiàn)代的也有,比如這位在粉色燈光下的著禮服的妹子:
以及充滿者50年代氣息的復(fù)古風(fēng)人物海報(bào):
曲線、光影、漸變,每個(gè)元素都相當(dāng)復(fù)雜。
而且,創(chuàng)作過(guò)程中不用SVG,只用Atom文本編輯器和Chrome開發(fā)者工具。
也就是說(shuō),畫面上的每一條曲線和漸變、每一處高光和陰影、每一根頭發(fā)和睫毛、每一片蕾絲和褶皺,都是一行行代碼從頭敲出來(lái)的!
如此精細(xì)程度和創(chuàng)造力,讓學(xué)美術(shù)的網(wǎng)友感嘆“學(xué)畫畫不如寫代碼”,讓學(xué)計(jì)算機(jī)的同學(xué)覺得“別人寫的這么藝術(shù),一定是我的教科書打開方式不對(duì)”。
真·交叉學(xué)科大佬。
它們的作者,是灣區(qū)前端大神Diana Smith小姐姐,她目前是企業(yè)及軟件開發(fā)商Atlassian的一名資深Web開發(fā)。
Diana在專門討論CSS的網(wǎng)站CSS-Tricks寫下了詳細(xì)的教程。
畫出這樣一個(gè)圖形分成幾步?
如果不用CSS,一般都是直接嵌入這個(gè)特殊的圖形。
如果用CSS,那么就從黑色矩形開始,然后在兩側(cè)加上上兩個(gè)
與白色背景顏色匹配的邊框半徑元素。
先畫出一個(gè)黑色矩形,然后兩邊用圓弧遮擋。有了基礎(chǔ)形狀后,下一步就是給它添上漸變的背景。但是如果用矩形方式填充,得到的效果就是這樣的:
Diana的辦法是:在保留矩形的同時(shí),加上兩個(gè)彎曲的div,把凹進(jìn)去的部分也填充上。
最后完整的代碼是這樣的:
div{
width: 500px;
height: 350px;
background: #000;
position: relative;
&::after, &::before{
width: 20%;
height: 100%;
position: absolute;
top: 0;
z-index:2;
content: "";
background: #1e5799;
background: -moz-linear-gradient(top, #1e5799 0%, #7db9e8 100%);
background: -webkit-linear-gradient(top, #1e5799 0%,#7db9e8 100%);
background: linear-gradient(to bottom, #1e5799 0%,#7db9e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 );
}
&::after{
border-radius: 100% 0% 0% 100%;
right: 0;
}
&::before{
border-radius: 0 100% 100% 0;
left: 0;
}
}
body{
background: #1e5799;
background: -moz-linear-gradient(top, #1e5799 0%, #7db9e8 100%);
background: -webkit-linear-gradient(top, #1e5799 0%,#7db9e8 100%);
background: linear-gradient(to bottom, #1e5799 0%,#7db9e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 );
}
你也可以去這個(gè)完成查看CSS樣式的實(shí)際運(yùn)行效果:
https://codepen.io/jean-jordan/pen/KeKaBw
剛剛我們畫的那幅畫像不像人的脖子?好的,我們?cè)倩氐饺讼癞嬌?,Diana繪制人物的脖子也是類似的過(guò)程。
在上面這張圖里,我們看到了Diana如何逐步改形狀,最終得到了油畫中人物的脖子。
但是僅僅會(huì)畫各種幾何形狀,是無(wú)法生成藝術(shù)品的,Diana總結(jié)了她在繪圖中的5個(gè)重要CSS屬性。
1、邊界半徑(border-radius)
邊界半徑是為了讓矩形的邊角過(guò)渡得更自然,對(duì)于大多數(shù)網(wǎng)頁(yè)開發(fā)者來(lái)說(shuō),只需一個(gè)參數(shù)border-radius,可以設(shè)定不同的半徑數(shù)值。
border-radius: 15px 10px 40px 30px / 40px 10px 15px 30px;
2、盒子陰影(box-shadow)
對(duì)多個(gè)盒子陰影進(jìn)行分層是增加深度的最佳方法之一??蜿幱皩⒄掣降絟tml容器的邊緣,也會(huì)沿著邊界半徑定義的邊緣。
box-shadow: 6px -11px 20px 1px red, -15px -15px 5px -10px blue, inset 5px 5px 35px 10px green;
開發(fā)者可以指定模糊半徑,以及陰影是向內(nèi)延伸還是向外延伸。
3、變形(transform)
變形的主要方式有:旋轉(zhuǎn)(rotate)、縮放(scale)和傾斜(skew)
transform: rotate(-45deg)
transform: scale(0.7, 1.3)
transform: skew(25deg, 30deg);
此外還有透視,讓物體產(chǎn)生遠(yuǎn)小近大的視覺效果,或者是僅僅為畫出一個(gè)梯形。
transform: perspective(10px) rotateY(5deg);
4、線性梯度(linear-gradient)和徑向梯度(radial-gradient)
線性梯度用于定義一個(gè)方向上的漸變效果,徑向梯度用于定義圓和橢圓形的漸變效果
background-image: linear-gradient(0deg, blue, transparent 60%),
radial-gradient(circle at 70% 30%, purple, transparent 40%);
5、層疊(overflow)
層疊是一種將大量雜亂元素填充到一個(gè)整齊的包中的方法,可以創(chuàng)建一些有趣的形狀。在變形那部分的基礎(chǔ)上使用hidden參數(shù),可以把邊緣遮蓋起來(lái)。
overflow: hidden;
以上5種元素缺一不可,隨便少一種都會(huì)產(chǎn)生怪異的效果。
不過(guò)即使這樣,也很有抽象藝術(shù)的美感,仿佛在看畢加索的作品。
不過(guò),由于這是一個(gè)純個(gè)人藝術(shù)創(chuàng)作,Diana小姐姐并不關(guān)心瀏覽器適配性。
因此,這些代碼在Chrome里可以完美展現(xiàn),但如果用其他瀏覽器打開,可能就會(huì)出現(xiàn)不一樣的效果。
比如,MAC上的Safari瀏覽器打開,妹子的眼睛就方了:
肩膀上的高光,變成了一個(gè)大圈圈:
胸前的禮服上,也被潑了一道墨:
如果用早期的Chrome打開,會(huì)出現(xiàn)驚悚的頭身分離的效果:
早期的Opera瀏覽器,打開之后臉方了:
Windows 7上從IE 6到IE 11,顯示出來(lái)的都是這個(gè)鬼樣子:
濃重的線條,甚至有點(diǎn)抽象藝術(shù)的感覺。
同樣是早期IE,放到Mac上也一樣鬼畜,這是IE 5.1.7的效果:
還有人試了試,在Windows 98系統(tǒng)的IE 7瀏覽器打開,會(huì)變成非常像素風(fēng)的樣子:
最恐怖的是三星手機(jī)上的夜間模式打開:
連人種都變了?。?/p>
其他的幾張畫,換個(gè)瀏覽器打開也比較鬼畜。
妹子你bra里的鋼圈出來(lái)了?。?/p>
拉夫領(lǐng)變得透明而有光澤,領(lǐng)口的蕾絲干脆斷掉了,仿佛是逃難時(shí)期的肖像畫。
最后,如果你在iPhone上裝了Chrome,出來(lái)的也是Safari的效果,想看完整效果的話,請(qǐng)?jiān)诎沧渴謾C(jī)或者電腦的Chrome上打開。
因此,有不少網(wǎng)友都覺得,這幾幅畫可以當(dāng)成瀏覽器測(cè)試項(xiàng)目,一試就能知道內(nèi)核用的是誰(shuí)家的。
CSS太難,學(xué)不會(huì)?不要緊,雖然我們不能把代碼變成圖片,但是可以把圖片變成代碼啊。
沒錯(cuò),就是ASCII藝術(shù),早在DOS時(shí)期,就有人用命令行界面來(lái)顯示圖片。直到今天已成為一種流行的互聯(lián)網(wǎng)文化。
用單色字符來(lái)畫出世界名畫已經(jīng)不算新鮮事。最近又有個(gè)碼農(nóng)開發(fā)了一個(gè)新的項(xiàng)目Primg,讓任何一幅畫都可以用質(zhì)數(shù)來(lái)表示。
比如蒙拉麗莎,就可以用一個(gè)3萬(wàn)位的質(zhì)數(shù)二進(jìn)制方式繪制出來(lái)。
作者的GitHub:https://github.com/cyanharlow
作者博客主頁(yè):https://diana-adrianne.com/
教程:https://css-tricks.com/solving-lifes-problems-with-css/
用質(zhì)數(shù)生成任意ASCII藝術(shù):https://github.com/geonnave/primg
— 完 —
量子位 QbitAI · 頭條號(hào)簽約作者
關(guān)注我們,第一時(shí)間獲知前沿科技動(dòng)態(tài)
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。