摘要:背景與邊框半透明邊框背景知識顏色在里我們可以使用和兩種色彩模式,二者均可以用來在設(shè)置顏色的同時指定其它透明度。解決方案需要知道的是,在默認(rèn)情況下,背景會延伸到邊框所在區(qū)域的下層。
title: 背景與邊框
date: 2016-10-16
tags: CSS Secrets
在CSS3里我們可以使用RGBA和HSLA兩種色彩模式,二者均可以用來在設(shè)置顏色的同時指定其它透明度。RGBA指的是“紅色、綠色、藍(lán)色和Alpha透明度”,而HSLA則代表“色調(diào)、飽和度、亮度和Alpha透明度”。
在RGBA模式里,前三個參數(shù)分別是紅色、綠色和藍(lán)色的強度值,取值從 0~255 或 0%~100% (最常見的是 0~255, 而非百分?jǐn)?shù)形式)。而在HSLA模式里,前三個參數(shù)則分別代表色調(diào)( 0~360 )、飽和度( 0%-100% )和亮度( 0%~100% )。RGBA和HSLA第四個參數(shù)都是透明度,取值從0(完全透明)到1(完全不透明)。
解決方案CSS3仍有opacity屬性,但它的作用是使整個元素都半透明,包括前景內(nèi)容,而不僅是背景。
需要知道的是,在默認(rèn)情況下,背景會延伸到邊框所在區(qū)域的下層。所以即使我們給邊框設(shè)置了半透明的效果,那么從視覺上也是無法分辨的。所以,如果我們不希望背景侵入邊框所在的范圍,就需要使用到 CSS3 的 background-clip 背景切割屬性,將它的值設(shè)置為 padding-box。
border: 10px solid hsla(0%, 0%,100%,.5); background:white; background-clip:padding-box;0x01 多重邊框 box-shadow
不為人知的是,box-shadow 還可以接受第四個參數(shù)(稱為"擴展半徑"),通過指定正值或者負(fù)值,可以讓投影面積加大或者減小。
一個正值的擴展半徑加上兩個為零的偏移量以及為零的模糊值,得到的投影其實就像是一道實線邊框了,在加上 box-shadow 的最大好處,可以支持逗號分隔發(fā)法,那么我們便可以為其創(chuàng)建任意數(shù)量的投影了。
div{ height: 200px; width: 200px; background: yellowgreen; box-shadow: 0 0 0 10px #655,0 0 0 15px deeppink, 0 2px 5px 15px rgba(0,0,0, 0.6); }outline
有時當(dāng)我們只需要兩層邊框的時候,便可以使用 outline 屬性來產(chǎn)生外層的邊框,這種方案會變得非常靈活,而不同于 box-shadow 只能模擬實現(xiàn)邊框。
div{ height: 200px; width: 200px; border: 20px solid #655; border-radius: 10px; outline: 5px dashed deeppink; }
描邊的另一屬性 outline-offset 還可以控制它更元素邊緣之間的間距,這個屬性可以接受負(fù)值。
div{ height: 200px; width: 200px; border: 20px solid #655; border-radius: 10px; outline: 5px dashed deeppink; outline-offset: -25px; }
但是,IE8 以下的并不支持 outline-offset 屬性。
0x02 背景定位 背景定位去掉 input 標(biāo)簽 focus 時的亮色邊框 input {outline:none}
有時,我們希望背景圖片與容器的邊角之間留出一定的空隙(類似內(nèi)邊距的效果),在 CSS2 的時代要實現(xiàn)這一點是很麻煩的。但是在 CSS3 的時代 background-position 屬性已經(jīng)得到了很好的擴展,并且當(dāng)結(jié)合 background-origin 屬性使用時,將發(fā)揮出更大的創(chuàng)造力。
在 CSS3 中,background-position 允許我們指定背景圖片距離任意角的偏移量,只需我們在偏移量前指定關(guān)鍵字就好了。
需要知道的是,background-position 在默認(rèn)情況下是以 padding-box 為基準(zhǔn)的,不過,我們可以使用 CSS3 中一個新的屬性 background-origin 來改變這種默認(rèn)行為。background-origin 默認(rèn)值同樣為 padding-box,其它可以接受的值是,content-box 和 border-box。
#box{ width:500px; height:500px; border:20px solid rgba(0,0,0,0.5); background: url(img/adver2.jpg) no-repeat ; /*background-clip:content-box; */ background-position: right 20px bottom 10px; background-origin: content-box; padding:40px; }
如此,我們在 background-position 中使用的邊角關(guān)鍵字將會以內(nèi)容區(qū)的邊緣作為基準(zhǔn)。
0x03 邊框內(nèi)圓角一個靈活的方法是使用兩個嵌套的 div 來實現(xiàn)邊框內(nèi)圓角的效果。
#box{ background:#655; padding:0.8em; } #subBox { background: tan; padding:0.8em; border-radius:0.8em; }0x04 條紋背景 背景知識 CSS3 漸變中的百分比
在 CSS 漸變屬性中使用百分比的作用是指某個顏色距離起點的起始位置。默認(rèn)的漸變樣式為從上往下,所以當(dāng)某個顏色值設(shè)置了百分比后,便會從距離頂端相關(guān)的距離(百分比計算)開始填充實色。而漸變是也有空間占比的,漸變過渡區(qū)的占比為總的空間(高度或?qū)挾?減去上下兩個著色塊空間占比剩下的空間。
但若是前面有比當(dāng)前的顏色值百分比大的,會自動將當(dāng)前顏色值的百分比設(shè)置為前面顏色中的最大百分比值。
此外,默認(rèn)情況下,還會根據(jù)顏色的個數(shù)來為每個顏色設(shè)置百分比,最后一個顏色的百分比值就是100%,而起始的值就是0%,中間如果再有多個顏色值,則根據(jù)100/(個數(shù)-1)平均下去。
如此,便可以做出一個簡單的多重顏色線條的背景來:
#box{ width:400px; height:200px; background:linear-gradient( red 0, red 14.3%, orange 0, orange 28.6%, yellow 0, yellow 42.9%, green 0, green 57.2%, blue 0, blue 71.5%, indigo 0, indigo 85.8%, purple 0, purple 100%); }
顏色要設(shè)置兩次,是因為每個顏色需要一個起始著色點,然后還需要將兩個顏色之間的漸變過渡區(qū)域覆蓋為實色,消除過度效果。
水平條紋漸變是一種由代碼生成的圖像,我們能想對待其他任何背景圖像那般來對待他,比如對其使用 background-size 來調(diào)整其大小。
div{ width:200px; height: 200px; background:linear-gradient( #fb3 50%, #58a 0 ); background-clip:padding-box; background-size: 20px 100%; }垂直條紋
div{ width:200px; height: 200px; background:linear-gradient( to right,/*or 90deg*/ #fb3 50%, #58a 0 ); background-clip:padding-box; background-size: 100% 20px; }0x05 斜向條紋
div{ width:200px; height: 200px; background:linear-gradient( 45deg, #fb3 0, #fb2 25%, #58a 0, #58a 50%, #fb3 0, #fb3 75%, #58a 0, #58a 100% ); background-clip:padding-box; background-size: 20px 20px; }
如果我們需要為背景添加斜向條紋,那么便需要為貼片( 20px,20px)設(shè)置完整的色標(biāo)。不幸的是,這種方法并不完美,當(dāng)我們嘗試改變漸變的角度時,看起來會很糟糕。幸運的是,還有更好的方法來創(chuàng)建斜向條紋,即 repeating-linear-gradient 和 repeating-radial-gradient,循環(huán)式的重復(fù)漸變。
如此,便再也無須擔(dān)心如何去創(chuàng)建無縫拼接的貼片。并且,我們會直接在漸變的色標(biāo)中指定長度,而不是原來的 bakcground-size ,這里的長度是直接在漸變軸上進行度量的,它直接代表了條紋自身的寬度,對漸變來說就是以整個元素的范圍進行填充。
div{ width:200px; height: 200px; background:repeating-linear-gradient( 45deg, #fb3 0, #fb2 15px, #58a 0, #58a 30px ); }
需注意的是在這個方法中,如果我們想要創(chuàng)建雙色條紋,那么便需要使用四個色標(biāo)才行。
0x06 同色系條紋div{ width:200px; height: 200px; background: deeppink; background-image: repeating-linear-gradient( 30deg, hsla(0,0%,100%,0.3), hsla(0,0%,100%,0.3) 15px, transparent 0, transparent 30px ); }
我們首先為其指定了一個主色系的背景顏色,然后把半透明白色的條紋疊加在主色系背景之上得到淺色條紋。
桌布圖(方格圖)
div{ width:200px; height: 200px; background: white; background-image: linear-gradient( rgba(200,0,0,0.5) 50%,transparent 0), linear-gradient(90deg,rgba(200,0,0,0.5) 50%,transparent 0); background-size: 30px 30px; }0x07 偽隨機條紋
自然界中的事物都不是以無限平鋪的方式存在的。大自然更不會以 "無縫" 的貼片重復(fù)自己。所以重現(xiàn)大自然的隨機性也許展現(xiàn)更多的真實性。
background: hsl(20,40%,90%); background-image: linear-gradient( 90deg,#fb3 11px,transparent 0), linear-gradient(90deg,#ab4 23px,transparent 0), linear-gradient(90deg,#655 41px,transparent 0); background-size: 41px 100%,61px 100%,81px 100%; //41,61,81 都是質(zhì)素
為了增加隨機性的真實性,我們將貼片尺寸進行了最大化。為了讓最小公倍數(shù)最大化,即要達(dá)成相對質(zhì)素,那么最好的方法便是使用質(zhì)數(shù)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/115414.html
摘要:另外一種實現(xiàn)思路是添加四個來分別實現(xiàn)上下左右的邊框效果,雖然可行,但是要添加四個額外元素,有點兒得不償失的感覺。背景 這幾天工作中遇到一個交互需求,要求實現(xiàn)一個效果,當(dāng)鼠標(biāo)移入一個元素的時候,元素出現(xiàn)一個動態(tài)的邊框,如圖: showImg(https://user-gold-cdn.xitu.io/2019/5/15/16aba8a2ccb58e4e);動態(tài)邊框 思路 看到這個效果,我首先想...
摘要:給一個容器設(shè)置一層白色背景和一道半透明白色邊框。思路實際是設(shè)置的背景會延伸到邊框所在的區(qū)域的下層,可以通過屬性調(diào)整背景的默認(rèn)行為。優(yōu)點邊框樣式十分靈活。缺點只適用于雙層邊框的場景邊框不一定會貼合屬性產(chǎn)生的圓角。 1.給一個容器設(shè)置一層白色背景和一道半透明白色邊框。 思路:實際是設(shè)置的背景會延伸到邊框所在的區(qū)域的下層,可以通過background-clip屬性調(diào)整背景的默認(rèn)行為。 bac...
摘要:半透明邊框相關(guān)語法多重邊框方案需要注意的是,上面所創(chuàng)建的邊框是偽邊框,并不響應(yīng)鼠標(biāo)事件。方案以左上角為基準(zhǔn)。圖像邊框連續(xù)的圖像邊框?qū)傩砸?guī)定背景的繪制區(qū)域。 半透明邊框 border:10px solid hsla(0,0%,100%,.5); background: white; background-clip: padding-box; showImg(htt...
摘要:簡單就意味著更快的開發(fā)速度,更小的維護成本,同時往往具有更好的體驗下面我介紹哪些或許你不知道小技巧。默認(rèn)為,此時陰影與元素同樣大。如果沒有指定,則由瀏覽器決定通常是的值,不過目前取透明。首先,我們要明白這里的最小寬度值是什么意思。 暑假實習(xí)的時候帶我的師傅,告訴我要注重基礎(chǔ),底層實現(xiàn)原理。才能在日新月異的技術(shù)行業(yè)站住腳跟,以不變應(yīng)萬變,萬丈高樓平地起,所以我們應(yīng)該不斷的去學(xué)習(xí),去交流。...
摘要:簡單就意味著更快的開發(fā)速度,更小的維護成本,同時往往具有更好的體驗下面我介紹哪些或許你不知道小技巧。默認(rèn)為,此時陰影與元素同樣大。如果沒有指定,則由瀏覽器決定通常是的值,不過目前取透明。首先,我們要明白這里的最小寬度值是什么意思。 暑假實習(xí)的時候帶我的師傅,告訴我要注重基礎(chǔ),底層實現(xiàn)原理。才能在日新月異的技術(shù)行業(yè)站住腳跟,以不變應(yīng)萬變,萬丈高樓平地起,所以我們應(yīng)該不斷的去學(xué)習(xí),去交流。...
閱讀 1905·2021-11-25 09:43
閱讀 1405·2021-11-22 14:56
閱讀 3280·2021-11-22 09:34
閱讀 2010·2021-11-15 11:37
閱讀 2256·2021-09-01 10:46
閱讀 1396·2019-08-30 15:44
閱讀 2294·2019-08-30 13:15
閱讀 2393·2019-08-29 13:07