66 個(gè)特效,是我歷時(shí)4個(gè)多月在油管一個(gè)一個(gè)跟著敲出來的,為了加強(qiáng)記憶,每個(gè)練習(xí),我都錄制了視頻,在這里分享出來給大家。大家可能又會(huì)調(diào)侃了,你是工作不飽和吧,有時(shí)間做這些。其實(shí),我目前工作還是挺飽和的,都是擠出來的。我們是9點(diǎn)上班,我基本7點(diǎn)半就到公司自學(xué)了,這樣我就有一個(gè)半小時(shí)的時(shí)間來做這些了。
對(duì)于 CSS 評(píng)價(jià),無論是在論壇還是身邊的人,我聽到最多的是學(xué) CSS 這些花里胡哨沒啥用,實(shí)際項(xiàng)目中又用不到。聽到這些心里還是挺實(shí)受挫的,有時(shí)候會(huì)懷疑自己,我學(xué)習(xí)的方向是不是錯(cuò)了。但在幾次的項(xiàng)目需要用到一些特效,我都能很快的找到思路并做出來,我想這是得益于,我平時(shí)所學(xué)的這些特效積累出來的。
現(xiàn)在我不在困惑我所學(xué)的東西,因?yàn)閷W(xué)習(xí)成長(zhǎng)是你自己事情,而不是別人在意的眼光。
這個(gè)系列我會(huì)一直學(xué)習(xí)下去,第一季 66 節(jié)課,已經(jīng)更完畢,所有的源碼都在下面的地址:
https://blog.csdn.net/qq449245884/category_9873715.html
效果
圖片描述
視頻地址1:https://www.ixigua.com/i6807702906041532939/
視頻地址2:https://www.bilibili.com/video/BV1Y7411m7b6
效果
圖片描述
視頻地址一:https://www.ixigua.com/i6807982622866670083/
視頻地址一:https://www.bilibili.com/video/BV1V741117Gm/
效果
圖片描述
視頻地址一:https://www.bilibili.com/video/BV1f7411Q7JD/視頻地址二:https://www.ixigua.com/i6809102422514860548/
效果
圖片描述
視頻地址一:https://www.ixigua.com/i6809529914975322632/
視頻地址二:https://www.bilibili.com/video/BV1Q7411D7LH/
效果
圖片描述
視頻地址一:https://www.bilibili.com/video/BV1nC4y1s7Dw/
視頻地址二:https://www.ixigua.com/i6809937347405152781/
效果
圖片描述
視頻地址一:https://mp.toutiao.com/profile_v3/xigua/content-manage
視頻地址二:https://www.bilibili.com/video/BV1mt4y1m7Nw/
效果
圖片描述
視頻地址一:https://www.bilibili.com/video/BV1za4y1t73c/
視頻地址二:https://www.ixigua.com/i6812147372131353091/
效果
圖片描述
視頻地址一:https://www.ixigua.com/i6812840842902897164/
視頻地址二:https://www.bilibili.com/video/BV1Le41147w9/
圖片描述
視頻地址一:https://www.bilibili.com/video/BV17e41147Gr/
視頻地址二:https://www.ixigua.com/i6813181916829712908/
效果
圖片描述
視頻地址一:https://www.bilibili.com/video/BV1YC4y1s7kG/
視頻地址一:https://www.ixigua.com/i6814296955070448135/
效果
圖片描述
視頻地址一:https://www.bilibili.com/video/BV1AA411b7tA/
視頻地址二:https://www.ixigua.com/i6814028560034955780/
效果
圖片描述
視頻地址一:https://www.bilibili.com/video/BV1YC4y1s7kG/
視頻地址一:https://www.ixigua.com/i6814703631879635467/
效果
圖片描述
視頻地址一:https://www.bilibili.com/video/BV1pQ4y1K76g/
視頻地址一:https://www.ixigua.com/i6815132991329665539/
效果
圖片描述
視頻地址一:https://www.ixigua.com/i6815506102424175116/
clipboard.png
視頻地址一:https://www.bilibili.com/video/BV1mT4y1G7cY/
視頻地址二:https://www.ixigua.com/i6815871539683000835/
效果
圖片描述
視頻地址:https://www.ixigua.com/i6816244424448672260/
效果
圖片描述
視頻地址一:https://www.bilibili.com/video/BV1qp4y1X7Jz/
視頻地址二:https://www.ixigua.com/i6816614062399422980/
效果
視頻地址一:https://www.bilibili.com/video/BV1J64y1T7XV/
視頻地址二:https://www.ixigua.com/i6817737160876098056/
效果
視頻地址一:https://www.bilibili.com/video/BV1UQ4y1K7oz/
視頻地址二:https://www.ixigua.com/i6818096482898412036/
效果
視頻地址一:https://www.bilibili.com/video/BV1ce411s7AG/
視頻地址二:https://www.ixigua.com/i6818471295219401219/
效果
視頻地址:https://www.ixigua.com/i6818851166034592267/
效果:
視頻地址一:https://www.bilibili.com/video/BV1TV411d7F6/
視頻地址二:https://www.ixigua.com/i6819215565555499532/
效果:
視頻地址一:https://www.bilibili.com/video/BV1Ak4y1k7Dm/視頻地址二:https://www.ixigua.com/i6820325547432739339/
效果:
視頻地址一:https://www.bilibili.com/video/BV15K411577L/
視頻地址二:https://www.ixigua.com/i6821071022444249611/
效果:
視頻演示地址一:https://www.bilibili.com/video/BV1C54y1Q7hd/
視頻演示地址二:https://www.ixigua.com/i6821449649967071748/
效果:
視頻地址一:https://www.bilibili.com/video/BV1Qf4y1m7BY/
視頻地址二:https://www.ixigua.com/i6822923946040492556/
效果:
視頻地址一:https://www.bilibili.com/video/BV1uA411t78K/
視頻地址二:https://www.ixigua.com/i6823670426938376716/
效果:
視頻地址一:https://www.bilibili.com/video/BV1qz411z7Eq/視頻地址二:https://www.ixigua.com/i6824042494213227012/
效果:
視頻地址一:https://www.bilibili.com/video/BV1dK411W7De/
視頻地址二:https://www.ixigua.com/i6825524219757986318/
效果:
視頻地址一:https://www.bilibili.com/video/BV1de411p7gc/
視頻地址二:https://www.ixigua.com/i6825893346527937038/
效果:
視頻地址一:https://www.bilibili.com/video/BV1mK411W7pG/
視頻地址二:https://www.ixigua.com/i6826645569625129484/
效果:
視頻地址一:https://www.bilibili.com/video/BV13K4y1t7zh
視頻地址二:https://www.ixigua.com/i6827005668893917708/
效果:
視頻地址一:https://www.bilibili.com/video/BV1Bk4y1k7QY
視頻地址二:https://www.ixigua.com/i6828124892492202500/
效果:
視頻地址一:https://www.bilibili.com/video/BV1ta4y1e7WP
視頻地址二:https://www.ixigua.com/i6828497506532327939/
效果:
視頻地址一:https://www.bilibili.com/video/BV11z4y1R74N
視頻地址二:https://www.ixigua.com/i6828857444907614723/
效果:
視頻地址一:https://www.bilibili.com/video/BV1Pt4y1y7K2/
視頻地址二:https://www.ixigua.com/i6829582434183414283/
效果:
視頻地址一:https://www.bilibili.com/video/BV1ag4y1i7E9/
視頻地址二:https://www.ixigua.com/i6830722031856648707/
效果
視頻演示地址一:https://www.bilibili.com/video/BV1Xz411v7X9/
視頻演示地址二:https://www.ixigua.com/i6831832169350955531/
效果:
視頻地址一:https://www.bilibili.com/video/BV1r54y1D7Tk/
視頻地址二:https://www.ixigua.com/i6832204729552994819/
效果:
視頻地址一:https://www.bilibili.com/video/BV1iV411r7SD/
視頻地址二:https://www.ixigua.com/i6833316731788722701/
效果
視頻地址一:https://www.bilibili.com/video/BV1tQ4y1P7DW/
視頻地址二:https://www.ixigua.com/i6833685696041976323/
效果
視頻地址:https://www.ixigua.com/i6834042168265409027/
效果
視頻地址一:https://www.bilibili.com/video/BV17p4y1D7UA/
視頻地址二:https://www.ixigua.com/i6834441977069568525/
效果:
視頻地址一:https://www.bilibili.com/video/BV1vQ4y1P7SW/
視頻地址二:https://www.ixigua.com/i6835920426430890499/
效果:
視頻地址一:https://www.bilibili.com/video/BV1Sp4y1S7y7/
視頻地址二 :https://www.ixigua.com/i6836281379467035147/
效果:
視頻地址一:https://www.bilibili.com/video/BV1ef4y127k5/
視頻地址二:https://www.ixigua.com/i6836657427052495373/
效果:
視頻地址一:https://www.bilibili.com/video/BV15k4y1z7gW/
視頻地址二:https://www.bilibili.com/video/BV15k4y1z7gW/
效果:
視頻地址一:https://www.bilibili.com/video/BV1TT4y1J7qf/
視頻地址二:https://www.ixigua.com/i6838419811442098700/
效果:
視頻地址一:https://www.bilibili.com/video/BV1fv411q7AT/
視頻地址二:https://www.ixigua.com/i6838884535929668107/
效果:
視頻地址一:https://www.bilibili.com/video/BV1Df4y1y7am/
視頻地址二:https://www.ixigua.com/i6839252135687750156/
效果:
視頻地址一:https://www.ixigua.com/i6840006472894513676/
視頻地址二:https://www.bilibili.com/video/BV15A411i7dU/
效果:
視頻地址一:https://www.ixigua.com/i6841112747518722568/
視頻地址二:https://www.bilibili.com/video/BV1hv411677o/
效果:
視頻地址一:https://www.ixigua.com/i6841112747518722568/
視頻地址二:https://www.bilibili.com/video/BV1pa4y1Y7n9/
效果:
視頻地址一:https://www.ixigua.com/i6841854545706877447/
視頻地址二:https://www.bilibili.com/video/BV1iC4y1a7wW/
效果:
視頻地址一:https://mp.toutiao.com/profile_v3/xigua/content-manage
視頻地址二:https://www.bilibili.com/video/BV1ZK411n7v7/
效果:
視頻地址一:https://www.ixigua.com/i6843709475413557764/
視頻地址二:https://www.bilibili.com/video/BV1oi4y1G7xz/
效果:
效果:
視頻地址一:https://www.ixigua.com/i6844451067896267278/
視頻地址二:https://www.bilibili.com/video/BV1bp4y1U7fS/
效果
視頻地址一:https://www.ixigua.com/i6845126624082395656/
視頻地址二:https://www.bilibili.com/video/BV1bA411i75h/
效果
視頻地址一:https://www.ixigua.com/6846310483146998275/
視頻地址二:https://www.bilibili.com/video/BV1B5411Y7A5/
效果
視頻地址一:https://www.ixigua.com/6847050168638898692/
視頻地址二:https://www.bilibili.com/video/BV1iA411e7Dr/
效果
效果
視頻地址一:https://www.ixigua.com/6848908900436017676/
視頻地址二:https://www.bilibili.com/video/BV1zK4y1s7it/
效果
視頻地址一:https://www.ixigua.com/6849270738138956299/
視頻地址二:https://www.bilibili.com/video/BV1g5411e7yQ/
效果
視頻地址一:https://www.ixigua.com/6850016080396714499/
視頻地址二:https://www.bilibili.com/video/BV1wK4y1x7BY/
效果
視頻地址一:https://www.ixigua.com/6850386816432865806/
視頻地址二:https://www.bilibili.com/video/BV1Jv411q7oh/
人才們的 【三連】 就是小智不斷分享的最大動(dòng)力,如果本篇博客有任何錯(cuò)誤和建議,歡迎人才們留言,最后,謝謝大家的觀看。
所有特效源碼:https://blog.csdn.net/qq449245884/category_9873715.html
馬上我們就要進(jìn)入下一個(gè)階段,也就是HTML和CSS實(shí)現(xiàn)前端界面的階段了,想必很多小伙伴都想給自己的頁面加點(diǎn)酷炫的特效,今天,我就給大家整理了一些非常酷炫的文字特效來裝點(diǎn)你的頁面!有些是從網(wǎng)絡(luò)上找的,有些是自己寫出來的
這里介紹一點(diǎn)寫這些特效時(shí)需要用到的屬性,(帶-webkit-開頭的是只有Safari和Chrome等使用webkit或chromium內(nèi)核的瀏覽器才可以使用)
這個(gè)屬性用于設(shè)置文本的填充色,與直接設(shè)置顏色(color屬性)不同,它可以設(shè)置transparent(透明)
這個(gè)屬性用于設(shè)置文字的描邊,第一個(gè)值寫描邊線的寬度,第二個(gè)寫描邊線的顏色
文字陰影,這個(gè)屬性由四個(gè)部分組成:第一個(gè)值寫陰影在x軸上的偏移;第二個(gè)值是在y軸上的偏移;第三個(gè)值是模糊程度(可以寫0~?)值越大,越模糊,為0時(shí)不模糊;第四個(gè)值是陰影顏色。與box-shadow基本一致
注意:這四個(gè)值直接不需要逗號(hào)分隔,它們四個(gè)作為一個(gè)整體參數(shù)。同時(shí)也可以寫多個(gè)參數(shù)用逗號(hào)隔開來實(shí)現(xiàn)更強(qiáng)的效果(下方有多個(gè)效果都運(yùn)用到了這個(gè)技巧)
將背景按照設(shè)定的參數(shù)裁切,一般書寫text(即按照文本的樣式裁切,僅保留文本的部分)然后將文本設(shè)為透明(webkit-text-fill-color屬性)就能實(shí)現(xiàn)漸變色文字等
下面就是一些字體實(shí)例了
.loukong{ /* 設(shè)置文字為透明,設(shè)置文本描邊*/ background-color: #00c4ff; -webkit-text-fill-color: transparent; -webkit-text-stroke:1px #000; }
.liti{ /* 文字左上設(shè)置多層淺色陰影,右下設(shè)置多層暗色陰影,文字色同背景色 */ background-color: #d2d500; color: #d2d500; text-shadow: -1px -1px 0px #e6e600,-2px -2px 0px #e6e600, -3px -3px 0px #e6e600,1px 1px 0px #bfbf00,2px 2px 0px #bfbf00,3px 3px 0px #bfbf00; }
.nihong{ /* 深色底色,淺色文字,多層淺色文字陰影,彌散大 */ background-color: darkgray; color: white; text-shadow: 0px 0px 15px #00FFFF,0px 0px 15px #00FFFF,0px 0px 15px #00FFFF; }
英文或者筆畫稀疏的文本比較適合,筆畫多看起來會(huì)不太好
.chongdie{ /* 兩層背景,一層與被背景色相同,一層與文字色相同 */ background-color: gray; color: #eee; text-shadow: 5px 5px 0 #666, 7px 7px 0 #eee; }
.huanse{ /* 兩層背景,沒啥技巧 */ background-color: darkgray; color: white; text-shadow: 1px 1px 0px #0000FF,2px 2px 0px #0000FF,-1px -1px 0px #E31B4E,-2px -2px 0px #E31B4E; }
.fangsheng{ /* 要把陰影與大小配合好,一般來說大小都是偏大時(shí)采用 */ font-family: "Arial Rounded MT Bold", "Helvetica Rounded", Arial, sans-serif; text-transform: uppercase;/* 全開大寫 */ font-size: 92px; color: #f1ebe5; text-shadow: 0 8px 9px #c4b59d, 0px -2px 1px #fff; font-weight: bold; letter-spacing: -4px; background: linear-gradient(to bottom, #ece4d9 0%,#e9dfd1 100%); }
因?yàn)樾枰玫奖尘安们校?webkit-background-clip),所以需要再嵌套一個(gè)背景div
.jianbian{ background-color: #009195; } .jianbian-inner{ background: linear-gradient(90deg,#f88,#88f); -webkit-background-clip: text; -webkit-text-fill-color: transparent; /* -webkit-text-stroke: 1px #000000; */ }
以上就是全部?jī)?nèi)容了,靈活運(yùn)用css的屬性,就能創(chuàng)造出很多你想得到的和想都想不到的特效,甚至一些連寫腳本都很難實(shí)現(xiàn)的特效,所以,努力探索css吧,沖沖沖!
轉(zhuǎn)自簡(jiǎn)書:?jiǎn)桃欢2020強(qiáng)化班
原文鏈接:https://www.jianshu.com/p/b7fd3cf53924
靠CSS 就寫出創(chuàng)意十足的設(shè)計(jì)是很困難的。到目前為止,就創(chuàng)建視覺特效而言,CSS 這門語言還是存在諸多限制。想用CSS 寫出Photoshop 般的效果,還差得很遠(yuǎn),個(gè)別情況下仍需要各種奇奇怪怪的招術(shù)助陣。
以前,要繞過種種限制,不得不犧牲簡(jiǎn)潔性(加入大量元素,只為了展示效果的細(xì)節(jié)),或者犧牲性能(為了展現(xiàn)視覺效果,頁面中放了太多圖片及JavaScript)。
今天,我們就來介紹幾種能夠通過CSS 實(shí)現(xiàn)的特效。其中用到的一些CSS 特性還很新,瀏覽器支持不充分,但也有非常成熟的。很多特性在SVG 中已經(jīng)存在很多年了,最近才加入到CSS 中。
這些技術(shù)能夠提升你的設(shè)計(jì),就像做菜添加了調(diào)味料,平淡無奇的一盤菜也能頓時(shí)濃香四溢。使用它們的時(shí)候也得小心謹(jǐn)慎,必須考慮漸進(jìn)式增強(qiáng)。另外也要知道,其中一些技術(shù)會(huì)有相關(guān)的bug。即使在支持它們的瀏覽器中,它們也通常還并不成熟。
圖1 展示了一個(gè)頁面(一些天體的介紹),其中包含很多視覺特效。就在幾年前,要通過CSS 實(shí)現(xiàn)這些效果幾乎是不可能的。整個(gè)頁面布局,就算能做出來,也要借助大量圖片和額外的HTML 元素。
今天,這些效果已經(jīng)能夠在很多瀏覽器中通過CSS 來呈現(xiàn)了,即使做不到也能平穩(wěn)地退化為可用版本。在一個(gè)頁面上集成大量視覺特效仍須謹(jǐn)慎,因?yàn)榭赡茉斐尚阅荛_銷,代價(jià)有大有小。
盡管如此,通過CSS 來完成它們?nèi)匀挥泻芏嗪锰帲驗(yàn)榭梢詼p少不必要的標(biāo)記,而且維護(hù)起來比較容易。此外,隨著瀏覽器支持相應(yīng)的規(guī)范,性能也會(huì)越來越好。
圖1 使用了很多視覺特效的頁面
接下來,我們就以這個(gè)“觀星指南”頁面作為例子,逐個(gè)講解其中涉及的技術(shù)點(diǎn)。
大家可能都知道,網(wǎng)頁布局基本上都是由矩形構(gòu)成的,CSS Shapes 是一個(gè)新標(biāo)準(zhǔn),旨在讓W(xué)eb 設(shè)計(jì)者能使用各種形狀。形狀元素不僅會(huì)影響界面的外觀,還會(huì)影響頁面的內(nèi)容流。
細(xì)說形狀
CSS Shapes 包含兩組新屬性,一組用于設(shè)置影響盒子中內(nèi)容的形狀,另一組用于設(shè)置影響形狀元素周邊內(nèi)容流的形狀。在圖2 中,我們看到一個(gè)被設(shè)置為圓形的形狀。其中左邊的圖形展示了外部形狀如何影響周邊的內(nèi)容,而右邊的圖形展示了圓形中的內(nèi)容如何受到內(nèi)部形狀的影響。
圖2 外部形狀與內(nèi)部形狀
這兩種形狀分別由不同級(jí)別的CSS Shapes 規(guī)范定義。其中shape-outside 屬性(在CSS Shapes Level 1 中定義)是唯一相對(duì)比較成熟的。本文不涉及shape-inside,因?yàn)槟壳斑€沒有瀏覽器實(shí)現(xiàn)它,也許在不久的將來會(huì)有吧。
shape-outside 屬性只能應(yīng)用給浮動(dòng)元素。這個(gè)屬性不改變?cè)刈陨淼耐庥^,只會(huì)通過設(shè)置形狀影響其外部?jī)?nèi)容流。
在我們例子中的“Moon”部分,通過設(shè)置shape-outside: circle();實(shí)現(xiàn)了文本流環(huán)繞月亮圖片的效果(見圖3)。
.fig-moon { float: right; max-width: 40%; shape-outside: circle(); }
圖3 文本圍繞月亮圖片周圍的圓形實(shí)現(xiàn)了繞排
在解釋形狀構(gòu)造原理之前,先了解一下shape-outside 如何影響布局。圖片文件本身的背景是黑色的,如果把這一區(qū)塊的背景改成其他顏色,我們會(huì)看得更清楚(見圖4)。圖片本身還是方形的,但文本流環(huán)繞著其中的圓形。在不支持CSS 形狀的瀏覽器中,文本會(huì)像往常一樣環(huán)繞矩形。
注意:如圖4 所示,文本流只繞排在浮動(dòng)元素的左側(cè)。只能讓形狀的一側(cè)影響文本的行盒子。即使形狀右側(cè)有空間,文本也不會(huì)填進(jìn)去。
1. 形狀函數(shù)
前面例子中的shape-outside 屬性使用了一個(gè)值:circle()。這是一個(gè)形狀函數(shù),類似的形狀函數(shù)還有ellipse()、polygon()、inset()。前兩個(gè)分別用于定義橢圓形和多邊形,inset()則表示嵌入在盒子邊界內(nèi)的矩形,也可以指定圓角,算是CSS 2.1 中clip 屬性的加強(qiáng)版,只是語法不同而已。
此處圓形和橢圓形的語法,類似于第5 章的放射性漸變的大小及位置的語法:
.shape-circle { /* 圓形接受一個(gè)半徑值和一個(gè)位置值 */ shape-outside: circle(150px at 50%); } .shape-ellipse { /* 橢圓形接受兩個(gè)半徑值和一個(gè)位置值 */ shape-outside: ellipse(150px 40px at 50% 25%); }
與漸變函數(shù)類似,圓形和橢圓形函數(shù)也有合理的默認(rèn)值。前面月亮圖片的circle()函數(shù)并未傳入?yún)?shù),而默認(rèn)的參數(shù)是以元素中心為圓心,以最近邊為半徑。
inset()函數(shù)需要傳入一組長(zhǎng)度值,分別表示到上、右、下、左邊的距離,很像margin 和padding 簡(jiǎn)寫。同樣,1~3 個(gè)值的外邊距和內(nèi)邊距簡(jiǎn)寫規(guī)則在這里也適用。此外,還可以通過round關(guān)鍵字指定圓角,隨后是半徑值,與border-radius 屬性的類似:
.shape-inset { /* 距離外部盒子的上、下邊各20 像素, * 距離外部盒子的左、右邊各30 像素, * 還有半徑為10 像素的圓角 */ shape-outside: inset(20px 30px round 10px); }
相對(duì)復(fù)雜一些的是polygon()函數(shù)。這個(gè)函數(shù)接受一系列坐標(biāo)對(duì),用于在盒子表面指定多個(gè)點(diǎn),坐標(biāo)相對(duì)于盒子的左上角,最終把各個(gè)點(diǎn)連接起來就是要?jiǎng)?chuàng)建的形狀。在“Planets”部分,我們?yōu)橥列莿?chuàng)建了一個(gè)多邊形。
創(chuàng)建多邊形最簡(jiǎn)單的一種方式就是使用CSS Shapes Editor 插件,它支持Chrome 和Opera。Chrome 和Opera 都支持CSS Shapes,而且會(huì)在檢查形狀元素時(shí)給出預(yù)覽。這個(gè)插件會(huì)添加額外的工具,因此既可以通過它看到形狀如何影響頁面,也可以通過創(chuàng)建并拖動(dòng)控制點(diǎn)來創(chuàng)建新形狀(見圖5)。
圖5 在Chrome 中通過Shapes Editor 插件繪制的形狀
然后就可以把得到的多邊形復(fù)制粘貼到代碼中:
.fig-planet { float: right; max-width: 65%; shape-outside: polygon(41.85% 100%, 22.75% 92.85%, 5.6% 73.3%, 0.95% 52.6%, 5.6% 35.05%, 21.45% 17.15%, 37.65% 12.35%, 40% 0, 100% 0%, 100% 100%); }
多邊形中每個(gè)點(diǎn)的坐標(biāo)以百分比表示,這樣可以保證最大的靈活度。當(dāng)然也可以在這里使用任意長(zhǎng)度值,比如像素、em,甚至calc()表達(dá)式。
2. 形狀圖片
基于復(fù)雜的圖片創(chuàng)建多邊形會(huì)非常麻煩。好在我們可以直接在圖片的源文件上基于透明度來創(chuàng)建形狀。比如,可以比照預(yù)期的形狀新創(chuàng)建一張圖片。但土星的圖片已經(jīng)是帶透明度的PNG格式了,因此可以直接通過它來生成形狀。我們要做的就是把shape-outside 的值由polygon()函數(shù)修改為指向該圖片的url()函數(shù):
.fig-planet { float: right; max-width: 65%; shape-outside: url(img/saturn.png); }
如果在Chrome 開發(fā)者工具里檢查這張圖片,會(huì)看到如圖6 所示的模樣。可以看到,圖片的透明度數(shù)據(jù)被用于生成形狀了。
圖6 圖片透明區(qū)域的輪廓被用于生成形狀
提示:只通過瀏覽器打開HTML 文件是不行的,就算瀏覽器支持CSS Shapes 也不行。必須通過Web 服務(wù)器取得這個(gè)頁面,這樣引用的圖片才會(huì)帶有合適的HTTP 首部信息,告訴瀏覽器該圖片與CSS 來自同一個(gè)域。這種安全機(jī)制是較新的瀏覽器才有的,是為了防止引用的文件對(duì)你的計(jì)算機(jī)造成危害。
默認(rèn)情況下,形狀輪廓會(huì)沿圖片完全透明區(qū)域的邊緣生成,但這個(gè)值可以通過shape-imagethreshold 屬性來修改。默認(rèn)值是0.0(完全透明),而較大的值(最大為1.0)意味著較高的不透明度也可以用于生成形狀邊界。比如,修改土星圖片的不透明度閾值為0.9,則半透明的土星環(huán)將不再被包含在形狀內(nèi),結(jié)果文本會(huì)覆蓋其上(見圖7)。
.fig-planet { float: right; max-width: 65%; shape-outside: url(img/saturn.png); shape-image-threshold: 0.9; }
圖7 使用shape-image-threshold 提高不透明度閾值后,原來圖片中半透明的部分在生
3. 形狀盒子與邊距
除了使用形狀函數(shù)或圖片,還可以使用元素的參照盒子來生成形狀。乍一聽好像有點(diǎn)不對(duì),畢竟元素盒子都是方形的。不過,形狀也能依照?qǐng)A角生成。
比如,以前面的月亮圖片為例,如果我們想改變區(qū)塊背景的顏色,同時(shí)也去掉圖片周圍的黑色區(qū)域(如圖11-8 所示),那么可以在圖片上使用border-radius 來創(chuàng)建圓形。
.fig-moon { float: right; max-width: 40%; border-radius: 50%; }
圖8 給月亮圖片應(yīng)用border-radius
僅有圓角邊框還不能生成形狀,還得通過shape-outside 屬性告訴瀏覽器,以border-box作為生成形狀的依據(jù)。
.fig-moon { float: right; max-width: 40%; border-radius: 50%; shape-outside: border-box; }
這樣外部形狀就變成了環(huán)繞元素邊框盒子的圓形。其他能生成形狀的參照盒子還有content-box、padding-box 和margin-box。margin-box 是個(gè)例外。因?yàn)樾螤钍腔诟?dòng)區(qū)域的,浮動(dòng)區(qū)域也包含外邊距,所以這個(gè)關(guān)鍵字是專門為形狀定義的,并沒有box-sizing: margin-box 這種用法。
對(duì)于形狀而言,參照盒子為margin-box 時(shí),形狀仍然會(huì)參照?qǐng)A角邊框,但這樣一來就可以像定義常規(guī)的外邊距一樣,給月亮圖片周圍添加一些邊距了。
.fig-moon { float: right; max-width: 40%; border-radius: 50%; shape-outside: margin-box; margin: 2em; }
這樣,文本會(huì)環(huán)繞著弧形的外邊距形狀排布。如果在Chrome 開發(fā)者工具中檢查圖片,可以看到此時(shí)形狀的樣子,還有原始的外邊距(見圖9)。
圖9 將margin-box 作為形狀的參照后,可以為形狀設(shè)置外邊距
如果想給更復(fù)雜的土星圖片添加外邊距,可以使用另一個(gè)屬性shape-margin,這個(gè)屬性用于給整個(gè)形狀添加外邊距,與創(chuàng)建形狀的方法無關(guān)(見圖10)。
.fig-planet { max-width: 65%; shape-outside: url(img/saturn.png); shape-margin: 1em; }
圖10 為土星形狀添加shape-margin 屬性
CSS 形狀雖然可以影響周圍文本流,卻不允許你修改元素自身的外觀。添加圓角邊框只是視覺上改變?cè)匦螤畹囊环N方式。實(shí)際上,通過把元素的部分區(qū)域變透明,是可以影響元素自身形狀的。
剪切(clipping)使用路徑形狀定義硬邊界,可以基于該邊界完全切換元素的可見性。蒙版(masking)不太一樣,它用于將元素的某些區(qū)域設(shè)置為更透明或更不透明。剪切會(huì)影響對(duì)象的響應(yīng)區(qū)域,而蒙版不會(huì)。比如要觸發(fā)懸停,鼠標(biāo)必須移到剪切后元素的可見區(qū)域。而對(duì)于加了蒙版的元素,無論鼠標(biāo)下面的區(qū)域是否可見,只要位于該元素上,都會(huì)激活:hover 狀態(tài)。
一、剪切
剪切最早是在CSS 2.1 中通過clip 屬性引入的。但這個(gè)屬性只能應(yīng)用給絕對(duì)定位的元素,而且只能把這些元素剪切為矩形(使用rect()函數(shù))。沒勁!
好在新的clip-path 屬性提供了更多選擇。它可以使用CSS 形狀中的基本形狀函數(shù)定義如何剪切元素。它還能使用SVG 文檔剪切元素,只要通過URL 引用一個(gè)<clipPath>元素即可。
下面從使用形狀函數(shù)定義剪切路徑開始。這個(gè)特性之前只有Blink 和WebKit 內(nèi)核的瀏覽器支持,而且除了不加前綴的屬性,還要使用加-webkit-前綴的屬性。為簡(jiǎn)單起見,后面的例子只展示不加前綴的標(biāo)準(zhǔn)屬性。
“觀星指南”頁面中的所有區(qū)塊都是被剪切過的,因此都有一些向?qū)蔷€傾斜(見圖11)。
圖11 頁面中的所有區(qū)塊都被剪切過,因此都有點(diǎn)傾斜
每個(gè)區(qū)塊都有一個(gè)stacked 類,其中使用多邊形函數(shù)指定了剪切路徑:
.stacked { clip-path: polygon(0 3vw, 100% 0, 100% calc(100% - 3vw), 0% 100%); }
這個(gè)多邊形沒有前面土星的多邊形復(fù)雜,因此可以稍微深入地講解一下。多邊形中的每一個(gè)點(diǎn)都對(duì)應(yīng)著一對(duì)空格分隔的值,值對(duì)之間以逗號(hào)隔開。
先從左上角開始,0 3vw 表示x 軸剪切長(zhǎng)度為0,y 軸剪切長(zhǎng)度為3vw。這里使用相對(duì)視口的單位保證角度以視口大小為參照。接下來的坐標(biāo)是右上角坐標(biāo)100% 0。第三個(gè)100% calc(100% -3vw)指距右下角3vw,它不能使用百分比表示,因?yàn)檫@個(gè)y 軸坐標(biāo)是從上方開始計(jì)算的。最后,左下角的坐標(biāo)是0 100%。
因?yàn)榧羟新窂街挥绊懺劁秩竞蟮耐庥^,而不會(huì)影響頁面流,所以剪切后的元素之間會(huì)出現(xiàn)透明間隙(見圖11-12)。為消除間隙,可以給每個(gè)堆疊的區(qū)塊應(yīng)用一個(gè)負(fù)外邊距,而且要比3vm稍大一些,好讓相鄰的區(qū)塊邊緣能彼此重疊。但我們只希望在支持clip-path 的瀏覽器中應(yīng)用這個(gè)負(fù)外邊距,這時(shí)候正好可以用上@supports 規(guī)則。因?yàn)檫@些新的特效只在較新的瀏覽器中才存在,所以我們可以放心地這么寫:
@supports ((clip-path: polygon(0 0)) or (-webkit-clip-path: polygon(0 0))) { .stacked { margin-bottom: -3.4vw; } }
圖12 如果只應(yīng)用剪切,區(qū)塊之間會(huì)出現(xiàn)間隙
在@supports 規(guī)則塊中,我們測(cè)試了瀏覽器是否支持最小的多邊形(只有一個(gè)點(diǎn))。增加這些保障后,區(qū)塊就可以完美地對(duì)齊了。而在不支持clip-path 的瀏覽器中,區(qū)塊也會(huì)像平常一樣上下相接,不會(huì)重疊。
使用SVG
可以使用polygon()、circle()、ellipse()和inset() 函數(shù)創(chuàng)建剪切路徑,與創(chuàng)建CSS形狀一樣。對(duì)于復(fù)雜的形狀,建議大家還是使用圖片編輯器來創(chuàng)建,然后再將最終的圖形作為剪切路徑的源。我們?cè)陧撁鎸?dǎo)航中使用的形狀就是這樣生成的,如圖13 所示。
圖13 導(dǎo)航區(qū)中復(fù)雜的形狀是基于SVG 源實(shí)現(xiàn)的剪切
使用圖形作為剪切源,需要先使用SVG 創(chuàng)建剪切路徑,然后再通過一個(gè)URL 引用到形狀函數(shù)中。首先,要在Illustrator、Sketch 或Inkscape 之類的圖形編輯器中創(chuàng)建想要的形狀。雖然不那么簡(jiǎn)單,但還是可行的。
導(dǎo)航區(qū)塊本身是一個(gè)包含頁內(nèi)鏈接的無序列表:
<nav class="stacked section nav-section inverted"> <ul class="wrapper"> <li><a href="#moon">The Moon</a></li> <li><a href="#sun">The Sun</a></li> <li><a href="#planets">Planets</a></li> <li><a href="#milky-way">Galaxy</a></li> <li><a href="#universe">Universe</a></li> </ul> </nav>
在此,我們就不涉及導(dǎo)航本身的樣式了,大家只要知道這里用到了Flexbox 水平布局導(dǎo)航項(xiàng)目,將它們固定為100 像素見方的方塊就夠了。
然后,在支持SVG 的圖形編輯器(我們用的是Adobe Illustrator)中創(chuàng)建一張圖片。圖片的大小也是100 像素見方(見圖14)。其中的星球由兩個(gè)黑色的形狀構(gòu)成,一個(gè)圓形和一個(gè)旋轉(zhuǎn)后的橢圓形。接著把這個(gè)圖片保存為SVG 格式,命名為clip.svg。保存過程因編輯器而異,這里
就不說了,我們只關(guān)注大體的流程。
圖14 使用Illustrator 創(chuàng)建的星球圖形
下面在代碼編輯器中打開生成的SVG 文件,看上去大概是這樣的:
<svg xmlns=http://www.w3.org/2000/svg width="100px" height="100px" viewBox="0 0 100 100"> <circle cx="50" cy="50" r="45"/> <ellipse transform="matrix(-0.7553 0.6554 -0.6554 -0.7553 -12.053 54.99)" cx="50" cy="50" rx="63.9" ry="12.8"/> </svg>
為了把這個(gè)圖片轉(zhuǎn)換為剪切路徑,需要把其內(nèi)容包裝在一個(gè)<clipPath>元素中,并添加一個(gè)ID 屬性:
<svg xmlns="SVG namespace" width="100px" height="100px" viewBox="0 0 100 100"> <clipPath id="saturnclip"> <circle cx="50" cy="50" r="40.1"/> <ellipse transform="matrix(0.7084 -0.7058 0.7058 0.7084 -20.7106 49.8733)" cx="50" cy="50" rx="62.9" ry="12.8"/> </clipPath> </svg>
最后,就可以在CSS 中引用clip.svg 中的這個(gè)剪切路徑了:
.nav-section [href="#planets"] { clip-path: url(img/clip.svg#saturnclip); }
這樣就可以把多個(gè)剪切源保存在一個(gè)SVG 文件中,然后通過URL 的片段ID 分別引用。
二、蒙版
“觀星指南”頁面的標(biāo)題好像半隱于地球大氣層的后面(見圖15)。這種透明漸隱效果是通過蒙版實(shí)現(xiàn)的。
圖15 頁面標(biāo)題“Stargazing”通過蒙版實(shí)現(xiàn)了漸隱效果
Safari 早在2008 年就實(shí)現(xiàn)了蒙版,使用的是非標(biāo)準(zhǔn)屬性-webkit-mask-image。這個(gè)屬性允許指定一張圖片,并以這張圖片作為加蒙版元素透明度層次的來源。作為蒙版的圖片中,每個(gè)像素都有一個(gè)阿爾法級(jí)別(alpha level),也就是透明度。如果蒙版圖片中的像素是透明的,那么加蒙版元素中對(duì)應(yīng)的像素也不可見。相反,蒙版圖片中完全不透明的區(qū)域,對(duì)應(yīng)的加蒙版元素的區(qū)域也會(huì)完全可見。蒙版圖片的顏色與此無關(guān),因此灰度圖常用作蒙版。
除了圖片,還可以使用CSS 漸變來創(chuàng)建蒙版。頁面標(biāo)題的蒙版效果就是這么做的:
.header-title { mask-image: radial-gradient(ellipse 90% 30% at 50% 50%, rgba(0,0,0,0) 45%, #000 70%); mask-size: 100% 200%; }
相信大家都了解這個(gè)語法:mask-image 后面的值非常類似background-image 屬性的值,甚至也可以聲明多個(gè)蒙版。
除了指定蒙版圖片,還可以指定蒙版的大小和位置。對(duì)于我們這個(gè)例子而言,為了把蒙版放到文本底部,我們將它的高度聲明為兩倍,而沒有使用定位。如果我們?cè)谶@里簡(jiǎn)單地把漸變圖片移動(dòng)到下面,那么蒙版圖片的上半部分就會(huì)是透明的,結(jié)果就是文本的上半部分不可見。圖16展示了漸變蒙版的大小和位置,以及它與文本的相對(duì)位置關(guān)系。
圖16 蒙版圖片看起來就像是位于文本上方
在WebKit 最初實(shí)現(xiàn)的基礎(chǔ)上,蒙版相關(guān)的屬性得以標(biāo)準(zhǔn)化和擴(kuò)展,同時(shí)也支持了對(duì)應(yīng)的SVG效果。沒錯(cuò),就像clip-path 一樣,SVG 中的蒙板也可以應(yīng)用給HTML 內(nèi)容。
.header-title { /*嵌入頁面中的CSS,指向嵌入同一頁面中的SVG <mask>元素*/ mask: url(#ellipseMask); } 與前面CSS 漸變等價(jià)的SVG 標(biāo)記如下: <mask id="ellipseMask" maskUnits="objectBoundingBox" maskContentUnits="objectBoundingBox"> <radialGradient id="radialfill" r="0.9" cy="1.1"> <stop offset="45%" stop-color="#000"/> <stop offset="70%" stop-color="#fff"/> </radialGradient> </mask>
與剪切路徑一樣,這里也需要使用objectBoundingBox 坐標(biāo)系,按照0~1 的比例尺將蒙版縮放到與元素邊界匹配。SVG 蒙版元素本身還有一個(gè)maskContentUnits 屬性,這里也將其設(shè)置為與蒙版形狀相同的坐標(biāo)系。
SVG 蒙版源使用明度值(luminance)而非阿爾法級(jí)別來應(yīng)用蒙版。這意味著蒙版較暗的區(qū)域?qū)?yīng)的加蒙版元素區(qū)域會(huì)較透明,而蒙版較亮的區(qū)域?qū)?yīng)的加蒙版元素區(qū)域會(huì)較不透明。在前面SVG 蒙版的例子中,我們使用了黑白漸變。
瀏覽器會(huì)在你使用蒙版圖片時(shí)使用阿爾法級(jí)別,在你使用SVG 蒙版時(shí)使用明度值。在對(duì)標(biāo)準(zhǔn)的建議中,有一個(gè)mask-type 屬性可以切換這個(gè)應(yīng)用蒙版的依據(jù)值。
另外,-webkit-前綴版與建議的標(biāo)準(zhǔn)版屬性之間也有一些差異。可以參考MDN 中WebKit實(shí)現(xiàn)的完整屬性和語法。
——
本文很大程度上跳出了沉悶單調(diào)的頁面盒子世界。我們探討了如何通過CSS 形狀美化頁面中的元素,以及如何通過剪切路徑畫出視覺邊界。使用蒙版則可以進(jìn)一步控制界面中元素的可見性。
通過這些特效的學(xué)習(xí),我們也看到了SVG 與CSS 結(jié)合的威力,也極大擴(kuò)展了我們未來設(shè)計(jì)的想象空間。
——本文節(jié)選自《精通CSS:高級(jí)Web標(biāo)準(zhǔn)解決方案(第3版)》
CSS暢銷經(jīng)典全面升級(jí)
CSS作為Web標(biāo)準(zhǔn)的一部分,是現(xiàn)代網(wǎng)頁設(shè)計(jì)中必不可少的關(guān)鍵元素。鑒于CSS標(biāo)準(zhǔn)化的快速發(fā)展,想要成為CSS高手,打造出令人驚艷、辨識(shí)度高的網(wǎng)站,就必須充分了解當(dāng)前CSS規(guī)范各模塊的新特性、新技術(shù)和新思想。
本書是經(jīng)典CSS參考指南,自第1版出版至今一直暢銷不衰。第3版針對(duì)當(dāng)前瀏覽器支持度足夠好的CSS特性全面改寫,著眼于如何為更大、更復(fù)雜的網(wǎng)站編寫優(yōu)雅、巧妙、易維護(hù)的代碼。兩位作者均是技術(shù)與寫作才能俱佳的開發(fā)高手,他們將自己對(duì)現(xiàn)代CSS實(shí)踐的深刻理解融入書中,結(jié)合大量復(fù)雜實(shí)現(xiàn)情景,清晰展示了如何利用新技術(shù)寫出高度靈活、易維護(hù)和可擴(kuò)展的代碼,并讓這些代碼在不同瀏覽器和不同平臺(tái)上跑起來。
第1章 基礎(chǔ)知識(shí)
第2章 添加樣式
第3章 可見格式化模型
第4章 網(wǎng)頁排版
第5章 漂亮的盒子
第6章 內(nèi)容布局
第7章 頁面布局與網(wǎng)格
第8章 響應(yīng)式Web設(shè)計(jì)與CSS
第9章 表單與數(shù)據(jù)表
第10章 變換、過渡與動(dòng)畫
第11章 高級(jí)特效
第12章 品控與流程
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。