css 中多種邊框的實(shí)現(xiàn)小竅門

一、多重邊框[1]
背景知識(shí):box-shadow,outline
鑒于使用場景的多元化,多重邊框的設(shè)計(jì)越來越多,以往可以借助 border-image 屬性應(yīng)付一下,但是這個(gè)在css 代碼層面并不是很靈活。現(xiàn)在我們借助 box-shadow 和 outline 兩個(gè)屬性來分別實(shí)現(xiàn)多重邊框。
1、box-shadow 方案
思路:利用 box-shadow 的第四個(gè)參數(shù)(擴(kuò)張半徑)的大小,多重投影
代碼示例:
<div class="border-multiple"> 多重邊框?qū)崿F(xiàn)方案一:box-shadow </div> .border-multiple { margin: 50px auto; padding: 20px; width: 600px; background-color: #fff; box-shadow: 0 0 0 10px #f0f, 0 0 0 15px #00f, 0 2px 15px 15px rgba( 0, 0, 0, .8); }
多重邊框--box-shadow
小結(jié):
1、陰影并不影響布局,也不會(huì)受到box-sizing的影響
2、支持逗號(hào)分隔語法,可以創(chuàng)建任意數(shù)量的投影
3、缺點(diǎn):只能實(shí)現(xiàn)實(shí)線的邊框,不能實(shí)現(xiàn)其他樣式的邊框
2、outline 方案
代碼示例:
<div class="border-outline"> 多重邊框?qū)崿F(xiàn)方案二:outline </div> .border-outline { margin: 200px auto; padding: 20px; width: 600px; background-color: #ff0; outline: 3px dashed #0f0; outline-offset: -10px; }
多重邊框–outline
小結(jié):
1、前提是實(shí)現(xiàn)兩層邊框
2、可能需要 outline-offset 的屬性值
3、outline 的描邊默認(rèn)是矩形,當(dāng)有圓角時(shí)會(huì)認(rèn)為是 bug , 不能貼合圓角
4、不支持逗號(hào)語法
二、邊框內(nèi)圓角[2]
背景知識(shí):box-shadow,outline
為了解決上面例子小結(jié)3中的bug,可以用box-shadow 擴(kuò)張半徑來填補(bǔ)掉 圓角與outline 之間的空隙。
代碼示例:
<div class="inner-rounding"> 需要借助 box-shadow、outline、“多重邊框”來實(shí)現(xiàn) 注意點(diǎn) : box-shadow 的擴(kuò)展半徑應(yīng)該是 圓角半徑的 0.5倍 </div> .inner-rounding { background-color: #ccc; margin: 50px auto; padding: 20px; width: 600px; padding: 20px; border-radius: 20px; box-shadow: 0 0 0 10px #f00; outline: 10px solid #f00; }
注意點(diǎn) : box-shadow 的擴(kuò)展半徑應(yīng)該是 圓角半徑的 0.5倍;嚴(yán)格來說應(yīng)該是(√2 - 1) 倍,這里取 0.5 倍是為了更好的計(jì)算
邊框內(nèi)圓角
三、半透明邊框[3]
背景知識(shí):rgba 或 hsla 顏色屬性,background-clip
思路:讓邊框呈現(xiàn)在 被裁剪背景的 padding-box 里
代碼示例:
<div class="border-opacity"> 半透明邊框的實(shí)現(xiàn) </div> .border-opacity { margin: 50px auto; padding: 20px; width: 600px; border: 10px solid hsla(0, 0%, 100%, 0.5); background-color: #fff; background-clip: padding-box; }
小結(jié):
半透明邊框的實(shí)現(xiàn)需要借助css3的 background-clip 的屬性
background-clip有三個(gè)屬性:
1、border-box: 背景被裁剪到邊框盒(看不到邊框)
2、padding-box: 背景被裁剪到內(nèi)邊距框(可以看見邊框)
3、content-box: 背景被裁剪到內(nèi)容框(邊框緊貼著內(nèi)容)
半透明邊框效果圖
四、連續(xù)的圖像邊框[4]
背景知識(shí):css 漸變,基本的border-iamge,background-clip
先來看看 border-image 是如何來實(shí)現(xiàn) 圖像邊框的:
border-image 的實(shí)現(xiàn)原理是九宮格伸縮法:把圖片切割成九塊,然后把它們應(yīng)用到元素邊框相應(yīng)的邊和角。
代碼示例:
<p class="border-image">border-image 的實(shí)現(xiàn)原理是九宮格伸縮法:把圖片切割成九塊,然后把它們應(yīng)用到元素邊框相應(yīng)的邊和角。</p> <p class="border-image">我們并不想讓圖片的某個(gè)特定部分固定在拐角處;而是希望出現(xiàn)在拐角處的圖片區(qū)域是隨著元素寬高金額邊框厚度的變化而變化的。</p> .border-image { border: 40px solid transparent; border-image: 33.334% url("http://csssecrets.io/images/stone-art.jpg"); padding: 1em; max-width: 20em; font: 130%/1.6 Baskerville, Palatino, serif; } .border-image:nth-child(2) { margin-top: 1em; border-image-repeat: round; }
border-image 效果圖
缺點(diǎn):我們并不想讓圖片的某個(gè)特定部分固定在拐角處;而是希望出現(xiàn)在拐角處的圖片區(qū)域是隨著元素寬高金額邊框厚度的變化而變化的。
如何解決呢?
實(shí)現(xiàn)思路:
1、利用 css 漸變和背景的擴(kuò)展
2、在背景圖片上,在疊加一層純白的實(shí)色背景
3、為了讓下層的背景透過邊框區(qū)域顯示出來,需要給兩層背景指定不同的 background-clip 值
4、在多重背景的最底層設(shè)置背景色,需要用一道從白色過渡到白色的 css 漸變來模擬出純白色實(shí)色背景的效果
代碼示例:
<p class="contituous-images">實(shí)現(xiàn)思路: 1、利用 css 漸變和背景的擴(kuò)展 2、在背景圖片上,在疊加一層純白的實(shí)色背景 3、為了讓下層的背景透過邊框區(qū)域顯示出來,需要給兩層背景指定不同的 background-clip 值 4、在多重背景的最底層設(shè)置背景色,需要用一道從白色過渡到白色的 css 漸變來模擬出純白色實(shí)色背景的效果 </p> .contituous-images { padding: 1em; border: 1em solid transparent; /* background: linear-gradient(white, white), url(http://csssecrets.io/images/stone-art.jpg); background-size: cover; background-clip: padding-box, border-box; background-origin: border-box; */ /* background 還可簡寫如下 */ background: linear-gradient(white, white) padding-box, url(http://csssecrets.io/images/stone-art.jpg) border-box 0 / cover; width: 21em; padding: 1em; overflow: hidden; /* 邊框可拖拽 */ resize: both; font: 100%/1.6 Baskerville, Palatino, serif; }
連續(xù)的圖像邊框
還可以通過漸變圖案實(shí)現(xiàn)信封樣式的邊框
代碼示例
還可以通過 漸變圖案實(shí)現(xiàn) 信封樣式的 邊框
<p class="envelope-border">還可以通過 漸變圖案實(shí)現(xiàn) 信封樣式的 邊框</p> .envelope-border { padding: 1em; border: 0.5em solid transparent; background: linear-gradient(white, white) padding-box, repeating-linear-gradient(-45deg, red 0, red 12.5%, transparent 0, transparent 25%, #58a 0, #58a 37.5%, transparent 0, transparent 50%) 0 / 3em 3em; max-width: 20em; font: 100%/1.6 Baskerville, Palatino, serif;}
信封邊框效果圖
到此這篇關(guān)于css 中多種邊框的實(shí)現(xiàn)小竅門的文章就介紹到這了,更多相關(guān)css 邊框內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
- 這篇文章給大家介紹了如何使用CSS實(shí)現(xiàn)漸變圓角邊框的效果,有沒有發(fā)現(xiàn)在現(xiàn)如今的網(wǎng)站應(yīng)用中,我們大量的使用到這類場景,在解決這類問題時(shí),我們利用了css的mask與mask-comp2023-10-12
- 今天給大家分享一個(gè)使用CSS實(shí)現(xiàn)簡單的邊框流光效果,就像和夜晚街上的廣告牌很像,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的2023-09-14
- 今天給大伙帶來的是一個(gè)鋸齒形邊框,類似于傳統(tǒng)郵票的邊框,有一圈鋸齒形狀,其實(shí)看到這種效果,相信很多人第一反應(yīng)是采用偽元素的方式添加小三角形來實(shí)現(xiàn)鋸齒狀,確實(shí)是這2023-09-08
CSS實(shí)現(xiàn)切角+邊框+投影+內(nèi)容背景色漸變效果
這篇文章主要介紹了CSS實(shí)現(xiàn)切角+邊框+投影+內(nèi)容背景色漸變效果,單純用css實(shí)現(xiàn)切角+邊框+投影+內(nèi)容背景色漸變所有效果,因?yàn)閁I沒給背景切圖,尋思這個(gè)理論上用css就能實(shí)現(xiàn)2021-10-27- 本文通過代碼給大家介紹css背景和邊框標(biāo)簽的一些知識(shí),通過相關(guān)屬性設(shè)置背景顏色,背景圖像,對(duì)css背景與邊框的相關(guān)知識(shí)感興趣的朋友一起看看吧2021-05-21
css實(shí)現(xiàn)邊框流動(dòng)的項(xiàng)目實(shí)踐
邊框流動(dòng)效果是一種很酷的效果,可以為網(wǎng)頁增添一些動(dòng)感和活力,本文就來介紹一下css實(shí)現(xiàn)邊框流動(dòng)的項(xiàng)目實(shí)踐,具有一定的參考價(jià)值,感興趣的可以了解一下2024-02-01