【CSS Secrets】邊框技巧

最近在閱讀CSS Secrets這本書(shū),發(fā)現(xiàn)作者講解了很多容易被忽略的CSS小技巧懂昂,感受到作者在寫(xiě)代碼的過(guò)程中介时,不僅僅只是思考如何實(shí)現(xiàn)各種效果,更多的會(huì)去思考和權(quán)衡代碼如何寫(xiě)出來(lái)更優(yōu)雅忍法、更簡(jiǎn)潔潮尝,并且后期維護(hù)更方便

我在閱讀的過(guò)程中饿序,整理了這些技巧勉失,并且按照自己的理解制作了簡(jiǎn)單的demo。

1. 半透明邊框

有時(shí)候我們希望父容器的背景能夠通過(guò)子容器的邊框透出來(lái)原探,一般我們會(huì)通過(guò)設(shè)置子容器邊框的透明度來(lái)實(shí)現(xiàn)乱凿。但事實(shí)上,父容器的背景只會(huì)延伸到子容器邊框的外延咽弦,容器邊框半透明只會(huì)顯示當(dāng)前容器的背景徒蟆。


默認(rèn)半透明邊框

這是因?yàn)樽尤萜?strong>background-clip屬性的默認(rèn)值為border-box,表示父容器的背景在子容器的邊框外延被裁掉型型。因此設(shè)置子容器的background-clip:padding-box就能實(shí)現(xiàn)半透明邊框段审。

另外擴(kuò)展一下,如果background-clip的屬性為content-box闹蒜,那么父容器的背景就能延伸到子容器的內(nèi)邊距里了寺枉。

下圖是background-clip的屬性值不同時(shí)的表現(xiàn):

background-clip

筆記
  • 直接給border的顏色hsla或者rgba實(shí)現(xiàn)半透明,不會(huì)將背景通過(guò)邊框透出來(lái)
  • 默認(rèn)情況下绷落,背景會(huì)延伸到邊框所在的區(qū)域下層
  • 利用CSS3屬性background-clip:padding-box可以讓背景在內(nèi)邊距的外延被裁掉姥闪,而不是邊框。

2. 多重邊框

實(shí)現(xiàn)多重邊框的方式很多砌烁,兼容性最好的應(yīng)該是利用多個(gè)容器嵌套制造視覺(jué)上的邊框假象筐喳。但是Lea Verou總是強(qiáng)調(diào)代碼DRY,多個(gè)容器嵌套會(huì)造成代碼的冗余,因此她介紹了通過(guò)box-shadowoutline實(shí)現(xiàn)多重邊框避归。

2.1 多重邊框(box-shadow)

利用box-shadow實(shí)現(xiàn)邊框的重點(diǎn)是利用了box-shadow屬性中的spread荣月,即只給第四個(gè)參數(shù)賦值。由于box-shadow支持逗號(hào)分隔槐脏,因此可以創(chuàng)建無(wú)限個(gè)投影邊框喉童。
由于box-shadow會(huì)相互疊加撇寞,因此每一層投影的spread都應(yīng)該比前一層更大才能實(shí)現(xiàn)多重投影顿天。
此外,box-shadow不會(huì)影響布局蔑担,因此如果使用該屬性產(chǎn)生邊框的話牌废,應(yīng)該提前預(yù)留其所占據(jù)的空間。

下面是利用box-shadow實(shí)現(xiàn)的簡(jiǎn)單案例和關(guān)鍵代碼:


多重邊框box-shadow.png
筆記
  • 擴(kuò)張半徑(第四個(gè)參數(shù))指定邊框?qū)挾绕∥眨屏亢湍:禐?
  • 可創(chuàng)建任意數(shù)量的投影
  • 每一層的投影相互疊加
  • 不影響布局和鼠標(biāo)事件
  • 利用inset關(guān)鍵字和元素的內(nèi)邊距可以讓投影出現(xiàn)的元素內(nèi)圈
  • 不能實(shí)現(xiàn)虛線邊框
  • 代碼書(shū)寫(xiě)重點(diǎn):box-shadow: 0 0 0 10px red,0 0 0 15px yellow

2.2 多重邊框(outline)

outline的兼容性相對(duì)于box-shadow要好一點(diǎn)鸟缕,不過(guò)其最多只能實(shí)現(xiàn)兩重邊框,而且不支持圓角排抬。

下面是利用outline實(shí)現(xiàn)的簡(jiǎn)單案例和關(guān)鍵代碼:


多重邊框outline.png
筆記
  • 可以實(shí)現(xiàn)帶虛線的邊框
  • 最多只能定義兩重邊框
  • 不能貼合border-radius產(chǎn)生的圓角

3.邊框內(nèi)圓角

理想實(shí)現(xiàn)效果是:容器邊框的內(nèi)側(cè)是圓角懂从,外側(cè)依舊保持直角。

主要有兩種方案來(lái)實(shí)現(xiàn)這個(gè)效果蹲蒲,方案一是利用兩個(gè)容器番甩,子容器擁有圓角,父容器稍大于子容器且為直角届搁。方案二是結(jié)合box-shadowoutline實(shí)現(xiàn)缘薛。

3.1 邊框內(nèi)圓角(2 divs)

這種方案不做過(guò)多的闡述,直接上圖和關(guān)鍵代碼:


內(nèi)圓角2div.png

3.2 邊框內(nèi)圓角(1 divs)

由于outline不會(huì)填補(bǔ)圓角而box-shadow會(huì)卡睦,因此利用outline實(shí)現(xiàn)邊框宴胧,而boxshadow來(lái)填補(bǔ)outline和容器之間的圓角空隙。

內(nèi)圓角1div.png

筆記
  • 結(jié)合box-shadow和outline
  • outline不會(huì)填補(bǔ)元素的圓角表锻,而box-shadow會(huì)
  • box-shadow陰影的擴(kuò)張值計(jì)算公式:0.414 * r < x ≤ w (其中x:陰影的擴(kuò)張值恕齐;r:圓角半徑;w:outline寬度)
  • 設(shè)置技巧:x=w瞬逊,box-shadow的color與outline的color值一致

結(jié)語(yǔ)

Lea Verou介紹的這幾種關(guān)于border的設(shè)置技巧显歧,讓作為網(wǎng)頁(yè)重構(gòu)菜鳥(niǎo)的我受益匪淺。這些屬性其實(shí)是最常見(jiàn)的码耐,平時(shí)工作中或多或少都會(huì)用到追迟,但是利用它們的特征去巧妙地實(shí)現(xiàn)一些看似不相關(guān)的視覺(jué)效果卻是我們很少想到的。也許在工作中骚腥,有些方法并不能滿足我們向下兼容各種低級(jí)瀏覽器的需求敦间,但是技術(shù)一直在更新,有時(shí)候需要在保證可讀性的前提下,適當(dāng)摒棄低級(jí)瀏覽器的視覺(jué)效果廓块。即使不能放棄低級(jí)瀏覽器厢绝,Lea Verou也推薦了一些解決兼容性的方法。

附上文中整理出來(lái)的簡(jiǎn)單demo的地址:http://www.qdfuns.com/notes/41216/d247b7c530352ed22245aacabbc18a5f.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末带猴,一起剝皮案震驚了整個(gè)濱河市昔汉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拴清,老刑警劉巖靶病,帶你破解...
    沈念sama閱讀 222,000評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異口予,居然都是意外死亡娄周,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,745評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén)沪停,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)煤辨,“玉大人,你說(shuō)我怎么就攤上這事木张≈诒妫” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,561評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵舷礼,是天一觀的道長(zhǎng)鹃彻。 經(jīng)常有香客問(wèn)我,道長(zhǎng)且轨,這世上最難降的妖魔是什么浮声? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,782評(píng)論 1 298
  • 正文 為了忘掉前任,我火速辦了婚禮旋奢,結(jié)果婚禮上泳挥,老公的妹妹穿的比我還像新娘。我一直安慰自己至朗,他們只是感情好屉符,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,798評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著锹引,像睡著了一般矗钟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上嫌变,一...
    開(kāi)封第一講書(shū)人閱讀 52,394評(píng)論 1 310
  • 那天吨艇,我揣著相機(jī)與錄音,去河邊找鬼腾啥。 笑死东涡,一個(gè)胖子當(dāng)著我的面吹牛冯吓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播疮跑,決...
    沈念sama閱讀 40,952評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼组贺,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了祖娘?” 一聲冷哼從身側(cè)響起失尖,我...
    開(kāi)封第一講書(shū)人閱讀 39,852評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎渐苏,沒(méi)想到半個(gè)月后掀潮,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,409評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡整以,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,483評(píng)論 3 341
  • 正文 我和宋清朗相戀三年胧辽,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片公黑。...
    茶點(diǎn)故事閱讀 40,615評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖摄咆,靈堂內(nèi)的尸體忽然破棺而出凡蚜,到底是詐尸還是另有隱情,我是刑警寧澤吭从,帶...
    沈念sama閱讀 36,303評(píng)論 5 350
  • 正文 年R本政府宣布朝蜘,位于F島的核電站,受9級(jí)特大地震影響涩金,放射性物質(zhì)發(fā)生泄漏谱醇。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,979評(píng)論 3 334
  • 文/蒙蒙 一步做、第九天 我趴在偏房一處隱蔽的房頂上張望副渴。 院中可真熱鬧,春花似錦全度、人聲如沸煮剧。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,470評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)勉盅。三九已至,卻和暖如春顶掉,著一層夾襖步出監(jiān)牢的瞬間草娜,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,571評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工痒筒, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留宰闰,地道東北人嗜暴。 一個(gè)月前我還...
    沈念sama閱讀 49,041評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像议蟆,于是被迫代替她去往敵國(guó)和親闷沥。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,630評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color咐容,font舆逃,text-align,li...
    wzhiq896閱讀 1,760評(píng)論 0 2
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color戳粒,font路狮,text-align,li...
    love2013閱讀 2,316評(píng)論 0 11
  • 所有圖都在body背景設(shè)置為green下的截圖蔚约,請(qǐng)不要把最外層的綠色當(dāng)成邊框 半透明邊框 如果我們想給一個(gè)容器設(shè)置...
    hcxowe閱讀 3,951評(píng)論 0 6
  • 我還記得國(guó)外某位大牛在一篇文章中寫(xiě)道奄妨,CSS is fine, it's just really hard。讀完他...
    garble閱讀 1,089評(píng)論 0 0
  • 1.多重邊框 我們可以通過(guò)使用border-image來(lái)寫(xiě)一個(gè)多重邊框苹祟,或使用多個(gè)元素來(lái)模擬多重邊框砸抛,不過(guò)我們有更...
    FlyingWWS閱讀 2,417評(píng)論 2 5